Im Chat tippen wir oft schnell und sehen uns die Reihenfolge der Buchstaben nicht genau an , bevor wir eine Nachricht posten . Da wir faul sind, brauchen wir ein Programm, das die letzten beiden Buchstaben in unseren Wörtern automatisch vertauscht, aber da wir nicht zu spät antworten möchten, muss der Code kurz sein.
Wenn Sie es akzeptieren möchten, müssen Sie ein Programm schreiben, das die letzten beiden Buchstaben jedes Wortes in einer bestimmten Zeichenfolge umblättert (so wird das Wort Thansk
zu Thanks
). Ein Wort ist eine Folge von zwei oder mehr Buchstaben im englischen Alphabet, die durch ein einzelnes Leerzeichen getrennt sind.
Die Zeichenfolge / Liste der Zeichen, die Sie als Eingabe erhalten, enthält garantiert nur alphabetische Zeichen und Leerzeichen (ASCII [97 - 122], [65 - 90] und 32).
Sie können Eingaben und Ausgaben mit jeder Standardmethode und in jeder Programmiersprache vornehmen. Beachten Sie dabei, dass diese Lücken standardmäßig verboten sind.
Die Ausgabe kann ein nachgestelltes Leerzeichen und / oder eine nachgestellte Newline enthalten.
Die Eingabe enthält immer nur Wörter (und das entsprechende Leerzeichen) und besteht aus mindestens einem Wort.
Das ist Code-Golf, also gewinnt die kürzeste Einsendung (in Bytes) in jeder Sprache!
Testfälle
Beachten Sie, dass die Zeichenfolgen aus Gründen der Lesbarkeit in Anführungszeichen gesetzt sind.
Eingabe -> Ausgabe "Thansk" -> "Danke" "Youer welcoem" -> "Du bist willkommen" "Das ist ein Apfel" -> "Thsi si na appel" "Flippign Lettesr Aroudn" -> "Briefe umdrehen" "DER ANDERE CHALLENEG MIT AUSTAUSCH VON BRIEFEN" -> "DER ANDERE CHALLENGE MIT AUSTAUSCH VON BRIEFEN"
Zur Vereinfachung der Testsuite sind hier die Eingänge und die entsprechenden Ausgänge separat aufgeführt:
Thansk Herzlich willkommen Das ist ein Apfel Flippign Lettesr Aroudn Der alte chaleNeg mit austauschbaren Briefen
Vielen Dank Bitte Dies ist ein Appell Briefe umdrehen teH odD chALleNge mit getauschten Briefen
Vielen Dank an DJMcMayhem für den Titel. Dies war ursprünglich ein CMC .
Antworten:
V ,
4,5BytesProbieren Sie es online!
||
bezeichnet den CursorDer Puffer beginnt mit
|w|ord and more words
und der Cursor steht auf dem ersten Zeichen.Rekursiv
ò
Gehe auf den
e
Punktwor|d| and more words
Entfernen Sie
X
das Zeichen links vom Cursorwo|d| and more words
p
aste es über das nächste Zeichenwod|r| and more words
Implizites Ende
ò
, wiederholen Sie den gleichen Vorgang für andere Wörter, bis das Ende des Puffers erreicht istquelle
ò
Befehl github.com/DJMcMayhem/V/wiki/Normal-Mode-CommandsGelee , 7 Bytes
Eine monadische Verknüpfung, die Listen von Zeichen aufnimmt und zurückgibt
Probieren Sie es online!
Wie?
quelle
Ḳ2œ?ЀK
funktioniert auch und benutzt einen einzigen Quick.Brain-Flak , 122 Bytes
Probieren Sie es online!
Die schlechteste Sprache für den Job :)
LesbarEtwas besser lesbare Version:quelle
Haskell , 40 Bytes
Probieren Sie es online! Anwendungsbeispiel:
(f=<<).words $ "abc xyz"
Erträge"acb xzy "
.quelle
Retina , 13 Bytes
Probieren Sie es online! Link enthält Testfälle.
quelle
Python 3 , 50 Bytes
Probieren Sie es online!
Diese Antwort missbraucht das Druckverhalten von Python 3: Mehrere Argumente werden mit einem Leerzeichen dazwischen gedruckt. Natürlich können wir nicht einfach mehrere Argumente angeben, da wir nicht wissen, wie viele Wörter in der Eingabe enthalten sein werden. Also benutzen wir den splat Operator . Grundsätzlich gilt
ist genau das gleiche wie
Missbrauch macht ein volles Programm kürzer als eine Funktion / Lambda, die wir verwenden müssten,
' '.join
oder ähnliches.quelle
for w in input().split():print w[:-2]+w[:-3:-1],
. In Python 3 würde das Extrahieren der letzten beiden Zeichen gut funktionieren, mit derprint(*(''.join(a)+c+b for*a,b,c in input().split()))
Ausnahme, dassa
dies in einen String umgewandelt werden muss.Matlab (R2016b),
5150 BytesGespeichert
4950 (!) Bytes dank @Giuseppe.Und meine bisherige Antwort:
Matlab (R2016b), 100 Byte
(Nur zum Spaß: P)
Erläuterung:
quelle
regexprep
hier arbeiten? So etwas wieregexprep(a,'(\w*)(\w)(\w)','\1\3\2')
?$1
und nicht\1
, so wäre esregexprep(a,'(\w*)(\w)(\w)','$1$3$2')
.function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')
ist noch ein Byte kürzer!C
625854 BytesVielen Dank an @Dennis für das Speichern von
vieracht Bytes!Probieren Sie es online!
quelle
Prolog (SWI) , 60 Bytes
Probieren Sie es online!
Erläuterung
Zuerst definieren wir den Basisfall:
Dies bedeutet, dass die letzten beiden Buchstaben immer vertauscht werden.
Dann definieren wir, was passiert, wenn wir uns direkt neben einem Leerzeichen befinden:
Zwei Zeichenfolgen stimmen überein, wenn unmittelbar vor einem Leerzeichen die Buchstaben vor dem Leerzeichen vertauscht sind, und der Rest, wenn die Zeichenfolgen übereinstimmen. Wir verwenden dann
!
zu schneiden.Unser letzter Fall ist, wenn wir nicht neben einem Leerzeichen stehen, müssen die ersten beiden Buchstaben übereinstimmen.
quelle
Wolfram-Sprache , 117 Bytes
Probieren Sie es online!
Auf die Teststrings angewendet.
quelle
R ,
1115141 BytesMit freundlicher Genehmigung von @ Giuseppe, einem Regex-Ansatz, der meine alte Methode aus dem Wasser bläst.
quelle
APL (Dyalog Classic) , 28 Byte
⎕ML
und⎕IO
sind beide1
,Probieren Sie es online!
Erläuterung
... (,⊂⍨⊣=,) ...
Teilen (unter Beibehaltung der Rahmen und Anhängen eines Rahmens an den Anfang) ...... ⍞
... die Eingabe ...... ' ' ...
... in Räumen.... ( ... )¨ ...
Dann zu jedem Element davon:... , ...
Verketten ...... (¯2↓⊢) ...
... jeder Gegenstand außer den letzten beiden ...... 2↑⌽ ...
... mit der Umkehrung der letzten beiden Elemente.1↓∊ ...
Geben Sie zum Schluss alle Elemente außer dem ersten Element des reduzierten Ergebnisses zurück.quelle
Funky , 34 Bytes
Probieren Sie es online!
quelle
Haskell , 45 Bytes
-2 Bytes dank H.PWiz.
Probieren Sie es online!
quelle
J ,
20 - 19 -11 BytesDank an @Bolce Bussiere
Probieren Sie es online!
quelle
(1&A.&.>)&.;:
Alice , 24 Bytes
Probieren Sie es online!
Erläuterung
Dies bildet eine Schleife, in der der Schleifenkörper ein lineares Ordinal-Snippet ist und
' o
zwischen jeweils zwei Schleifeniterationen im Kardinal-Modus ausgeführt wird. Letzteres druckt nur ein Leerzeichen.Wenn Sie die Zick-Zack-Struktur des Ordinal-Codes aufklappen, sieht der Körper der linearen Schleife tatsächlich so aus:
Aufschlüsselung:
quelle
h~Z
) statt in vier Bytes ( ) erfolgen kanne10x
, aber ich sehe keine Möglichkeit, das Layout so anzupassen, dass insgesamt tatsächlich ein Byte gespeichert wird.Brainfuck ,
109100 BytesBearbeiten: Es müssen keine Wörter mit einem Buchstaben behandelt werden
Probieren Sie es online!
Druckt ein Leerzeichen nach
Wie es funktioniert
Vorherige Version, 109 Bytes
Probieren Sie es online!
quelle
QuadR , 8 Bytes
Probieren Sie es online!
quelle
PHP ,
119107 BytesEdit: danke an totalhuman
Probieren Sie es online!
quelle
$word
keinen einzelnen Variablennamen erstellen?fgets(STDIN)
auch weggelassen oder ersetzt werden kann$x
, da nicht alle Antworten die Eingabe zu ihren Antworten zählentrim()
sollte unnötig sein.Haskell , 41 Bytes
Probieren Sie es online!
Ausgaben mit einem Leerzeichen am Ende.
Das wiederholte
' ':r
sieht verschwenderisch aus. Ista%(b:t@(' ':r))=b:a:t
aber gleich lang unda%(b:t)|' ':_<-t=b:a:t
ist ein Byte länger.Haskell , 41 Bytes
Probieren Sie es online!
quelle
sed ,
2017 + 1 (-r) = 18 BytesProbieren Sie es online!
quelle
|$
. Es macht nichts. (Damit es das tut, was Sie erwarten(.)(.)(\b|$)
, ist es nicht erforderlich, da es\b
bereits zum Ende der Zeichenfolge passt.)PHP, 65 Bytes
benötigt PHP 7.1 (oder neuer)
Nimmt den Satz als separate Befehlszeilenargumente. Laufen Sie mit
-nr
.Arbeiten an einer einzelnen Zeichenfolge, 77 + 1 Byte :
Als Rohr mit laufen lassen
-nR
.... oder online ausprobieren .
quelle
Java 8, 35 Bytes
Port von @TaylorScotts Google Sheets antwortet , nachdem ich zwei Bytes golfen habe. EDIT: Ich sehe, es ist jetzt eine Portierung von Neils Retina-Antwort nach meinen zwei Golf-Bytes.
Erläuterung:
Probieren Sie es online aus.
quelle
Google Sheets, 33 Bytes
Anonyme Arbeitsblattfunktion, die Eingaben aus der Zelle
A1
und Ausgaben in die aufrufende Zelle übernimmt-2 Bytes Danke an @KevinCruijssen für die Verwendung von
(.)
über(\w)
quelle
(\w)
kann man spielen,(.)
wenn ich mich nicht irre. Das\b
ist schon ein Hinweis, nur nach Worten zu suchen. (Nicht ganz sicher, aber es funktioniert in Java.)JavaScript (Node.js) ,
383632 BytesProbieren Sie es online!
RegExp-Annäherung mit freundlicher Genehmigung von @ Giuseppe (obwohl ich unabhängig davon darüber nachgedacht habe), unter der Annahme von Wörtern, die nur durch ein Leerzeichen getrennt sind
-2 für die Berücksichtigung von nur 1 Leerzeichen und das Hinzufügen von Leerzeichen am Ende
-4 Danke @Shaggy
quelle
s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3")
.s=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
ab abc abcd abcde abcdef
Doesab_
,bc_
,cd_
,de_
,___
,ef_
,___
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")
gleiche LängeK (OK) ,
2322 BytesProbieren Sie es online!
Beispiel:
Erläuterung:
Portierung der FrownyFrog -Lösung, um 1 Byte zu sparen .
Ich werde darauf zurückkommen.
Vorherige Lösung:
" "/-2{(x_y),|x#y}'" "\
23 Bytesquelle
05AB1E , 7 Bytes
Probieren Sie es online!
-1 dank Magic Octopus Urn .
Druckt ein Leerzeichen nach.
quelle
`
.Gelee , 10 Bytes
Probieren Sie es online!
quelle
SNOBOL4 (CSNOBOL4) ,
136119 BytesProbieren Sie es online!
Druckt mit einem Leerzeichen nach.
Sie wissen, dass Sie etwas falsch gemacht haben, wenn eine Sprache ein Backronym für ist StriNg Oriented und symBOlic Language ist und Ihr Code länger als Brain-Flak ist :(Jetzt ist es etwas besser.Linie
B
nimmtI
und ersetzt(alphabetic characters saved as Y)(some number of spaces)
durch die leere Zeichenfolge.Die folgende Zeile extrahiert die letzten 2 Zeichen von
Y
asZ
und ersetzt sie alsZ
umgekehrt, dann die nächste Zeile verkettetO
,Y
und ein einzelnes Leerzeichen.Schließlich wird gedruckt, wenn
I
das erforderliche Muster in der Zeile nicht mehr übereinstimmtB
.quelle
Perl 5 , 19 + 1 (
-p
) = 20 BytesProbieren Sie es online!
quelle