Dies ist die Umkehrung von Let's do some "deciph4r4ng"
In dieser Herausforderung besteht Ihre Aufgabe darin, eine Zeichenfolge zu verschlüsseln. Glücklicherweise ist der Algorithmus ziemlich einfach: Beim Lesen von links nach rechts muss jedes typische Schreibzeichen (ASCII-Bereich 32-126) durch eine Zahl N (0-9) ersetzt werden, um anzuzeigen, dass es mit dem Zeichen N + 1 identisch ist Positionen davor. Die Ausnahme ist, wenn das Zeichen in der ursprünglichen Zeichenfolge nicht an den letzten 10 Stellen vorkommt. In diesem Fall sollten Sie das Zeichen einfach erneut drucken. Tatsächlich sollten Sie in der Lage sein, den Vorgang von der ursprünglichen Herausforderung umzukehren.
Beispiel
Die Eingabezeichenfolge "Programming"
würde folgendermaßen codiert:
Daher ist die erwartete Ausgabe "Prog2am0in6"
.
Erläuterungen und Regeln
- Die Eingabezeichenfolge enthält ausschließlich ASCII-Zeichen im Bereich von 32 bis 126. Sie können davon ausgehen, dass es niemals leer sein wird.
- Die ursprüngliche Zeichenfolge enthält garantiert keine Ziffer.
- Sobald ein Zeichen codiert wurde, kann es wiederum durch eine nachfolgende Ziffer referenziert werden. Zum Beispiel
"alpaca"
sollte als codiert werden"alp2c1"
. - Referenzen werden niemals um die Zeichenfolge gewickelt: Es kann nur auf vorherige Zeichen verwiesen werden.
- Sie können entweder ein vollständiges Programm oder eine Funktion schreiben, die das Ergebnis entweder druckt oder ausgibt.
- Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes.
- Standardlücken sind verboten.
Testfälle
Input : abcd
Output: abcd
Input : aaaa
Output: a000
Input : banana
Output: ban111
Input : Hello World!
Output: Hel0o W2r5d!
Input : this is a test
Output: this 222a19e52
Input : golfing is good for you
Output: golfin5 3s24o0d4f3r3y3u
Input : Programming Puzzles & Code Golf
Output: Prog2am0in6 Puz0les7&1Cod74G4lf
Input : Replicants are like any other machine. They're either a benefit or a hazard.
Output: Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Antworten:
05AB1E ,
20 1918 Bytes-2 Danke an Emigna
Probieren Sie es online!
quelle
)¹vDyåiDykëy}?y¸ìT£
funktioniert auch.õIvDyåiDykëy}?yìT£
Retina ,
2423 BytesProbieren Sie es online!
Eine ziemlich einfache Regex-Substitution. Wir passen jedes Zeichen an und versuchen, eine Kopie von 0-9 Zeichen davor zu finden. Wenn wir es finden, ersetzen wir das Zeichen durch die Anzahl der Zeichen, die wir abgleichen mussten, um zur Kopie zu gelangen.
Die Ergebnisse stimmen nicht ganz mit den Testfällen überein, da diese die größtmögliche Stelle anstelle der kleinstmöglichen Stelle verwenden.
quelle
JavaScript (ES6),
745754 Byte3 Bytes gespart dank ETHproductions mit dem Brillanten
p=/./g
stattp={}
(inspiriert von Neil)Testfälle
Code-Snippet anzeigen
quelle
s
stattdessen verwendenp
?find
Version mit zu übertreibenlastIndexOf
, was etwas überraschend ist, da sie 11 Buchstaben lang ist ....)s=>s.replace(p=/./g,(c,i)=>(i=p[c]-(p[c]=i))>-10?~i:c)
3 Bytes einsparen.Haskell ,
7266 BytesDanke an Laikoni für das Golfen mit 6 Bytes!
Probieren Sie es online!
Die Funktion
%
hält die teilweise verarbeitete Zeichenfolge in ihrem zweiten Argument umgekehrt, sodass sie die ersten 10 Elemente dieser Zeichenfolge nach Vorkommen des zu untersuchenden Zeichens durchsuchen kann. Die Übermittlung besteht aus der unbenannten Funktion,(%"")
die die vorherige Funktion mit der leeren Zeichenfolge als zweitem Argument aufruft.quelle
f(a:s)=f s++(last$[a]:[show n|(n,b)<-zip[0..9]s,b==a])
spart zwei Bytes.f(a:s)=f s++[last$a:[n|(n,b)<-zip['0'..'9']s,b==a]]
spart noch mehr.reverse
sparen Sie ein weiteres Byte: Probieren Sie es online aus!Python 2 , 64 Bytes
Probieren Sie es online!
quelle
~10
Cant You Just Use-11
?Perl 5 , 36 Bytes
35 Byte Code +
-p
Flag.Probieren Sie es online!
Einige Erklärungen:
Das Ziel ist es, ein nicht-stelliges Zeichen (
\D
aber es entspricht der Rückreferenz\1
in meinem Regex) zu ersetzen , dem weniger als 10 Zeichen (.{0,9}
) und dasselbe Zeichen ((\D)
...\1
) die Länge der.{0,9}
Gruppe vorausgehen (length$2
). Undredo
während Charaktere ersetzt werden.quelle
.*
ist das nicht erforderlich, ein gültiges Zeichen im Bereich vor der ersetzten Ziffer ist in Ordnung.Python 2,
8984 BytesProbieren Sie es online!
Durchläuft die Zeichenfolge in umgekehrter Reihenfolge und erstellt eine neue Zeichenfolge mit den richtigen eingefügten Zahlen.
quelle
Japt , 18 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript,
10080 BytesProbieren Sie es online!
quelle
05AB1E , 20 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 3,
125 -118 BytesProbieren Sie es online!
quelle
C (tcc) 113 Bytes
Da die Funktion eine Kopie einer Eingabezeichenfolge erstellt, beträgt die maximale Größe der Eingabe 98 Zeichen (mehr als ausreichend für die längste Testeingabe). Dies kann natürlich auf jeden anderen Wert geändert werden.
Probieren Sie es online!
Bearbeiten
-15 Bytes. Vielen Dank Johan du Toit .
quelle
i,j;f(char*s){char n[99];strcpy(n,s);for(i=1;s[i];i++)for(j=i-1;j>-1&&i-j<11;j--)if(n[i]==n[j])s[i]=47+i-j,j=-1;}
Java 7,
102101 BytesProbieren Sie es online!
-1 Byte dank Kevin Cruijssen . Ich genieße immer eine Ausrede, um den Go-to-Operator zu verwenden.
quelle
--c>=0
? Sie können es durch ersetzenc-->0
, um ein Byte zu speichern.MATL,
3130 BytesProbieren Sie es bei MATL Online!
Erläuterung
quelle
this is a test
ergibtthis 222a1te52
stattthis 222a19e52
. Die Sekundet
wird nicht in konvertiert9
.PHP, 104 Bytes
vorwärts Lösung
Rückwärts Lösungen
Online-Versionen
PHP, 111 Bytes
PHP, 112 Bytes
Online Version
quelle
REXX,
124125 Bytesquelle
s<9
anstelle vons<10
oder stehts<=9
. Die Eingabethis is a test
ergibtthis 222a1te52
stattthis 222a19e52
. Die Sekundet
wird nicht in konvertiert9
. Versuchen Sie es onlineC (GCC) ,
117103 BytesProbieren Sie es online!
103 Bytes ohne string.h-Import, funktioniert mit Warnung. Wenn dies gegen die Regeln verstößt, werde ich es ziehen
Hübscher Code:
Bearbeitungen:
quelle
(i=strlen(s);s[--i];)
stattdessen vor(i=strlen(s)-1;s[i];i--)