Numer0nを解くプログラムを作ってみた
1.概要 こんにちは、おにぎりです。 皆さんは"Numer0n"を知っていますか、簡単にいうと各桁が重複しない3桁の数字を当てるゲームです。数字があっていて場所が違う場合は"EAT"、数字があっていて場所が同じ場合は"BITE"という風に言います。例えば相手の番号が 213 でコールした数が 319 だったら、相手が 1EAT-1BITE という風に答えます。 説明が下手ですいません(笑)詳しくはwikiでも見てください( Numer0nの基本ルール ) そして、今回はその相手の数字を当てるプログラムをC言語で作ったのでブログを書いてみました。 2.アルゴリズム プログラムを作る上で一番重要なアルゴリズムを考えます。とりあえず、定石というものがないのであり得ない可能性を省いていくプログラムを考えます。 また、EATとBITEを書くのが長いので、□EAT-○BITE だったら □E○B という風に書きます。 条件1. 0E0B のときにその数の可能性を無くす。 例えば 123 で 0E0B だったとき すべての桁で1,2,3の可能性がなくなります。 これは簡単ですね。 条件2. 0BITE のときにその桁以外のその数の可能性を無くす。 例えば 123 で 0BITE だったとき 十の位と一の位で 1 百の位と一の位で 2 百の位と十の位で 3 の可能性がなくなります。 条件3. 0EAT のときにその桁のその数の可能性を無くす。 例えば 123 で 0EAT だったとき 百の位で 1 十の位で 2 一の位で 3 の可能性がなくなります。 条件4. □EAT のときにその桁のその数の可能性を上げる。 例えば 123 で 1EAT だったとき 百の位で 1 十の位で 2 一の位で 3 の可能性のパラメータを上げます。 条件5. ○BITE のときにその数の可能性を上げる。 例えば 123 で 1BITE だったとき すべての桁で 1,2,3 の可能性のパラメータを上げます。(この時の増分は 条件4 の時より少なくします) 条件6. EATとBITEの合計が3のときにその数の以外の可能性を下げる。 例えば 1...