Bei einer Reihe von 1
und 2
in beliebiger Länge, schreiben einige Code (nicht zu sein braucht Funktion mehr, alles wird in Ordnung sein) , dass berechnet , wie viele Schritte braucht es den String in eine endgültige Form zu schrumpfen, nach diesem Kriterium:
Wenn Ihr String ist 112112
, bedeutet dies , dass Sie ein 1 zwei 1s drucken müssen und 2, wie folgt aus :
1112
. Wenn Sie den Vorgang erneut ausführen, müssen Sie eine 1 und eine 2 drucken 12
. Dann drucken Sie eine 2 und erhalten 2
. Dies ist eine endgültige Form, da sich diese Zeichenfolge nicht mehr ändern wird. Ihr Code wird ausgegeben 3
, da Sie 3 Schritte benötigt haben, um zum endgültigen Formular zu gelangen.
Andere Regeln
Wenn die Saite ungerade lang ist, bleibt die letzte Zahl unangetastet.
Jede Zeichenfolge, die sich nicht mehr ändern kann (wie
222222
), wird als endgültige Form betrachtet.Sie können keine externe Quelle verwenden.
Ihr Code muss mit jeder Zeichenfolge von
1
und funktionieren2
.Der kürzeste Code gewinnt, da es sich um Code-Golf handelt.
Ihr Code sollte jeden Schritt drucken.
Jede Eingabemethode wird in Ordnung sein.
Beispiele
Input >> 122122122121212212
Your code has to print:
211222111111222
11222111222
122111222
2111222
111222
1222
222
Steps:7 (you can omit the "Steps")
---- ---- ---- ----
Input >> 22222221
Your code has to print:
22222211
2222221
2
---- ---- ---- ----
Input >> 2222
Your code has to print:
0
EDIT: Stark bearbeitet. Es tut mir Leid.
1 11 2
. Alle zwei Zahlen sind ein Paar: Die erste Zahl des Paares gibt an, wie oft die zweite Zahl im Paar gerendert werden soll. Jede letzte ungerade Ziffer ohne Partnerpaar wird unverändert wiedergegeben.Antworten:
Ruby 1.9+, 73 Zeichen
Ich sehe das nicht-regex Regel als dumm und willkürlich, so ist hier eine gehässigeregex - basierte Lösung:Testlauf:
Die letzte Zeile gibt die Anzahl der Schritte an.
Bearbeiten: Die Regex-Einschränkung wurde von Vereos entfernt.
quelle
C -
156154Mein erster Code Golf hier!
Prüfung:
Ausgabe:
quelle
GolfScript: 69 Zeichen
Bei jeder Iteration der inneren Schleife werden die ersten beiden Zahlen in der Zeichenfolge gefunden und zum Bilden eines Formularblocks verwendet
{num1 num2 '' + *}
. Wenn dieser Block ausgewertet wird, erhalten wir das gewünschte Lesen dieser Zahlen. Wiederholen Sie diesen Vorgang, bis keine Zeichen mehr vorhanden sind. Wiederholen Sie diese Schleife, während Sie die Anzahl der Iterationen und des Druckvorgangs verfolgen.Stichprobe:
quelle
Python - 126
Der Eingabewert wird nicht gedruckt. Wenn es sein muss, dann gehe
print s;
vorher nach rechtsn="";
Hinweis: Sie haben "Funktion" gesagt, dies ist also eine Funktion. Hier ist eine Version, die keine Funktion ist (127 Zeichen):
(Wenn der Benutzer die Nummer in dann 118 einfügen kann (Daten zwischen Anführungszeichen in der ersten Zeile einfügen)):
Probelauf:
Als Bonus kann jede dieser Lösungen für Zeichenfolgen verwendet werden, die größere Zahlen (bis zu 9) enthalten. Einige Zeichenfolgen erzeugen jedoch immer größere Ausgaben (z. B.
99
).quelle
JavaScript, 107
(erfordert Pfeilfunktionsunterstützung, zB wie in Firefox)
s
ist die EingabezeichenfolgeIn jeder Runde wird der reguläre Ausdruck verwendet
.?.?
, ums
ein Array aus Zeichenfolgen mit zwei Zeichen zu erstellen. Anschließend werdenmap
diese Zeichenfolgen in ihre reduzierten Formen gebracht und das Array wieder zusammengeklebtr
Speichert das Ergebnis der aktuellen Runde zum Vergleich mit der vorherigen Rundes
k
ist der runde ZählerWir missbrauchen
prompt
(mit Aliasp
) schrecklich als Eingabe- und Ausgabemechanismus, da er dem Benutzer eine Nachricht präsentieren kannquelle
Perl - 50 (+2) Bytes
Erfordert
-pl
Befehlszeilenoptionen.Beispielnutzung:
quelle
PHP, 240
Beispiel: http://skyleo.de/codegolf.php?i=211222111111222
Ich bin ein bisschen schlecht im Codegolf. Vielleicht sollte ich nicht nur Java und PHP verwenden (und ich sollte komplizierter denken)
quelle
str_split
da Sie auf einzelne Zeichen in einem String zugreifen können, genau wie auf ein Array in PHP.R 158
Beispiel:
quelle
MATHEMATICA, 117
quelle
POWERSHELL, 2
Basierend auf Vereos 'Antwort "Sie können jede Eingabemethode verwenden, die Ihren Code verkürzt" auf meine Frage in den Kommentaren des OP, erzielt das folgende Skript das Ergebnis:
Beispiellauf für "122122122121212212":
Offensichtlich ist dies kein ernstzunehmender Eintrag - er soll meinen Standpunkt verdeutlichen, dass das Zulassen einer Eingabemethode den tatsächlichen Code, der zur Erzielung der Antwort benötigt wird, trivialisieren kann. Daher muss die Eingabemethode genauer spezifiziert werden.
quelle
J, 41 Zeichen
Als eine Funktion (ew parens! Nicht schrecklich glücklich über sie):
Explosionszeichnung Probelaufquelle
Perl, 107 Zeichen
Der andere Perl-Code schlägt dies eindeutig, aber für das, was es wert ist, ist es hier. Ich habe den Schalter -l auf Kosten eines zusätzlichen Zeichens verwendet:
Eine besser lesbare Version davon:
quelle