Dies ist eine Folgefrage meiner Puzzling.SE Frage : Ich fragte , ob es eine Funktion ist f Mapping Boolean Strings Boolean Strings, so dass f (f (b)) = reverse (b) für alle Eingabezeichenfolgen b . ( Umgekehrt meine ich die Funktion, die die Reihenfolge der Bits umkehrt.)
Der obige Link enthält eine positive Antwort mit Beweis durch das große F '' , aber Sie möchten die Frage vielleicht selbst überdenken, bevor Sie sie sich ansehen.
Implementieren Sie eine solche Funktion f in möglichst wenigen Bytes.
Sie können entweder Eingaben von STDIN lesen oder ein Funktionsargument verwenden. und schreiben Sie entweder die Ergebniszeichenfolge nach STDOUT oder geben Sie sie zurück.
In beiden Fällen können Sie mit tatsächlichen Zeichenfolgen aus zwei unterschiedlichen Bytes oder Zeichen Ihrer Wahl (z. B.
0
und1
, oder\x00
und\x01
) oder mit Arrays / Listen mit wahren und falschen Werten arbeiten . Wählen Sie zwei Werte und bleiben Sie dabei.Das Ergebnis einer einzelnen Anwendung von f muss selbst eine Binärzeichenfolge sein: keine dummen Antworten wie
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b
...Ihre Funktion sollte total sein ; Insbesondere kann die Eingabe eine leere Zeichenfolge oder ein Bit lang sein. Es gibt keine Obergrenze für die Länge der Zeichenfolge.
Es sollte auch rein sein : Behalten Sie keinen globalen Status zwischen Funktionsaufrufen bei; Die Eingabezeichenfolge muss die Ausgabezeichenfolge vollständig bestimmen.
Antworten:
CJam, 32 Bytes
Probieren Sie es online aus.
Zu lang...
quelle
Python 2,
64-69BytesUngolfed:
Dies findet die Periode der Saite, dh die minimale
p
,s
die eine Saite ist, die sich mehrmalsp
wiederholtn
(ich habe eine Golfmethode für SO gefunden). Wennn
dann ungerade ist, wird eine weitere Wiederholung der Periode hinzugefügt. Wennn
es gerade ist, wird eine Wiederholung der Periode entfernt und umgekehrt.Vielen Dank an @ Sp3000 für die Unterstützung bei der Implementierung der Funktionszuordnung zwischen 1 <-> 2, 3 <-> 4 usw.quelle
Perl,
4947 BytesBeinhaltet +2 für
-lp
Basierend auf @ feersums sehr schönem Algorithmus
Mit Eingabe auf STDIN ausführen, z
halfreverse.pl
:Erläuterung
quelle