Kürzen Sie den Text mithilfe der Lauflängencodierung (oder nicht)
Eingang:
heeeello woooorld
Ausgabe:
1h4e2l1o 1w4o1r1l1d
- Lesen Sie die Zeilen von stdin.
- Auf Standard drucken.
- Stderr wird natürlich verworfen.
- Angenommen, es gibt versteckte Testfälle (keine Einbettung der Ausgabe)
- Eingabe / Ausgabe als ASCII
- Jede Sprache wird akzeptiert
w4orld
anstelle von1w4o1r1l1d
(Sie müssten sich den Zahlen entziehen, z. B. `f111 -> f3 \ 1´). Aber dann wäre es fast22
ist ein trivialer Fixpunkt.11
ist unmöglich.22
muss dort enden oder von einem anderen Fixpunkt gefolgt werden, der nicht mit beginnt2
.333nnn
ist ein unmögliches Muster, denn Sie werden niemals das gleiche Zeichen an aufeinanderfolgenden ungeraden Indizes finden.4444
und bis scheitern aus dem gleichen Grund.Antworten:
Perl:
46→ 36 oder 27 Zeichenperl -pe's|((.)\2*)|@x=split//,$1;@x.$x[0]|eg'
Alle begrüßen @ardnew für die Idee, mit dem
tr///c
Operator die Anzahl der Zeichen in der übereinstimmenden Zeichenfolge zu zählen, anstatt sie zu teilen:Degolfed:
Verwendungszweck:
oder über STDIN
druckt
quelle
p
Option.s|((.)\2*)|$1=~y///c.$2|eg
, was 27 Zeichen insgesamt ergibt (unter Verwendung der gleichen Zeichenzählregeln wie @Gareth)-p
durch Eliminieren der äußeren Parens noch weiter auf 25 Bytes (einschließlich ) verkürzt werden : Probieren Sie es online aus!Stax , 7 Bytes
Führen Sie es aus und debuggen Sie es st staxlang.xyz!
Entpackt (8 Bytes) und Erklärung:
5 Bytes, funktioniert nur in einer einzelnen Zeile:
Führen Sie es aus und debuggen Sie es unter staxlang.xyz!
Vielleicht nicht legal. Dieses Programm druckt jedes Paar in einer eigenen Zeile. Ein bisschen lückenhaft.
Wenn dieses Ausgabeformat unzulässig ist, gebe ich Ihnen 6 Bytes :
Führen Sie es aus und debuggen Sie es unter staxlang.xyz!
Der rekursive Ersteller der Sprache weist darauf hin, dass uncons-right (
N
) dies auf sechs entpackte Bytes verkürzen kann, da es dasE
und das]
alleine handhabt . Programme, die so kurz sind, werden jedoch beim Packen oft nicht kürzer, und dies ist ein Beispiel. Noch sechs Bytes:|RFNpp
Bearbeiten: Musste meine Hauptantwort aktualisieren; Dieses Formular habe ich verwendet.quelle
|RFNpp
kann die angegebene Ausgabe in 6 Bytes entpackt geben, packt aber leider nicht.J,
3531 ZeichenVerwendungszweck:
quelle
[:,(#,&":{.)/.~
für 15: Probieren Sie es online aus!Brachylog , 11 Bytes
Probieren Sie es online aus!
(Wenn die Ausgabe wirklich auf stdout erfolgen muss, fügen Sie
w
am Ende ein Byte für hinzu .)quelle
K (oK) , 28 Bytes
Probieren Sie es online aus!
Auf dem Handy folgt die Erklärung ...
quelle
Python 3 iterativ,
1159997 BytesProbieren Sie es online aus!
Python 3 rekursiv,
136130129 BytesProbieren Sie es online aus!
Der iterative Ansatz scheint recht erfolgreich zu sein, während die rekursive Version viel Raum für Verbesserungen bietet.
quelle
while
Schleife in Ihrem Code nur dazu dient, die Eingabe zu demonstrieren. Ohne sie ist Ihr Code noch gültig. In diesem Fall muss die Schleife nicht Teil des Codes sein, und Sie können das erste Beispiel wie folgt auf 85 Byte reduzieren: Probieren Sie es online aus!05AB1E , 9 Bytes
Probieren Sie es online aus.
Oder alternativ:
Probieren Sie es online aus.
Erläuterung:
quelle
Wolfram Language (Mathematica) , 98 Bytes
Probieren Sie es online aus!
Ein flexibleres E / A-Format reduziert diese Lösung auf 54 Byte :
Probieren Sie es online aus!
quelle
Bash: 104 Zeichen
Probelauf:
quelle
Zsh, 117
Führen Sie es so aus:
De-Golf gespielt
quelle
[[
Konstrukt ist ein eigenständiger Befehl (wie[
) und muss von anderen Befehlen getrennt werden. Für die Verwendung von[
over[[
müssen die Argumente in Anführungszeichen gesetzt werden, sodass vier"
hinzugefügt werden müssen.APL (24)
quelle
Burlesque (17B)
Ältere / alternative und längere Versionen:
quelle
rs , 19 Zeichen
Das zählt nicht wirklich, weil ich rs erstellt habe , nachdem dies gepostet wurde ... aber es hat trotzdem Spaß gemacht!
Probieren Sie es hier aus!
quelle
Netzhaut , 12 Bytes
Probieren Sie es online aus.
Erläuterung:
Holen Sie sich einen Teil von 1 oder mehr desselben Charakters und erfassen Sie den Charakter in Erfassungsgruppe 1.
Ersetzen Sie es durch die Länge der gesamten Übereinstimmung, die mit dem Charakter aus der Erfassungsgruppe 1 verknüpft ist:
quelle
Ruby , 42 Bytes
Probieren Sie es online aus!
quelle
Python 3 , 84 Bytes
Probieren Sie es online aus!
Erläuterung
Überprüft, ob das erste und das zweite Zeichen der Zeichenfolge gleich sind. Wenn dies der Fall ist, erhöhen Sie den Zähler um 1. Wenn dies nicht der Fall ist, drucken Sie den Zähler und das erste Element und setzen Sie den Zähler auf 1 zurück. In beiden Fällen wird die Funktion rekursiv aufgerufen, wobei das erste Zeichen entfernt wird.
Löst einen Fehler aus, wenn das Ende der Zeichenfolge erreicht ist.
Ohne E / A-Einschränkungen, aber mit minimaler Byteanzahl:
Python 3.8 (Vorabversion) , 70 Bytes
Probieren Sie es online aus!
Python 3-Äquivalent (77 Bytes)
Erläuterung
Entfernt alle sich wiederholenden Zeichen vom Anfang der Zeichenfolge. Dann wird eine Zeichenfolge zurückgegeben, die (1.) den Längenunterschied zwischen der ursprünglichen Zeichenfolge und der abisolierten Zeichenfolge enthält. (2.) das erste Zeichen der ursprünglichen Zeichenfolge; (3.) das Ergebnis der rekursiven Funktion, die auf die gestrippte Zeichenfolge angewendet wird. Die Rekursion endet, wenn eine leere Zeichenfolge gefunden wird.
quelle
[Scala (Shell)], 150 Bytes
Probieren Sie es online aus!
Hier de-golfed der reine Lambda (103 Bytes):
quelle
Julia 1.1 ,
948481 BytesProbieren Sie es online aus!
quelle
'\n'
,readline()
anstatt das letzte Tupel manuell zu druckenCJam , 2 Bytes
e`
ist eine integrierte Funktion für die Lauflängencodierung. Die implizite Ausgabe von CJam ignoriert Array-Klammern und wird so[[1 'h] [2 'e]]
zu"1h2e"
Probieren Sie es online aus!
quelle
Zsh, 70 Bytes
Probieren Sie es online aus!
Dies ist eine viel Golfversion der früheren zsh-Antwort ( tio link ). Könnte wahrscheinlich mehr mit string => Array-Konvertierung anstelle von Iteration gespielt werden.
quelle