Jeder weiß, was Lauflängencodierung ist. Es war bereits Gegenstand vieler Code-Golf-Herausforderungen. Wir werden uns eine bestimmte Variante ansehen.
Beispiel
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
Die Zahl in Klammern gibt an, wie oft das vorherige Symbol aufgetreten ist. Im Beispiel wurden nur Läufe mit 5 oder mehr Zeichen codiert. Dies liegt daran, dass Codierungsläufe von 4 oder weniger die Anzahl der Zeichen nicht verbessern.
Herausforderung
Schreiben Sie eine Funktion / ein Programm, die bzw. das diese Variation der Lauflängencodierung implementiert, aber auch Läufe mit zwei Symbolen codieren kann. Die Läufe von zwei Symbolen müssen ebenfalls in Klammern stehen. Eine Gruppe wird ebenfalls in Klammern gesetzt. Ihr Programm muss eine Zeichenfolge als Eingabe akzeptieren und die geänderte Zeichenfolge mit Änderungen ausgeben, die die Zeichenfolge verkürzen.
Beispiel
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Anmerkungen
111
wurde nicht codiert, da die Codierung it (1(3)
) nicht kürzer ist.- Die Zeichenfolge
444111
kommt dreimal vor, sodass sie codiert ist. 676767
wurde nicht codiert, weil((67)(4))
es länger als zuvor ist.222222277777222222277777
wurde nicht als codiert((222222277777)(2))
. Warum? Weil222222277777
sich auf reduzieren kann2(7)7(5)
.123123123123
wird nicht codiert, da Ihr Programm zwei Symbole verarbeiten soll, nicht drei.
Dies ist Code-Golf, also gewinnt der kürzeste Code. Tie-Breaker ist frühzeitige Einreichung.
Wenn ich etwas verpasst habe oder wenn Sie sich nicht sicher sind, benachrichtigen Sie mich bitte in den Kommentaren.
441444144414
-> ((4414)(3))
?
4414
ist technisch gesehen eine Serie von 4. Mein Wortlaut ist einfach schlecht.
111111111
als codiert werden (1)(9)
?
67
s.