Eingang
Eine nicht leere codierte Zeichenfolge, die aus druckbaren ASCII-Zeichen (im Bereich von 32 bis 126) besteht und durch die einige fehlende Buchstaben ersetzt wurden _
.
Ausgabe
Eine dekodierte Zeichenfolge gleicher Länge mit allen Kleinbuchstaben, einschließlich der fehlenden.
Wie?
Edit: Wie von @Deusovi in den Kommentaren erwähnt, ist dies eine Variante von Bacons Chiffre .
- Sammeln Sie alle Buchstaben in der ursprünglichen Zeichenfolge und gruppieren Sie sie nach 5. Zusätzliche Buchstaben, die nicht in eine vollständige Gruppe von 5 passen, werden ignoriert.
- Konvertieren Sie jede Gruppe in Binär: Kleinbuchstaben = 0 , Großbuchstaben = 1 . Dies führt zu einer Liste von ganzen Zahlen.
- Verwenden Sie jeden Wert N in dieser Liste, um jeden
_
in der ursprünglichen Zeichenfolge durch den N- ten Buchstaben des Alphabets (0-indiziert) in der angegebenen Reihenfolge zu ersetzen .
Beispiel: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
Indem Sie die fehlenden Buchstaben ersetzen und alles wieder in Kleinbuchstaben umwandeln, wird die ursprüngliche Zeichenfolge enthüllt:
programming puzzles & code golf
Dies ist die erwartete Ausgabe.
Erläuterungen und Regeln
- Die fehlenden Buchstaben werden garantiert am Ende der Zeichenfolge angezeigt. Formaler: Nach dem ersten Buchstaben
_
in der Eingabezeichenfolge wird es nie einen Buchstaben geben . Es können jedoch auch andere druckbare ASCII-Zeichen wie Leerzeichen und Interpunktionszeichen vorhanden sein. - Die Eingabe enthält garantiert keinen unnötigen Großbuchstaben: Alle Großbuchstaben sind Bits, die auf 1 gesetzt sind und zum Entschlüsseln der fehlenden Buchstaben erforderlich sind. Alles andere ist in Kleinbuchstaben.
- Die Eingabezeichenfolge ist garantiert gültig. Insbesondere:
- Es enthält immer genug vollständige Gruppen mit 5 Buchstaben, um die Unterstriche zu dekodieren.
- Die binär codierten Ganzzahlen liegen garantiert im Bereich [0-25] .
- Möglicherweise enthält
_
die Eingabezeichenfolge überhaupt keine. In diesem Fall müssen Sie nur die Eingabe zurückgeben. - Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
Testfälle
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Einige zusätzliche Testfälle:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
die Eingabezeichenfolge keine enthält, ein Sonderfall.The input is guaranteed not to contain any useless capital letter
, falls es keinen Unterstrich gibt, wird auch kein Großbuchstabe verwendet.[32-126]
. Ich habe einen weiteren Testfall hinzugefügt.Antworten:
05AB1E , 18 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung:
quelle
Python 2 , 113 Bytes
Probieren Sie es online!
quelle
Perl 5
-pF -MList::Util=sum
, 75 BytesProbieren Sie es online!
Erläuterung:
-pF
Liest eine Eingabezeile in die Variable$_
und, aufgeteilt in Zeichen, in das Array@F
.@a=grep!/\W|\d/,@F
Setzt das Array@a
auf die Mitglieder@F
, die den regulären Ausdruck nicht erfüllen\W|\d
.\W
ist alles andere als Buchstaben, Zahlen und_
;\d
ist Zahlen. Also\W|\d
ist alles andere als Buchstaben und_
und@a
hat alle Buchstaben und_
Zeichen. Wir werden niemals die_
Charaktere untersuchen@a
. (Beachten Sie, dass dies nur funktioniert, weil die Eingabe garantiert ASCII ist.)map{a gt shift@a&&16/2**$_}0..4
Führt für 0 bis 4 Folgendes aus: Es verschiebt das nächste Element von@a
, verkürzt es und bewertet, oba
es asciibetisch größer als dieses Element ist (dh ob dieses Element in Großbuchstaben geschrieben ist). Wenn ja,&&
wird nicht kurzgeschlossen, also erhalten wir 16 geteilt durch 2 zur Potenz des Eingangswerts (0 bis 4). Andernfalls&&
wird kurzgeschlossen und wir erhalten 0.map
Gibt die Liste der fünf Zahlen zurücksum
, zu denen sie hinzugefügt werden.a..z
, und das ist es, woraus wir kommen(a..z)[…]
.s!_!…!eg
wandelt jedes_
in$_
der wiederum mit den entsprechenden Buchstaben,.$_=lc
konvertiert$_
in die Kleinbuchstaben-Version von sich selbst und-p
druckt es aus.quelle
J ,
6261 BytesProbieren Sie es online!
quelle
Gelee ,
28 2726 Bytes-1 danke an Erik the Outgolfer & dylnan
Keine sehr gelee-freundliche Herausforderung!
Ein monadischer Link, der Listen von Zeichen akzeptiert und zurückgibt.
Probieren Sie es online!
Wie?
quelle
Netzhaut ,
91 bis90 BytesProbieren Sie es online! Erläuterung:
Übersetzen Sie Kleinbuchstaben in
a
und Großbuchstaben inA
und löschen Sie alles andere.Teilen Sie das
Aa
s in 5er-Gruppen auf.Konvertieren Sie von binär nach unär, wobei Sie
A
als 1 unda
als 0 behandeln. Da esAa
ursprünglich 5 s gab, bleiben 5a
s übrig, plus eine Anzahl vonA
s, abhängig von der gewünschten Position im Alphabet.Erhöhen Sie den letzten Wert
a
entsprechend der Anzahl der folgendenA
s.Stellen Sie die ursprüngliche Eingabe voran.
Ersetzen Sie alle
_
s durch den nächsten dekodierten Buchstaben.Entfernen Sie alle entschlüsselten Ersatzbuchstaben.
Alles in Kleinbuchstaben.
Retina 0.8.2 , 117 Bytes
Probieren Sie es online! Erläuterung:
Duplizieren Sie die Eingabe.
Kleinschreibung der ersten Kopie.
Übersetzen Sie Kleinbuchstaben
a
in die zweite Kopie.Übersetzen Sie Großbuchstaben in
A
. Diese müssen sich in der zweiten Kopie befinden, da die erste Kopie bereits in Kleinbuchstaben geschrieben wurde.Löschen Sie alles andere in der zweiten Kopie.
Teilen Sie die zweite Kopie (jetzt nur
Aa
s) in 5er-Gruppen auf.Dekodieren Sie die Buchstaben und fügen Sie sie wie zuvor ein.
quelle
APL (Dyalog Unicode) , 46 Byte SBCS
Anonymes Lambda, geht davon aus
⎕IO
(Indexursprung) zu sein0
.Probieren Sie es online!
{
...⋄
...}
Zwei-Anweisung Funktion;⍵
ist das Argument,⋄
trennt Aussagen⊢
Argument (No-Op-Funktion),'_'=
dem ein Unterstrich (dh eine Boolesche Zuordnungsfunktion)_←
entspricht_
A[
… Setzen Sie]@_⍵
die folgenden ZeichenA
an den Stellen mit Unterstrichen in das Argument, wobei⎕A
der Großbuchstabe A dem GroßbuchstabenA←
dasA
819⌶
Kleinbuchstaben ( 819 ≈ BIg , ohne linkes Argument bedeutet nicht groß, dh Kleinbuchstaben)A,
voranstellen soll. Dies gibt uns alle Buchstaben⍵∩
Schnittmenge des Arguments und das; nur die Buchstaben des Arguments,A∊⍨
die Mitglieder des Großbuchstaben sind; Groß Bits(
...)5⍴
r eshape , dass auf die folgenden Anzahl von Zeilen und fünf Spalten:_⍵
die Maske von Unterstrichen in der Argument+/
Summe , die; Anzahl der Unterstriche⍉
transponieren (um jede Zeile als Zahl und nicht als Bitposition zu behandeln) alles2⊥
als Base-2-819⌶
Kleinbuchstaben auswertenquelle
Scala , 189 Bytes
Probieren Sie es online!
Erläuterung:
quelle
JavaScript (Node.js) ,
125 -124 ByteProbieren Sie es online!
quelle
Gelee , 26 Bytes
Probieren Sie es online!
Anderer Ansatz als bei Jonathan Allan. EDIT: Also, ich dachte anscheinend an die gleiche Byteverkleinerung wie Jonathan Allan, also tut es nicht weh, seinen Namen noch einmal zu erwähnen.
quelle
CJam , 43 Bytes
Probieren Sie es online!
quelle
Sauber ,
180... 150 BytesProbieren Sie es online!
Definiert die Funktion
$ :: [Char] -> [Char]
mit@ :: [Char] [Char] -> [Char]
als Helfer zum Ersetzen von Unterstrichen und? :: [Char] -> [Char]
als Helfer zum Generieren der Ersetzungszeichen.quelle
i<-:""
Teil? Werden Zeichen implizit in Zahlen umgewandelt, wenn sie summiert oder hinzugefügt werden?JavaScript (Node.js) , 100 Byte
Probieren Sie es online!
Spart dank @Arnauld 2 Bytes.
quelle
/[a-z]/gi
jetzt.R ,
153135113 BytesProbieren Sie es online!
Gibt einige Warnungen bei der Verwendung von aus
matrix
, die das Ergebnis jedoch nicht beeinflussen sollten. Gibt auch Warnungen aus, da durch die[<-
Zuweisung nicht zugewiesene Objekte standardmäßig entfernt werden.40 (!) Bytes weniger dank JayCes Verbesserungen
quelle
,length(L)%/%5
[<-
Elemente über die Länge der Indizes hinaus geworfen werden ...intToUtf8
C (GCC) ,
111109101100 BytesBearbeiten: Kleinbuchstaben gemäß dem Kommentar von @ FrownyFrog hinzugefügt; Danke an Lynn, Christoph und user5329483 für ihre Vorschläge!
Probieren Sie es online!
quelle
i+=i+(*s<97)
.j
indem Sie ein Markierungsbit einfügeni
und das zweite für as neu schreibenfor(i=1;i<32;s++)
. Und kompensieren die zusätzlichen 32 in der äußeren. Als Neuling zähle ich hier ein Sieben-Byte-Reserve.for(i=3;i<96;s++)
Bringt die 65 auf eine einstellige Zahl, auch bekannt als1
.Los,
219217192210209156 Bytes25 Bytes gespart dank @Lynn! 53 Bytes dank @ovs eingespart!
Musste 18 Bytes wegen eines Fehlers mit Strings ohne Unterstriche verlieren :(
Probieren Sie es online!
quelle
Stax , 22 Bytes
Führen Sie es aus und debuggen Sie es
Der allgemeine Ansatz ist das Ersetzen eines regulären Ausdrucks
"_"
durch eine Rückruffunktion, die die Buchstaben der Eingaben aufteilt, um jedes Ersetzungszeichen zu berechnen.Führen Sie dieses aus
quelle
Rot , 247 Bytes
Probieren Sie es online!
Besser lesbar:
quelle
Java 10, 186 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Ruby ,
107106103 BytesProbieren Sie es online!
quelle
Japt, 25 Bytes
Versuch es
Erläuterung
quelle
Pyth, 36 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
Python 3.5 , 296 Bytes
Probieren Sie es online aus
Erster Code Golf :)
(Ich weiß, es ist nicht klein in Bytes, ich hatte nur Spaß, einen 1-Zeilen-Code zu machen)
Hier ist die Erklärung:
Benutzereingabe
Findet den Index des ersten _ in der Zeichenfolge und speichert ihn
Entfernt die Zeichenfolge aller Nicht-Alpha-Zeichen
Teilt die Alpha-Zeichenfolge in ein Array auf, wobei jedes Element aus 5 Zeichen besteht
Ex. ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']
Konvertiert dann Kleinbuchstaben in 0 und Großbuchstaben in 1
Ex. ['11001', '11000', '00011', '01110', '00110', '00000']
und wandelt die Binärzeichenfolge in eine Ganzzahl um, addiert 65 und wandelt diese in ein Zeichen um
Ex. ['z', 'y', 'd', 'o', 'g', 'a']
findet alle Zeichen nach dem ersten _ und verschiebt sie in das Array z an ihren jeweiligen Positionen (oben definiert)
Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']
Teilen Sie unsere Zeichenfolge in eine Liste von Zeichen
Schneiden Sie unseren String vom ersten _ bis zum Ende der Liste und ersetzen Sie ihn durch das Array z. Ich musste auch das Array z vom ersten _ bis zum Ende auf die Länge der geteilten Zeichenfolge aufteilen, da ich im Beispiel für einen faulen Hund ein zusätzliches Zeichen erhalten habe (das "a" am Ende der obigen Beispiele).
* Antwort ausdrucken *
quelle
o.islower()
und entfernenelse
, und ich denke,'1'
undfor
. Sie können aber auch ändernif d!="_"
zuif"_"!=d
, aber der obige Kommentar bereits das tut.Haskell , 165 Bytes
Probieren Sie es online! Anwendungsbeispiel:
g"" "BInar_"
Erträge"binary"
.quelle
PowerShell , 121 Byte
Probieren Sie es online!
Weniger golfen:
quelle
Perl 5
-p
, 78 BytesProbieren Sie es online!
quelle