Hintergrund
Nach dem Anwenden der BWT (wie in Burrows, Wheeler und Back ) und der MTF (wie in Move to the printable ASCII front ) wird die wendet bzip2- Kompressor eine ziemlich einzigartige Form der Lauflängencodierung an.
Definition
Für diese Herausforderung definieren wir die Transformation BRLE wie folgt:
Gehen Sie bei einer Eingabezeichenfolge s , die ausschließlich aus ASCII-Zeichen mit Codepunkten zwischen 0x20 und 0x7A besteht, wie folgt vor:
Ersetzen Sie jeden Lauf gleicher Zeichen durch ein einzelnes Vorkommen des Zeichens und speichern Sie die Anzahl der Wiederholungen nach dem ersten.
Codieren Sie die Anzahl der Wiederholungen nach dem ersten Auftreten des Zeichens mit der bijektiven Basis-2-Nummerierung und den Symbolen
{
und}
.Eine nicht negative ganze Zahl n wird als die Zeichenkette b k … b 0 codiert, so dass n = 2 k i (b k ) +… + 2 0 i (b 0 ) ist , wobei i (
{
) = 1 und i (}
) = 2 .Beachten Sie, dass diese Darstellung immer eindeutig ist. Zum Beispiel kann die Nummer 0 wird als eine leere Zeichenfolge codiert.
Fügen Sie die geschweifte Klammer ein, die die Anzahl der Wiederholungen nach dem einzelnen Auftreten des entsprechenden Zeichens codiert.
Beispiel Schritt für Schritt
Input: "abbcccddddeeeeeffffffggggggghhhhhhhh"
Step 1: "abcdefgh" with repetitions 0, 1, 2, 3, 4, 5, 6, 7
Step 2: "" "{" "}" "{{" "{}" "}{" "}}" "{{{"
Step 3: "ab{c}d{{e{}f}{g}}h{{{"
Aufgabe
Implementieren Sie ein involutives Programm oder eine involutive Funktion, die eine einzelne Zeichenfolge aus STDIN oder als Befehlszeilen- oder Funktionsargument liest und entweder die BRLE oder deren Inverse der Eingabezeichenfolge ausgibt oder zurückgibt.
Wenn die Eingabe keine geschweiften Klammern enthält, wenden Sie BRLE an. Wenn die Eingabe geschweifte Klammern enthält, wenden Sie die Umkehrung an.
Beispiele
INPUT: CODEGOLF
OUTPUT: CODEGOLF
INPUT: PROGRAMMING
OUTPUT: PROGRAM{ING
INPUT: PUZ{LES
OUTPUT: PUZZLES
INPUT: 444488888888GGGGGGGGGGGGGGGGWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
OUTPUT: 4{{8{{{G{{{{W{{{{{
INPUT: y}}}{{
OUTPUT: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Zusätzliche Regeln
Sie können keine integrierten Funktionen verwenden, die die BRLE oder die Umkehrung einer Zeichenfolge berechnen.
Sie können integrierte Funktionen verwenden, die:
Berechnen Sie die RLE oder RLD eines Strings, solange die Anzahl der Wiederholungen nicht in der bijektiven Basis 2 gespeichert ist.
Grundkonvertierung aller Art durchführen.
Ihr Code druckt möglicherweise eine abschließende neue Zeile, wenn Sie für die Ausgabe STDOUT auswählen.
Ihr Code muss für jede Eingabe von 1000 oder weniger ASCII-Zeichen im Bereich von 0x20 bis 0x7A sowie geschweiften Klammern (0x7B und 0x7D) funktionieren.
Wenn die Eingabe geschweifte Klammern enthält, können Sie davon ausgehen, dass es sich um ein gültiges Ergebnis der Anwendung der BRLE auf eine Zeichenfolge handelt.
Es gelten die Standard-Code-Golfregeln. Die kürzeste Übermittlung in Bytes gewinnt.