これは私のPuzzling.SEの質問のフォローアップの質問です。ブール文字列をブール文字列にマッピングする関数fがあり、すべての入力文字列b に対してf(f(b))= reverse(b)があるかどうかを尋ねました。(reverseとは、ビットの順序を逆にする機能を意味します。)
上記のリンクには、優れたf ''による証明付きの肯定的な答えが含まれていますが、見る前に自分で質問を熟考することをお勧めします。
そのような関数fをできるだけ少ないバイトで実装します。
STDINから入力を読み取るか、関数の引数を取ることができます。そして、結果文字列をSTDOUTに書き込むか、それを返します。
どちらの方法でも、選択した2つの異なるバイトまたは文字の実際の文字列(
0
and1
、or\x00
、andなど\x01
)、またはtrueおよびfalse値の配列/リストを操作できます。ただし、2つの値を選択し、それらに固執します。fを 1回適用した結果は、バイナリ文字列そのものでなければなりません
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b
。あなたの機能は合計する必要があります。特に、入力は空の文字列、または1ビット長などです。文字列の長さの上限はありません。
また、純粋でなければなりません。関数呼び出し間でグローバルな状態を保持しないでください。入力文字列は出力文字列を完全に決定する必要があります。