Eine Zeichenfolge kann um eine Zahl verschoben werden, n
indem der Bytewert c
jedes Zeichens in der Zeichenfolge abgerufen, berechnet (c + n) mod 256
und das Ergebnis zurück in ein Zeichen konvertiert wird.
Zum Beispiel führt eine Verschiebung "ABC123"
um 1 zu einer "BCD234"
Verschiebung um 10 "KLM;<="
Zoll und eine Verschiebung um 255 Zoll "@AB012"
.
Die Aufgabe
Wählen Sie so viele Zahlen n
mit , 0 < n < 256
wie Sie es wagen , und schreiben Sie ein Programm oder eine Funktion , die einen String als Eingabe und
- Gibt den String unverändert zurück, wenn der Quellcode unverändert ist, aber
- Gibt den String zurück, um den verschoben wurde,
n
wenn der Quellcode um verschoben wurden
.
Regeln
- Die Punktzahl Ihrer Einreichung ist die Anzahl der unterstützten
n
, wobei eine höhere Punktzahl besser ist. Die maximale Punktzahl beträgt somit 255. - Ihr Beitrag muss mindestens eine Schicht unterstützen, daher beträgt die Mindestpunktzahl 1.
- Bei Gleichstand gewinnt das kürzere Programm.
- Alle verschobenen Programme müssen in derselben Sprache sein.
string
code-challenge
source-layout
Laikoni
quelle
quelle
\r
?Antworten:
Brainfuck, Punktzahl: 31 (2208 Bytes)
Base64-codiertes Programm:
Arbeitet für die Schichten 0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 160, 164, 168, 172 192, 196, 200, 204, 224, 228, 232 und 236.
Für jeden Wert zwischen 0 und 255 gibt es genau eine dieser Verschiebungen, die dieses Zeichen an einen gültigen Brainfuck-Befehl sendet.
Das Programm stützt sich auf 8-Bit-Zellen mit Zeilenumbruch bei Überläufen. Dies könnte wahrscheinlich ziemlich viel Golf sein, da die Schicht nur aus einem wiederholten
+
oder-
(je nachdem, was kürzer ist) besteht.Python-Code, mit dem dies generiert wird:
quelle
+[>,.<]
?),[+.,]
, wo+
ist die Menge von+
s oder-
slHaskell, Score 255 (27.026 Bytes)
Das Programm funktioniert, aber wenn ich es in meine Zwischenablage lege, wird es anscheinend zerstört. Hier ist also Code, der mein Programm ausgibt.
Nachprüfung
Wie überprüfe ich, ob das Kopieren von Dingen in eine Zwischenablage funktioniert?
Sie können dies hier verwenden . Sie können
N
die Zeichenfolge anpassen und (derzeitBig ol' egg
) überprüfen, ob sie selbst funktioniert.Dadurch werden alle N nacheinander an einem einzelnen Eingang geprüft, es tritt jedoch eine Zeitüberschreitung auf.
Erläuterung
Dies missbraucht die Schreibweise von Haskell. In gebildeten Haskell ist jede Zeile, die nicht mit
>
einem Kommentar beginnt, ein Kommentar. Damit unser Code funktioniert, erstellen wir 255 Kopien des Programms, die sich jeweils verschieben,n
und verschieben dann jede einzelne Kopie um-n
.quelle
C, Punktzahl: 1 (73 Bytes)
Probieren Sie es online!
Um 1 verschoben:
Probieren Sie es online!
quelle
05AB1E , Score: 3 (24 Byte)
Probieren Sie es online!
Erläuterung
Einmal verschoben:
Probieren Sie es online!
Erläuterung
Zweimal verschoben:
Probieren Sie es online!
Erläuterung
Dreimal verschoben:
Probieren Sie es online!
Erläuterung
quelle
Javascript, Bewertung:
14 (94346 Bytes)Ziemlich unkompliziert, hat verschiedene Abschnitte beim Drehen auskommentiert. Das Schwierige dabei war, verwendbare Variablennamen und Kommentarabschnitte zu finden, die die JavaScript-Syntax nicht verletzen.
Nicht gedreht:
Gedreht um 5:
Gedreht um 10:
Gedreht um 14: hier wurde es endlich interessant, das Javascript-Typ-System zu missbrauchen.
Gedreht um 199:
Um die Lösungen zu finden, habe ich ein kleines Tool erstellt , mit dem ich verschiedene Ausschnitte anzeigen kann, wenn sie um einen variablen Betrag gedreht werden. Dann habe ich bestimmte Muster gefunden, die ich als nützliche Bausteine verwenden kann.
Das Wichtigste dabei ist, dass
a/**/=>a
es sich immer noch um eine gültige Funktionsdefinition handelt, mit der Sie eine umgekehrt gedrehte Funktion in den Kommentarbereich einbetten können. Von da an kann es ein paar Mal wiederholt werden, wenn es richtig gemacht wird.Da die meisten Kommentarbereiche verschachtelt sind, ist es möglicherweise möglich, ein anderes Ergebnis zu finden. Aufgrund von Kollisionen und Steuerzeichen wird es jedoch mit jeder hinzugefügten Antwort schwieriger, dies zu tun.
Das Ersetzen aller Verwendungen von
charCodeAt(0)
mitcharCodeAt``
würde 4 Byte der gesamten Lösung einsparen, aber es ist zu viel Arbeit, um es von Grund auf neu zu machen.quelle
charCodeAt()
2 Bytes speichern?PHP mit
-d output_buffering=on -d short_open_tag=on
, Score: 255 (25.731 Bytes)Ähnlich wie bei der Haskell-Lösung wurde beim Kopieren und Einfügen dieser Unterbrechungen dies mithilfe dieses Perl-Skripts generiert .
Überprüfung für 1, 16, 32 und 255-mal verschoben.
Erläuterung
Mit PHP-
<?
Begrenzer das machte ziemlich einfach, aber ich hatte keine Saiten zu vermeiden, als könnte am Ende an<?
anderer Stelle im Code, dies im Grunde Mittel03
,14
,25
,36
,47
,58
und69
. Mit Arithmetik war es ziemlich einfach, diese zu umgehen. Möglicherweise kann die Anzahl der Bytes auch im ursprünglichen Programm reduziert werden.quelle
Crane-Flak , Score 3 (252 Byte)
Probieren Sie es online!
(Funktioniert nicht ganz in Brain-Hack, da nur Crane-Flak Mods von 256)
Um 1 verschoben
Probieren Sie es online!
Um 2 verschoben
Probieren Sie es online!
Verschoben um 3
Probieren Sie es online!
Erläuterung
Der Hauptcode bei der Arbeit ist hier
wo
n
ist eine willkürliche Zahl. Dies verschiebt alles in den Offstack und fügt esn
zu jedem Element hinzu (Modulo 256 ist bei der Ausgabe impliziert) und verschiebt sie dann alle zurück.Für das erste Programm (dh um 0 verschoben) brauchen wir dies jedoch nicht zu tun, da das Verschieben um Null das cat-Programm ist. Also fangen wir mit diesem Code an:
und verschiebe es um 1 nach unten
Dies ist unausgeglichen, daher müssen wir es beheben. Es gibt eine Reihe von Möglichkeiten, wie wir dies mit meiner Auswahlmethode tun können (aus Gründen, die sich später herausstellen werden):
Wenn wir dies um 2 erhöhen, erhalten wir
Da
()
es einfacher ist, damit umzugehen, als{}
wir es verwenden werden}
, um das von uns gewünschte Programm zu vervollständigen. Das bedeutet, dass das)
mit ziemlich offensichtlichen Mitteln ausgeglichen werden kann. Mit einigem Geigen können wir daraus machen:Wenn wir das wieder nach unten verschieben, erhalten wir
Der Schritt bis 3 ist so komplex, dass ich ihn nicht mehr richtig verstehe. Ich habe die gleiche Technik angewendet und nur herumgespielt, bis ich endlich alle 4 auf einmal zum Arbeiten gebracht habe. Die Technik ist so ziemlich die gleiche, es wird nur viel mehr herumgespielt.
quelle
Python 3, Score 1, 76 Bytes
Shift 0: keine Änderung
Schicht 1:
Begann die Arbeit an Schicht 2, aber "" wird zu $$ und Sie können damit keine Zeile beginnen.
Wenn Sie es in einer Datei speichern, stellen Sie sicher, dass es nicht mit einem Zeilenumbruch endet. (vim -b file.py + set noeol)
quelle
Gelee , Punktzahl
12815 BytesSchicht 0:
Probieren Sie es online!
Schicht 2:
Versuchen Sie 2 online!
Schicht 3:
Versuchen Sie 3 online!
quelle