先日、私たちのチームは脱出室に行きました。パズルの1つには、6つの機械式スイッチのボードが含まれており、ボックスのロックを解除するには、次のような正しいオンとオフの組み合わせを見つける必要がありました。
-v-v-v-
-v-v-v-
開発者である私たちは、実際にパズルを解くよりも2 ^ 6 = 64の組み合わせを1つずつ試す方が効率的だと判断しました。そこで、貧しい人にバイナリカウントを割り当てました。
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
等々。
課題は
、上記のようにフォーマットされた文字列として位置オフのスイッチ全てが与えられると、そのプログラムを書いて、任意の順序でオンとオフのすべての組み合わせを生成します。
完全なプログラムまたは関数のいずれかを作成できます。したがって、プログラムは、stdin、ファイルを介して、または単一の文字列引数として入力を受け取り、出力を返すか印刷することができます。返される場合、出力はlist / array / etcにある可能性があります。単一の文字列ではなく。出力が単一の文字列の場合、ボードは改行で区切る必要があります(末尾の改行は許可されます)。
入力文字列は正規表現r'((-v)+-)(\n(-v)+-)*'
と一致し、すべてのスイッチがオフになっている1つのボードを表します。これは、ゼロケースがないことを意味し、スイッチは左揃えです。各行には同じ数のスイッチがない場合があります。
各出力ボードは、入力とまったく同じ形式である必要がありますが、必要に応じてvを^に置き換えることができます。出力ボードは、任意の数の改行で区切ることができます。
ランタイムは当然、スイッチの数がO(2 ^ n)であるため、コードはどのような配置でも10を超えるスイッチではテストされません。
これはコードゴルフなので、バイト数の最も短いコードが優先されます。
サンプルの入力と出力
入力:
-v-
可能な出力:
-v-
-^-
入力:
-v-
-v-
可能な出力:
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
多数のスイッチについて回答を確認するのは非常に面倒なので、ここでは健全性チェックツールとしてのPythonスクリプトを示します。(テストケースをさらに増やしたい場合に備えて、特定の入力ファイルから期待される出力を生成するために、現在コメントアウトされたスニペットを含めました。)入力文字列を「input」という名前のファイルに入れ、改行で区切られた出力(申し訳ありませんが、リストのフォーマットはありません)は同じディレクトリの「output」という名前のファイルに入れて実行しpython3 sanitycheck.py
ます。