Ini adalah pertanyaan tindak lanjut untuk saya pertanyaan Puzzling.SE : Saya bertanya apakah ada fungsi f memetakan string Boolean string Boolean, sehingga f (f (b)) = membalikkan (b) untuk semua masukan string b . (Secara terbalik , maksud saya fungsi yang membalik urutan bit.)
Tautan di atas berisi jawaban positif, dengan bukti, oleh f '' hebat , tetapi Anda mungkin ingin merenungkan pertanyaannya sendiri sebelum melihat.
Mengimplementasikan fungsi seperti f sebagai beberapa byte mungkin.
Anda dapat membaca input dari STDIN, atau mengambil argumen fungsi; dan baik menulis string hasil ke STDOUT, atau mengembalikannya.
Apa pun itu, Anda dapat bekerja dengan string aktual dari dua byte atau karakter berbeda pilihan Anda (katakan
0dan1, atau\x00dan\x01), atau dengan array / daftar nilai-nilai yang benar dan salah . Namun, pilih dua nilai dan patuhi itu.Hasil aplikasi tunggal f harus berupa string biner itu sendiri: tidak ada jawaban konyol seperti
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b...Fungsi Anda harus total ; khususnya, input mungkin berupa string kosong, atau satu bit panjang, dll. Tidak ada batas atas untuk panjang string.
Itu juga harus murni : jangan simpan negara global apa pun di antara panggilan fungsi; string input harus sepenuhnya menentukan string output.