パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Rust 4日目 3目並べ1手詰

2020-06-03 | Rust 9日坊主

3目並べ1手詰めの問題があったので作ってみました👑

 

正規表現などを使うのが筋のような気がしますが、関数で作ります

 

Rust 関数の特徴

returnは最後の行に  return ; をつけないでそのものだけ記述(9行目) 

随時 return  使えません

 

&str Stringがややこしいのです

 

プログラムの内容

1) 問題の場面でoの置ける位置すべてに置く

2) 勝利できるパターンとマッチするか判定

3)マッチすればその置いた場面を表示

 

 

 

ソースリスト

//3目並べで勝つ(一手読み) 
fn match_board(board: &str, check: &str) -> i32 {
    let mut r = 1;
    for (b,c) in board.chars().zip(check.chars()){
        if c=='o' && b !='o'{
            r = 0;
        }
    }
    r
}

fn print_board(board: & str){
    println!("{}\n{}\n{}\n ", &board[..3], &board[3..6], &board[6..]);
}

fn to_win(board: & str) {
    println!("** board **");
    print_board(board);
    println!("-- to win --");
    let mut win_sw = 0;
    let check = &vec!["ooo......", "...ooo...", "......ooo",
                     ".o..o..o.", "..o..o..o", "o..o..o..",
                     "..o.o.o..", "o...o...o"];
    for i in 0..9{
        if &board[i..i+1] == "."{
            let next_board = &format!("{}{}{}", &board[..i], "o", &board[i+1..]);
            for check_board in check{
                if match_board(next_board, check_board) == 1{
                    print_board(next_board);
                    win_sw = 1;
                }
            }
        }
    }
    if win_sw == 0{
        println!("NONE...");
    }
}

fn main() {
    to_win("oo.xx....");
    to_win("oox.oxx..");
    to_win("o........");
}


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。