your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
Beschreibung
Die Eingabe besteht aus zwei Zeichenfolgen s1
und s2
ist gleich lang. Sie enthalten jeweils nur druckbares ASCII und haben eine Länge von mindestens einem Zeichen. Sie können diese als zwei Zeichenfolgen, ein Array von zwei Zeichenfolgen oder eine einzelne Zeichenfolge mit s1
und s2
getrennt durch ein Tabulatorzeichen oder eine neue Zeile eingeben.
Die Ausgabe ist wie folgt:
Für jedes Zeichen
c
ins1
:Wenn das Zeichen kein Buchstabe ist, geben Sie es unverändert aus.
Andernfalls, wenn
c
es sich um einen Buchstaben handelt:Suchen Sie das übereinstimmende Zeichen (das am selben Index) in
s2
.Wenn es sich um einen Großbuchstaben handelt, wird die Ausgabe
c
aktiviert.Wenn es sich um einen Kleinbuchstaben handelt, erfolgt die Ausgabe
c
in Kleinbuchstaben.Ansonsten Ausgabe
c
unverändert.
Dann mache dasselbe, außer mit
s1
unds2
geschaltet.
Im Wesentlichen sollten alle Buchstaben, s1
für die das übereinstimmende Zeichen in s2
Großbuchstaben steht, groß geschrieben werden, und alle Buchstaben s1
mit einem Kleinbuchstaben am selben Index in s2
sollten in Kleinbuchstaben umgewandelt werden (und umgekehrt).
Testfälle
Eingang:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Ausgabe:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Eingang:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Ausgabe:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Eingang:
AAAbbb111
Cc2Dd3Ee4
Ausgabe:
AaABbb111
CC2dd3Ee4
Antworten:
Pyth,
1918 BytesDies definiert eine Funktion y , die eine Liste von Zeichenfolgen akzeptiert und zurückgibt.
Überprüfen Sie alle Testfälle gleichzeitig im Pyth Compiler / Executor .
Vielen Dank an @Jakube für das Golfen ab 1 Byte.
Wie es funktioniert
quelle
CJam, 25 Bytes
Dies ist eine anonyme Funktion, die ein Array von Zeichenfolgen aus dem Stapel entfernt und eine zurückgibt.
In unterstützten Browsern können Sie alle Testfälle gleichzeitig im CJam-Interpreter überprüfen .
Testfälle
Code
Eingang
Ausgabe
Wie es funktioniert
quelle
C 126 Bytes
Dies ist mein erster Versuch, überhaupt Codegolf zu spielen. Lassen Sie mich wissen, wenn ich etwas falsch gemacht habe.
Ich verwende bitweise Operationen, um die Umschaltung durchzuführen
Golf gespielt:
Ungolfed:
Bearbeiten: && durch * ersetzt
quelle
SQL (PostGreSQL), 427 Bytes
Trotz der enormen Größe war dies etwas kleiner als ich erwartet hatte. Um ehrlich zu sein, war ich mir nicht ganz sicher, ob ich es schaffen würde. Ich vermute, es gibt noch viel zu tun :)
Formatiert und kommentiert
Testlauf
quelle
Julia, 140 Bytes
Dadurch wird eine Funktion erstellt, die zwei Zeichenfolgen akzeptiert und ein Tupel von Zeichenfolgen zurückgibt. Hier ist nichts besonders Schlaues los; Wir definieren einfach eine innere Funktion, die den Algorithmus direkt in der Spezifikation implementiert, und rufen ihn zweimal auf.
Ungolfed:
quelle
JavaScript ES6,
128108 BytesJavaScript's
toUpperCase()
undtoLowerCase()
nehmen eine Menge Bytes ein, sind aberString.fromCharCode()
noch längerquelle
s2
kein Buchstabe und das entsprechende Zeichen ins1
Großbuchstaben ist. In diesem Fallc
ins1
muss unverändert zurückgegeben werden.Mathematica,
173169155 BytesDies ist eine Funktion, die ein Array von zwei Zeichenfolgen
{"Foo","bAR"}
aufnimmt , z. B. und ein Array von zwei Zeichenfolgen ausgibt. Dekomprimieren Sie es räumlich, schreiben Sie das Schemaf@x
wief[x]
gewünscht neu, erweitern Sie die Notationsabkürzungen (f=0>1
akaFalse
,t=!f
akaTrue
,c=Characters
undu=ToUpperCaseQ
) und ersetzen Sie UpperCaseQ [#] nicht durch#==u@#
(dieses Zeichen entspricht der Großbuchstaben-Version).Schnittstelle: Durch das Trailing
&
wird dies zu einer Funktion. Sein Argument wird in beiden Instanzen von als "#" eingefügt/@ #
. Zum Beispielf=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
erzeugt die Ausgabe{AaABbb111,CC2dd3Ee4}
.Verarbeitung: erzählt in üblichen außerhalb in auftrag:
MapThread[...]
ist eine Liste von zwei Listen von Zeichen. StringJoin wird auf jede dieser beiden Zeichenlisten angewendet, um eine Liste mit zwei Zeichenfolgen zu erstellen, die Ausgabe.MapThread[#[#2]&, ... , 2]
Wirkt auf ein Array von zwei 2-mal-n-Elementlisten. Die erste Liste ist ein 2-mal-n-Array von Funktionen. Die zweite Liste ist ein 2-mal-n-Array von ZeichenCharacters /@ #
, die Liste der Zeichen in den beiden Eingabezeichenfolgen. Es arbeitet in der Tiefe 2, dh an den Funktionen und einzelnen Zeichen.Reverse[...]
Vertauscht die beiden Unterlisten von Funktionen, sodass MapThread die Funktionen der zweiten Zeichenfolge auf die erste Zeichenfolge anwendet und umgekehrt.{ ... } &
ist eine anonyme Funktion, die auf jede der beiden Eingabezeichenfolgen angewendet wird.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
Teilt eine Zeichenfolge in eine Liste von Zeichen und ersetzt jedes Zeichen durch zwei Elementlisten. In diesen beiden Elementlisten gibt das erste Element an,True
ob das Zeichen ein Buchstabe ist, undFalse
ansonsten gibt das zweite Element an, ob es sich bei dem Zeichen um Großbuchstaben handelt.UpperCaseQ[]
kann nicht true zurückgeben, wenn es keinen Brief erhält./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
ersetzt diese beiden Elementlisten durch Funktionen. (Erweiterung der Abkürzungent
undf
erfolgt, bevor ein Abgleich versucht wird.) Wenn eine Liste mit zwei ElementenFalse
als erstes Element vorhanden ist, wird sie durch die Funktion(# &)
, die Identitätsfunktion, ersetzt. (Die Klammern sind erforderlich, ansonsten ist der Pfeil enger als das kaufmännische Und.) Andernfalls beginnt die Liste mit zwei ElementenTrue
, das Zeichen war ein Buchstabe, und wir geben die Funktionen aus , die der Groß-ToUpperCase
undToLowerCase
Kleinschreibung entsprechen. (Es ist nicht erforderlich, nach letzterem zu suchen. Dies würdeFalse
tatsächlich{_,_}->ToLowerCase
funktionieren und alles auffangen, was noch nicht ersetzt wurde. Dies wäre jedoch nicht kürzer und unklarer.)Die einzige Herausforderung bestand darin, einen prägnanten Weg zu finden, um ein zweidimensionales Array von Funktionen mit einem Array von Argumenten zu verbinden.
Edit: Danke an @Martin Büttner für das Abfangen von "hilfreichen" Backslashes zum Ausschneiden / Einfügen von Zeilenumbrüchen, die
1>0
und1<0
Abkürzungen, und auch für die Anleitung zum Zählen der Länge in Bytes, nicht in Zeichen (was auch immer das sind :-))Edit2: Vielen Dank an @Martin Büttner für den Hinweis, dass das Verschmutzen des globalen Namensraums akzeptabel ist. Erinnert mich an eine Zeichenfunktionsanwendung und schlägt vor, die beiden Großbuchstaben durch eine Abkürzung für eine zu ersetzen und die eine zu verwenden, um die andere zu emulieren (Speichern) vier Zeichen). (Ich denke, er hat das schon mal gemacht. :-))
quelle
f@g
anstelle vonf[g]
(im gesamten Code). Ich bin mir auch ziemlich sicher, dass du keinen Block brauchst. Tu es einfach(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. Dies verschmutzt den globalen Namensraum, aber beim Golfen ist das völlig in Ordnung. Auch habe ich nicht gezählt, aber Sie könnten in der Lage sein , Bytes zu speichern , indem die SpeicherungToUpperCase
in einer Variablen (u
etwa) und ErsetzenUpperCaseQ@#
mit#==u@#
.Python 3, 131 Bytes
Die Funktion gibt Strings in einem Tupel zurück
quelle
Erlang, 157 Bytes
Zippt die beiden Zeichenfolgen (eigentlich Listen) in eine Zwei-Zeichen-Tupelliste und ordnet jedes Zeichen mithilfe eines Listenverständnisses dem entsprechenden Fall zu.
quelle
Python 2, 101 Bytes
Eine anonyme Funktion, die zwei Zeichenfolgen verwendet und die Ausgabezeichenfolgen in einer Liste zurückgibt. Ich habe dies als Python 2 markiert, weil Python 3 es nicht zulässt
I,I[::-1]
, am Ende so alleine zu sitzen.quelle
Python, 126 Bytes
Die Funktion
f
gibt Strings in einem Tupel zurückquelle
C, 181 Bytes
Es gab Probleme, die Namen der Standardbibliotheken auf eine sinnvolle Weise zu kürzen (für die Definition sind 11 zusätzliche Zeichen erforderlich). Verwendet die Hauptrekursion und die globalen Variablen x und y als Argumente.
main (<nicht null>, argv) = Haupt (0, {argv [1], argv [2]} aufrufen, dann neue Zeile ausgeben, dann Haupt (0, {argv [2], argv [1]} aufrufen)
main (0, {x, y}) = Wenn x das Ende der Zeichenfolge ist, wird 0 zurückgegeben. Anderenfalls wird die korrekte Schreibweise des ersten Zeichens von x ausgegeben und main (0, {x + 1, y + 1}) aufgerufen.
Führen Sie die beiden Zeichenfolgen als Argumente aus.
quelle
C -
164153 Bytes - GCCgcc prog.c
./a.out AfdgF a2dfsd
Wird aktualisiert, wenn ich wc -c down bekommen kann. Funktioniert eigentlich sehr gut
quelle
F #, 211 Zeichen
könnte besser sein ...
quelle
Matlab, 140
Ungolfed:
Beispiel:
quelle
C 164 Bytes
So ziemlich das Implementieren des Algorithmus wie im Problem beschrieben. Nimmt 2 Strings als Eingabeparameter.
Ungolfed:
quelle
Rubin, 102
Nimmt die ursprünglichen Zeichenfolgen und paart Buchstaben in Arrays. Wenn sie entweder niedriger / kappe oder kappe / niedriger sind, tauschen Sie beide aus. Dann transponieren Sie die Arrays zurück in unser bestelltes Array.
Dies erfordert einen abschließenden Zeilenumbruch in der Eingabe.
quelle
Perl 5.10+,
10199 Bytes96 Bytes + 3 Bytes für die Befehlszeilenflags
p00
. Nimmt eine einzelne durch Zeilenumbrüche getrennte Zeichenfolge als Eingabe:Oder Sie können eine Eingabe in STDIN eingeben:
Heruntergebrochen:
quelle
Erster Versuch in der Waage, 138 Zeichen
f ist eine Funktion, die die beiden Eingabezeichenfolgen verwendet und die Aufgabe mit einer lokalen Funktion ausführt, die zweimal verwendet wird, um die Groß- und Kleinschreibung von Zeichenfolgen zu ändern.
Derselbe Code mit Einrückung und nur ein bisschen besser lesbaren Namen:
quelle
Jelly , 13 Bytes
Ein monadischer Link, der Listen mit zwei "Strings" (Zeichenlisten in Jelly) akzeptiert und zurückgibt.
Probieren Sie es online!
quelle
Python 2 , 97 Bytes
Probieren Sie es online!
quelle
Tcl , 194 Bytes
Probieren Sie es online!
quelle
Haskell ,
10991 BytesDanke an @Laikoni für 16 Bytes!
Probieren Sie es online!
quelle