Einige Ihrer Mitarbeiter haben kaputte Schlüssel und Sie sind zu billig, um sie zu ersetzen. Helfen Sie ihnen, indem Sie das kürzestmögliche Programm erstellen, um ihre Arbeit zu korrigieren! Konvertieren Sie einfach jedes Zeichen in einer bestimmten Zeichenfolge von Groß- in Kleinbuchstaben und umgekehrt ... aber es gibt eine Wendung!
Du freust dich auch sehr auf Weihnachten! Sie werden also in einem winzigen "Fehler" zurückbleiben, der Buchstaben nicht korrigiert, die in der Reihenfolge Christmas
(ohne Berücksichtigung der Groß- / Kleinschreibung) liegen.
Eingang
Für die Eingabe verwenden Sie eine einzelne Zeichenfolge (oder ein Byte-Array), die Zeilenumbrüche und ASCII-Werte zwischen 0x20 und 0x7e ( -
~
) enthalten kann. Sie müssen sich keine Gedanken über Wagenrückläufe oder andere Zeichen in der Zeichenfolge machen.
Ausgabe
Die Ausgabe sollte nur die bereitgestellte Zeichenfolge mit vertauschten Groß- und Kleinbuchstaben enthalten (und natürlich den Weihnachtsfehler!). Es kann bis zu einem zusätzlichen nachgestellten Leerzeichen enthalten.
Weihnachtswanze
Lassen Sie uns dies an einem Beispiel erklären:
Input: i CAN HARDLY WORK LIKE THIS please GET ME A NEW KEYBOARD FOR cHRISTMAS
Output: I Can HaRdly work lIke thiS PLEASE geT Me A new keyboard for ChriStmas
can
enthält "c", das der erste Buchstabe von Weihnachten ist, also wird das nicht geändert. Der nächste Buchstabe in Christmas
ist "h", der in ist hardly
(der auch das "r" enthält), so dass sich nichts ändert, usw. Christmas
selbst hat nur einen Buchstaben unverändert, weil er tatsächlich sucht, bis der Code dort ankommt "s", nicht "c".
Sobald die Sequenz gefunden ist, sollte sie bei "c" von vorne beginnen und erneut durchlaufen Christmas
werden. So ChristmasChristmas
würden unverändert gelassen.
Testfälle
Input: Hello World!
Output: hELLO wORLD!
Input: I like pie :)
Output: i LIKE PIE :)
Input: hELP my KeYboarD
iS BROKEN
Output: Help MY kEyBOARd
Is broken
Input: cHRISTMAS IS COMING REALLY SOON!
Output: cHRISTMAS is Coming really soon!
Input: C is the first letter in cHRISTMAS
Output: C IS ThE FIrST LETTER iN ChriSTMAS
Gewinner
Das ist Code-Golf, also gewinnt die kürzeste Antwort!
Christmas
sequenziell, so dass "h" ignoriert wird, bis es "c" findet, dann sucht es nach "h", dann "r" usw.Antworten:
05AB1E , 16 Bytes
Vielen Dank an Emigna für das Speichern eines Bytes und das Beheben eines Fehlers!
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
u
, sollte es funktionieren.V ,
38, 36 BytesProbieren Sie es online! (enthält Eingabe und erwartete Ausgabe zum Vergleich)
Als ich das zum ersten Mal sah, dachte ich, dass es extrem einfach sein würde. Wenn es nicht für den „christmas“ Bug ist, wäre dies in der Tat sein , nur 2 Bytes:
V~
. Der Weihnachtsfehler macht es für eine sehr abgedroschene Antwort bedeutend schwerer.Wie immer ist hier ein Hexdump:
quelle
PHP,
113110102 BytesNimmt Eingaben vom ersten Befehlszeilenargument entgegen. Laufen Sie mit
-r
.Nervenzusammenbruch
quelle
MATL ,
3630 BytesZeichenfolgen mit Zeilenumbrüchen müssen durch Verketten mit dem ASCII-Code definiert werden
10
(siehe Beispiel im Link zu den Testfällen).Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Pyke,
3125 BytesProbieren Sie es hier aus!
quelle
\n
und die Eingabe in"
dann ja umgebenPerl 6 , 84 Bytes
quelle
C # 197 Bytes
Ich werde damit nicht gewinnen, aber hoffentlich die kleinste C # -Implementierung, die funktioniert ...
Erläuterung:
quelle
JavaScript,
12211811410710493 Bytesquelle
k!=c?k:c.toUpperCase()
ein paar Bytes sparen?Perl 6 , 80 Bytes
Versuch es
quelle
my $i=0;
legal ist. Und ich wäre nicht überrascht, wenn es mehr mit Leerzeichen zusammenhängende Syntaxfehler gäbe.$/ eq $/.lc
eher geschrieben, als$/.lc eq $/
dass ich das Leerzeichen vorher entfernen könnteeq
.Java 7, 200 Bytes
Hässlich, aber es funktioniert .. Kann definitiv ohne Zweifel mehr golfen werden .. Ich bin rostig ..
Ungolfed:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Python 100 Bytes
quelle
Ruby, 63 + 1 = 64 Bytes
Verwendet die
-p
Flagge.quelle
C # 239 Zeichen
explizitere Version:
Dies ist eine ziemlich naive Lösung und kann wahrscheinlich verbessert werden (vielleicht können wir die implizite Konvertierung in char zulassen?).
Es setzt voraus, dass es sich in einer Funktion befindet, liest von der Konsole (stdin) und schreibt darauf (stdout).
edit: Char.IsUpper (s [j]) ist 2 Bytes länger als s [j]> 64 && s [j] <91, Char.ToUpper ist auch länger als meine Version.
quelle
Haskell,
222207 Bytesaktualisiert:
Wie es funktioniert:
quelle