Herausforderung
Gehen Sie bei zwei Zeichenfolgen in einem beliebigen Standard-E / A-Format wie folgt vor:
HINWEIS: Die Herausforderung bezieht sich auf die erste Zeichenfolge als "Daten" und die zweite als "Programm".
- Ändern Sie das Programm in eine unendliche Zeichenfolge, die nur das Programm ist, das unendlich wiederholt wird (z . B.
10
->1010101010...
). Die Herausforderung wird dies als "unendliches Programm" bezeichnen. Während die Daten nicht leer sind, gehen Sie wie folgt vor, während Sie das Endlosprogramm durchlaufen:
ein. Wenn der aktuelle Befehl "0" ist, löschen Sie das Bit ganz links in den Daten. Wenn die Daten leer sind, macht "0" nichts.
b. Wenn der aktuelle Befehl "1" ist, hängen Sie das nächste Zeichen im Programm an die Daten an, wenn das Bit ganz links in den Daten eine Eins ist.
c. Wenn die Daten jetzt nicht leer sind, geben Sie die Daten aus.
Testfälle
Daten sind die linke Seite der Eingabe und das Programm ist die rechte Seite.
100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...
Anmerkungen
- Die Daten und das Programm bestehen nur aus Nullen und Einsen
- Für Daten / Programme, die nicht angehalten werden, muss Ihr Programm nicht angehalten werden.
- Die Daten und das Programm sind in der Eingabe nicht leer.
- Möglicherweise haben Sie mehrere nachfolgende und führende Zeilenumbrüche
- Standardlücken sind verboten
- Sie können jedes bequeme E / A-Format verwenden
Wie immer mit Code-Golf , kürzestem Code gewinnt !
quelle
100
geht an10
auf cmd0
, deren Definition „löschen Sie das am weitesten links gelegene Bit in den Daten.“ wäre nicht das Bit ganz links100
sein1
?Antworten:
Haskell,
777162 BytesProbieren Sie es online aus!
Bearbeiten: -9 Bytes dank @xnor.
quelle
f:[e,f++take d q]!!p#q
.C # (Visual C # Interactive Compiler) , 82 Byte
Probieren Sie es online aus!
quelle
0
und 49 ist der ASCII-Wert von1
List
undSkip
oder so etwas verwendenJ , 65 Bytes
Probieren Sie es online aus!
Ich kann das später weiter Golf spielen. Beachten Sie, dass
5
am Ende_
im eigentlichen Programm unendlich wäre , aber ich habe es dort belassen, um das Ausführen der Beispiele ohne Unterbrechung zu vereinfachen.quelle
Python 3 , 74 Bytes
Probieren Sie es online aus!
Argumente ::
d
Daten ,p
: Programm.quelle
05AB1E ,
2421 BytesNimmt das Programm als erste Eingabe und Daten als zweite Eingabe.
Probieren Sie es online aus.
Erläuterung:
quelle
Ruby ,
6259 BytesProbieren Sie es online aus!
Wie
c
und Datend
, rufen Sie sie aufa
undb
.a
Am Ende von zurücksetzenc
.b
am Anfang vond
if zurücka==1
. Dies kann auf verkürzt werden[b]*a
c
am Ende vond
ifa==1 and b==1
. Dies kann auf verkürzt werdenc[0,a*b]
.quelle
Python 2 ,
9682 BytesProbieren Sie es online aus!
Ein bisschen aus der Antwort von Emodiment of Ignorance stehlen ...
Ein Generator, der Listen mit Einsen und Nullen für die Eingabe / Ausgabe verwendet.
quelle
Gelee , 40 Bytes
Probieren Sie es online aus!
Ich habe angenommen, dass nachfolgende Zeilenumbrüche in Ordnung sind. Ich habe auch eine Liste mit zwei Listen mit Nullen und Einsen als Eingabe und Ausgabe an stdout erstellt.
quelle
Python 1 , 75 Bytes
Probieren Sie es online aus!
quelle
[]
Einsen und Nullen gewechselt haben, drucken Sie jetzt ein leeres Array anstelle einer neuen Zeile in z. B. Daten[1,0,0]
, Programm[0]
.C ++ (gcc) , 178 Bytes
Probieren Sie es online aus!
quelle
C ++ (gcc) ,
294289272 Bytes-22 Bytes dank @ceilingcat
Probieren Sie es online aus!
Ziemlich einfacher Algorithmus. Kopiert die Daten in eine Warteschlange und durchläuft das Programm wiederholt. Bei einer "0" wird das erste Element in der Warteschlange entfernt (das erste "Bit"). Bei einer 1 fügt es das nächste "Bit" des Programms zu den Daten hinzu, wenn das erste "Bit" der Daten 1 ist. Dann durchläuft es die Daten, druckt sie "Bit" für "Bit" und druckt schließlich a Platz zum Trennen aufeinanderfolgender Dateneingaben.
quelle
c[1]
! Aktualisiert.