Verwandt, aber sehr unterschiedlich.
Ein Boustrophedon ist ein Text, bei dem jede andere Zeile mit umgekehrten Buchstaben umgedreht oder umgekehrt ist.
In dieser Herausforderung werden wir nur jede zweite Zeile umkehren, aber die tatsächlich verwendeten Zeichen intakt lassen. Sie können wählen, welche Zeilen umgekehrt werden sollen, solange es sich um jede andere handelt.
Sie können den Text in jedem geeigneten Format verwenden, solange Sie keine oder mehrere druckbare ASCII-Zeilen mit jeweils null oder mehr Zeichen unterstützen.
Beispiele:
["Here are some lines","of text for you","to make a","boustrophedon"]:
["Here are some lines","uoy rof txet fo","to make a","nodehportsuob"] or ["senil emos era ereH","of text for you","a ekam ot","boustrophedon"]
["My boustrophedon"]:
["My boustrophedon"] or ["nodehportsuob yM"]
[]:
[]
["Some text","","More text","","","Last bit of text"]:
["Some text","","More text","","","txet fo tib tsaL"] or ["txet emoS","","txet eroM","","","Last bit of text"]
Antworten:
APL (Dyalog Classic) , 4 Bytes
Die Eingabe ist ein Vektor von Zeichenvektoren.
⌽
ist eine Funktion, die einen Vektor umkehrt (wenn⌽
sie monadisch angewendet wird).⊢
is " dex " - eine Funktion, die das richtige Argument zurückgibt. Wenn komponiert (∘
mit einer anderen Funktionf
zusammengesetzt ist, wird diese monadisch, wasA ⊢∘f B
äquivalent zuA ⊢ (f B)
und daher istf B
.\
ist der Scan- Operator.g\A B C ...
ist der VektorA (A g B) (A g (B g C)) ...
bei demg
dyadisch angewendet wird (Infixnotation). Setzt man⊢∘⌽
für dieg
es vereinfacht zu:Die Umkehrungen an geraden Positionen (oder ungeraden, je nachdem, wie Sie zählen) werden aufgehoben.
Probieren Sie es online!
quelle
]&|.&.>/\
für diejenigen, die J.Haskell , 26 Bytes
Probieren Sie es online! Anwendungsbeispiel:
zipWith($)l ["abc","def","ghi"]
Erträge["abc","fed","ghi"]
.Erläuterung:
l
ist eine unendliche Liste von Funktionen, die zwischen demid
Entitätsfunktion und derreverse
Funktion .Die Hauptfunktion zippt
l
und die Eingabeliste mit der Funktionsanwendung$
, dh für eine Eingabe, die["abc", "def", "ghi"]
wir erhalten[id$"abc", reverse$"def", id$"ghi"]
.quelle
Schale , 4 Bytes
Nimmt eine Liste von Zeichenfolgen auf und gibt sie zurück (der Interpreter verbindet das Ergebnis vor dem Drucken implizit durch Zeilenumbrüche). Die erste Zeichenfolge ist umgekehrt. Probieren Sie es online!
Erläuterung
Wenn Sie in Husk eine Zeichenfolge mit einer Zahl multiplizieren, wird sie so oft wiederholt und umgekehrt, wenn die Zahl negativ ist.
quelle
JavaScript (ES6), Firefox, 43 Byte
Diese Version missbraucht den Sortieralgorithmus von Firefox . In Chrome wird Müll erzeugt, und die Zeichenfolgen in Edge werden überhaupt nicht geändert.
Testfälle
Code-Snippet anzeigen
Oder versuchen Sie es online! (Spinnenaffe)
JavaScript (ES6), 45 Byte
Testfälle
Code-Snippet anzeigen
quelle
APL (Dyalog Unicode) , 10 Bytes
Funktioniert in beide Richtungen:
Probieren Sie es online! mit
⎕IO←1
Probieren Sie es online! mit
⎕IO←0
Wie es funktioniert:
quelle
Perl 5, 17 + 2 (-pl) = 19 Bytes
ungerade Zeilen vertauscht
gerade Zeilen vertauscht
Nach dem Kommentar von @ Martin: Die Eingabe muss einen nachgestellten Zeilenumbruch haben.
versuche es online
quelle
Haskell , 27 Bytes
Probieren Sie es online!
Haskell , 30 Bytes
Probieren Sie es online!
Rekursion FTW.
quelle
05AB1E ,
54 BytesProbieren Sie es online!
Erläuterung
quelle
K (OK) ,
1714 BytesLösung:
Probieren Sie es online!
Beispiel:
Erläuterung:
reverse
An ungeraden Indizes der Eingabeliste anwenden :Anmerkungen:
&(#x)#0 1
für&2!!#x
3 Bytes speichernquelle
APL (Dyalog) , 12 Bytes
Probieren Sie es online!
quelle
Python 2 ,
4036 Bytes-4 Bytes dank @ Mr.Xcoder
Probieren Sie es online!
Ausgaben durch Ändern der Eingabeliste
Python 2 , 43 Bytes
Probieren Sie es online!
quelle
Alumin , 66 Bytes
Probieren Sie es online!
quelle
J 9 Bytes
Reduzieren Sie von rechts nach links, indem Sie alle Zeichenfolgen im Ergebnis umkehren und die nächste Zeichenfolge wie sie ist voranstellen.
Probieren Sie es online!
Wir können 6 mit dem Ansatz von ngn machen , aber es wird zusätzliche Leerzeichen geben:
Probieren Sie es online!
quelle
R , 85 Bytes
Probieren Sie es online!
Eingabe von stdin und Ausgabe nach stdout.
Jede Zeile muss mit einem Zeilenvorschub / Wagenrücklauf / CRLF abgeschlossen werden und wird mit einer entsprechenden neuen Zeile gedruckt. Eingaben müssen also einen nachgestellten Zeilenvorschub haben.
quelle
Gelee ,
54 BytesProbieren Sie es online!
Danke HyperNeutrino für -1 Bytes! (Eigentlich, weil ich
ƭ
aufgrund fehlender Dokumentation nie wusste, wie es funktioniert, diesmal hatte ich Glück)quelle
¦
mitm
(7 Bytes).s2U2¦€;/
ist auch 7 Bytes.T-SQL, 65 Bytes
Unsere Standardeingaberegeln ermöglichen es SQL, Werte aus einer bereits vorhandenen Tabelle einzugeben. Da SQL von Natur aus ungeordnet ist, muss die Tabelle Zeilennummern aufweisen, um die ursprüngliche Textreihenfolge beizubehalten.
Ich habe die Tabelle mit einer Identitätsspalte definiert, damit wir einfach Textzeilen nacheinander einfügen können (nicht auf die Gesamtsumme des Bytes angerechnet):
So wählen Sie abwechselnde Zeilen aus und kehren sie um:
Beachten Sie, dass ich 11 Bytes sparen kann, indem ich das ausschließe
ORDER BY i
, und dass die Liste wahrscheinlich in der ursprünglichen Reihenfolge für jede angemessene Länge zurückgegeben wird (dies gilt sicherlich für das 4-zeilige Beispiel). SQL garantiert dies jedoch nur , wenn Sie dieORDER BY
einbeziehen. Wenn wir also beispielsweise 10.000 Zeilen hätten, würden wir dies definitiv brauchen.quelle
Perl 6 , 44 Bytes
Versuch es
quelle
Komma getrennt:
Stax , 12 Bytes
Führen Sie es aus und debuggen Sie es
Eingabe: ABC, def, GHI, jkl, MNO, pqr, STU
Newline begrenzt:
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
Eingang:
Ausgabe für beide:
quelle
Eigentlich 7 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Alice , 13 Bytes
Probieren Sie es online!
Eingabe über separate Befehlszeilenargumente. Kehrt die erste Zeile (und jede weitere Zeile danach) um.
Erläuterung
quelle
Standard-ML (MLton) , 51 Bytes
Probieren Sie es online! Anwendungsbeispiel:
$ ["abc","def","ghi"]
Erträge["abc","fed","ghi"]
.Erläuterung:
$
ist eine Funktion, die sich über eine Liste von Zeichenfolgen wiederholt. Es dauert zwei Stringsa
undb
aus der Liste, hält die erste unverändert und kehrt die zweite durch die Zeichenfolge in eine Liste von Zeichen Transformation (explode
), die Umkehrung der Liste (rev
), und es zurück in einen String drehen (implode
).quelle
Retina , 18 Bytes
Probieren Sie es online! Erläuterung: In der ersten Stufe wird die erste Zeile umgekehrt, in der zweiten Stufe werden die ersten beiden Zeilen gedruckt, und in der dritten Stufe werden sie gelöscht. Das ganze Programm wiederholt sich dann, bis nichts mehr übrig ist. Eine nachgestellte Zeile könnte zu Lasten eines Führenden entfernt werden
;
.quelle
Wolfram Language (Mathematica) , 33 Byte
Probieren Sie es online!
Wie es funktioniert
StringReverse@*Append
Wenn eine Liste von Zeichenfolgen und eine andere Zeichenfolge als Eingabe angegeben werden, wird die Zeichenfolge am Ende der Liste hinzugefügt und anschließend alle Zeichenfolgen umgekehrt.Fold
Die Eingabe in Bezug auf das oben Gesagte bedeutet, dass wir:Jede Zeile wird um ein Mal weniger als die vorherige Zeile umgekehrt, sodass die Zeilen die Richtung wechseln.
quelle
CJam , 11 Bytes
Probieren Sie es online! (CJam-Array-Literale verwenden Leerzeichen, um Elemente zu trennen.)
Erläuterung:
Erklärung für den Teil
Waf.%
"Schwarze Magie":W
ist eine Variable, für die vorinitialisiert wurde-1
.a
bricht ein Element in ein Array ein, soWa
ist es[-1]
.%
Knallt eine Zahln
und ein Arraya
und nimmt jedesn
Element des Arrays. Wennn
es negativ ist, wird es auch umgekehrt, was bedeutet, dassW%
ein Array umgekehrt wird..
gefolgt von einer binären Operation wendet diese Operation auf entsprechende Elemente eines Arrays an[1 2 3] [4 5 6] .+
ist[5 7 9]
. Wenn ein Array länger als das andere ist, bleiben die Elemente unverändert, was bedeutet, dassWa.%
das erste Element eines Arrays umgekehrt wird.f
gefolgt von einer binären Operation wird ein Element aus dem Stapel genommen und verhält sich dann so{<that element> <that operation>}%
, als würde man jedes Element im Array durchgehen, sein Element verschieben, das Element zuerst aus dem Stapel verschieben, die Operation ausführen und dann die Ergebnisse sammeln zurück in ein Array. Dies bedeutet, dassWa.f%
das erste Element jedes Elements im Array umgekehrt wird.quelle
V , 4 Bytes
Probieren Sie es online!
quelle
Swift ,
90858272 Bytes-10 Bytes dank @ Mr.Xcoder
quelle
print
die Rückgabetypdeklaration verwenden undfunc f(a:[String]){print(a.reduce([]){$0.map{"\($0.reversed())"}+[$1]})}
Rubin , 19 + 2 = 21 Bytes
+2 Bytes für
-nl
Flags.Probieren Sie es online!
Erläuterung
Praktisch identisch mit der Perl 5-Antwort , obwohl ich diese nicht gesehen hatte, als ich sie schrieb.
Mit Leerzeichen sieht der Code folgendermaßen aus:
Die
-p
Option bewirkt, dass Ruby Ihr Skript effektiv in eine Schleife einfügt:Die Sondervariable
$_
enthält die zuletzt gelesene Zeilegets
und$.
die Zeilennummer.Die
-l
ermöglicht eine automatische Linie Verarbeitung beendet wird , die automatisch Anrufechop!
an jeder Eingangsleitung, die das das entfernt ,\n
bevor wir es umgekehrt.quelle
GNU sed , 31 + 1 = 32 Bytes
+1 Byte für
-r
Flag.Probieren Sie es online!
Erläuterung
quelle
Kohle , 9 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Hinweis: Da Charcoal die Länge der Liste nicht kennt, habe ich sie als zusätzliches Element hinzugefügt. Erläuterung:
quelle
Befunge-93, 48 Bytes
Probieren Sie es online
Gibt die erste Zeile in umgekehrter Reihenfolge aus. Hat einen nachgestellten Zeilenumbruch.
Grundsätzlich wird zwischen dem Drucken bei der Eingabe und dem Speichern der Eingabe auf dem Stapel gewechselt. Wenn es eine neue Zeile oder das Ende der Eingabe erreicht, druckt es den Stapel aus, druckt eine neue Zeile und ändert das Zeichen bei 0,4 so, dass es entweder ein # oder ein No-Op ist, um den Modus zu ändern. Wenn es das Ende der Eingabe war, beenden Sie das Programm
quelle