Aufgabe
- Der Benutzer gibt einen Satz ein - nur Wörter. Alle Eingaben außer Buchstaben oder Leerzeichen, einschließlich Ganzzahlen und Interpunktion, sollten eine Ausnahme auslösen: "Satz darf nur Buchstaben verwenden".
- Die Ausgabe hat ein Muster, bei dem einige Wörter umgekehrt und andere Wörter normal sind.
- Das Muster beginnt als normales Wort, die nächsten zwei Wörter werden umgekehrt, dann sind die nächsten zwei Wörter normal und das Muster wird fortgesetzt.
- Ein Beispiel, wo die Wörter normal sein sollten und wo Wörter umgekehrt sind, ist unten:
Normal - Umgekehrt - Umgekehrt - Normal - Normal - Umgekehrt - Umgekehrt - Normal ...
Eingabebeispiel
Sie verkauft Muscheln an der Küste
Ausgabebeispiel
Sie schleudert Muscheln an der Küste
Zusätzliche Regeln
- Wenn Großbuchstaben verwendet werden, sollten sie auf dem Brief bleiben, auf dem sie ursprünglich geschrieben wurden.
- Mehrere Leerzeichen, die ursprünglich bei der Eingabe eingegeben wurden, sollten auf ein Leerzeichen reduziert werden. Zum Beispiel
Programming Puzzles and Code Golf
wirdProgramming selzzuP dna Code Golf
Kürzester Code gewinnt !!
Viel Spaß beim Codieren ...
code-golf
string
word
permutations
Belfield
quelle
quelle
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
Es bedeutet, eine sekundäre Aufgabe zu implementieren, die nichts mit der Umkehrung von Wörtern zu tun hat, Sprachen auszuschneiden, die keine Ausnahmen enthalten, und eine lange Zeichenfolge fest zu codieren oder zu komprimieren, die viel Zeit in Anspruch nimmt Byteanzahl.Antworten:
TeaScript , 55 Bytes
58 60 69 76 78 80 87 89Das ist extrem kurz, ich bin sehr zufrieden damit.
Die letzten ~ 20 Zeichen mögen wie Kauderwelsch aussehen, aber das ist "Satz darf nur Buchstaben enthalten", verschlüsselt. Alle Zeichen haben Zeichencodes unter 256, sodass jedes ein Byte ist
Erläuterung
quelle
Haskell, 141 Bytes
Fast 2/3 des Codes dienen der Fehlerprüfung. Scheint die erste echte Herausforderung zu sein.
Die Arbeit wird erledigt, indem
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
die Eingabe in eine Liste von Wörtern aufgeteilt, mit der zyklischen Liste von Funktionen komprimiert[id,reverse,reverse,id,id,reverse...]
und das Ergebnis mit Leerzeichen zu einer einzelnen Zeichenfolge verknüpft wird.Danke an @Christian Irwan für 2 Bytes.
quelle
r=reverse
?reverse
undr=reverse
hatte die gleiche Länge, weil sie fehltef=
. Nicht erneut überprüft, wenn ich auf Nicht-Pointfree umgestiegen bin).JavaScript (ES6) 122
quelle
Retina , 103 Bytes
In der zweiten Zeile sollte ein Leerzeichen stehen, das SE zu schlucken scheint. Führen Sie den Code aus einer einzelnen Datei mit dem
-s
Flag aus.Retina kennt keine Ausnahmebedingungen, daher wird die Ausgabe einfach ersetzt,
Sentence must only use letters
wenn die Eingabe Nicht-Buchstaben-Zeichen ohne Leerzeichen enthält.quelle
Pyth, 61 Bytes
Probieren Sie es online aus.
quelle
Python,
16316015714515 Zeichen entfernt, danke Mego !!
quelle
Bash + Coreutils, 108
Das letzte Zeichen dieses Programms ist ein Leerzeichen.
Die Eingabe erfolgt über die Befehlszeile:
quelle
Pyth, 72
Schlägt die andere Pyth-Antwort nicht, aber ich habe bereits Zeit investiert, um sie zu schreiben. Es ist im Grunde eine Übersetzung meiner Python-Antwort .
Probieren Sie es online aus
quelle
Julia, 109 Bytes
i=0
und(i+=1)%4>1
werden verwendet, um zu entscheiden, ob jedes Wortreverse
d bekommt oder nicht.isalpha
Gilt für die Wörter nach dem Teilen, umsplit(s)
zu bestimmen, ob es Zeichen gibt, die keine Buchstaben sind (Leerzeichen wurden zu diesem Zeitpunkt bereits entfernt).join
Stellt den String nach der Manipulation wieder her, es sei denn, dererror
wird geworfen.quelle
Julia,
150134 BytesUngolfed:
16 Bytes gespart dank Glen O!
quelle
r
als Ergebnis zuzuweisen? Das heißt,r=ismatch(...)||error(...)
- wird einige Zeichen abschneiden und die verwendete Bedingung umkehrenr
. Ich nehme an, dass ich noch weitere Einsparungen erzielen werde||
mit der Negation befassen, dann wurde mir klar, dass die Negation nicht notwendig ist. Kehren Sie es zurück zu&&
. Und noch besser, verwenden Sie?:
stattdessen, um es noch besser zu machen.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
für 144 Bytes. Und ich denke, ich kann es innerlich besser machenjoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pyth, 55 Bytes
%%k4 3
Hat das Stück von Pietu1998 ausgeliehen. Ein weiteres Byte gespeichert.Probieren Sie es online aus: Demo oder Test Suite
Erläuterung
quelle
Perl 5
-ap
, 80 BytesProbieren Sie es online!
quelle
Java, 215 Bytes
Regex macht Spaß
Probieren Sie es online!
quelle
She slles aeS shells no the aeS shore
, aber es sollteShe slles aeS shells on eht aeS shore
stattdessen sein (erst normal, dann abwechselnd in 2er-Paaren umgekehrt oder nicht). Zwei Probleme verursachen dies. Sie erhöhen jetzti
auch, wenn ein Artikel leer ist undi++%2<1
solltei++%4>1
stattdessen sein. Hier eine feste 211-Byte- Version.Jelly , 39 Bytes
Probieren Sie es online!
Vielen Dank an Erik den Outgolfer. Er rettete mich vor ein paar zusätzlichen Bytes und vor vielen Stunden Frustration.
Hier ist eine 46-Byte-Lösung
Tatsächlich wird ein Python-Syntaxfehler ausgegeben, wenn die Eingabe ungültige Zeichen enthält.
Probieren Sie es online!
quelle
Japt v2.0a0
-S
, 41 BytesVersuch es
quelle
05AB1E , 36 Bytes
Probieren Sie es online aus.
Löst den folgenden Fehler aus, wenn die Eingabe nicht nur enthält
[A-Za-z ]
:Erläuterung:
Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum
“¸–ƒ—€É€Å™ê“
ist"sentence must only use letters"
.quelle
PHP , 147 Bytes
Probieren Sie es online!
Oder wenn
die()
als "Ausnahme" akzeptabel ist:PHP , 131 Bytes
Probieren Sie es online!
quelle