Inspiration. * Ich kann nicht glauben, dass wir diese Herausforderung noch nicht hatten:
Aufgabe
Verschachteln Sie eine oder mehrere druckbare ASCII-Zeichenfolgen, indem Sie ein Zeichen aus jeder Zeichenfolge zyklisch bis zur vollständigen Zeichenfolge übernehmen. Wenn einer Zeichenfolge die Zeichen vor den anderen ausgehen, überspringen Sie diese von da an.
Beispiele
SIMPLE
gibt SIMPLE
POLLS
und EPEES
gibtPEOPLELESS
LYES
und APRONS
gibtLAYPERSONS
ABCDE
und a c
und 123 567
gibtAa1B 2Cc3D E567
"\n$?*
und
(leere Zeichenkette) und ,(.)"
(abschließendes Leerzeichen) ergeben ",\(n.$)?"*
(abschließendes Leerzeichen)
* Es gibt kürzere APL-Lösungen.
Antworten:
Gelee , 1 Byte
Probieren Sie es online!
Die eingebaute "Transponierung" macht genau das mit einer Liste von Strings.
quelle
z⁶
.z
ist "links transponieren, rechts auffüllen";⁶
ist ein Raum.;"
(elementweise Verkettung) würde die Aufgabe ohne eingebautes lösen.Python 2,
101898669 BytesIch hoffe, ich kann das irgendwie in ein Lambda umwandeln, indem ich es rekursiv mache.Es ist nicht ideal, weil Sie hoffen würden, dass die Transponierung kürzer ist, leider nicht (nach dem, was ich bisher erfunden habe).Alte Lösungen:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
danke an mathmandan für das dumme gefühl;) sparte mir ein paar bytes! (auf einer alten Lösung)
quelle
while any(w):
? Leere Zeichenfolgen sind in Python falsch.f=
.[]
den rekursiven Aufruf deaktivieren und verlassenf(x[1:] for x in s)
, was ihn zu einem Generatorverständnis macht, das in diesem Kontext das Gleiche wie eine Liste ist.Perl 6 ,
3432 BytesEin Lambda, das ein Array von Zeichenfolgen als Argument verwendet und eine Zeichenfolge zurückgibt.
( Online ausprobieren )
quelle
@_
anstelle von$_
CJam , 4 Bytes
Probieren Sie es online!
Wir können auch eine unbenannte Funktion für 4 Bytes schreiben, die eine Liste von Strings über dem Stack erwartet:
Probieren Sie es online!
quelle
Pyth - 3 Bytes
Sehr einfach, wird später auf dem Handy eine Erweiterung hinzufügen.
Test Suite
quelle
JavaScript (ES6),
5246 BytesNimmt Eingaben als Array von Zeichenfolgen und Ausgaben als einzelne Zeichenfolge.
Testschnipsel
quelle
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 Bytes
Probieren Sie es auf Ideone. Verwendung:
Ohne Verwendung eines eingebauten: (
3834 Bytes)Probieren Sie es auf Ideone. 4 Bytes weniger dank Zgarb! Verwendung:
quelle
f a=a
, um ein Byte zu speichern, da beide[]
einen anderen Typ haben ... so nah.C
11484 Bytes-20 Bytes, um die Länge nicht zu berechnen.
Akzeptiert ein Array von Zeichenzeigern und erfordert, dass das letzte Element ein Nullzeiger ist (siehe Verwendung).
Ungolfed und Nutzung:
quelle
malloc
undreturn
vor und dies war länger als nur DruckenPHP,
6867 BytesSchleifen über Befehlszeilenargumente. Laufen Sie mit
-r
.Nach der inneren Schleife
$f
ist,1
wenn alle Zeichenfolgen fertig sind,0
sonst (bitweise&
Umwandlung""==$c
in int).Nächste Iteration der äußeren Schleife: Kopieren
$f
nach$k
(speichert ein Byte von$k=0
) und Umschalten$f
:Wenn alle Zeichenfolgen fertig sind,
$f
ist jetztfalse
und die Schleife wird unterbrochen.quelle
Retina , 13 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Erläuterung
Dies basiert auf der Standardtranspositionstechnik in der Netzhaut. Wir sortieren (
O
) alle Nichtzeilenvorschubzeichen (.
) nach ($#
) der Anzahl der Zeichen vor ihnen in derselben Zeile ($.%`
), dh ihrer horizontalen Position.Die zweite Stufe entfernt dann einfach Zeilenvorschübe von der Eingabe.
quelle
Java,
19 + 155 = 174160Ungolfed:
Ausgabe:
Erste Änderung: Zusammengeführte Zeichenfolgendeklaration zum Speichern einiger Bytes. Entfernt
import
, wurde es von der verwendetenmain()
Methode (hier nicht dargestellten) , die auch benötigtLinkedList
. Es sind weniger Bytes, umQueue
direkt zu referenzieren .quelle
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 Bytes
Golf gespielt
Anonyme Funktion, die eine Reihe von Zeichenfolgen akzeptiert.
Ich bin sicher, dass dies mehr Golf könnte, aber es ist früh. Bei jeder Iteration greifen wir den i-ten Buchstaben aus jeder gegebenen Zeichenfolge und hängen ihn nacheinander an unsere letzte Zeichenfolge an. PHP gibt nur Warnungen aus, wenn wir auf Teile von Strings zugreifen, die nicht existieren, also ist das in Ordnung. Wir hören erst auf, wenn keine Änderungen vorgenommen wurden, nachdem alle Saiten einmal durchlaufen wurden.
Ich fühle mich wie die Verwendung von
$d
mehr Golf gespielt werden kann, aber es ist früh. : Pquelle
Eigentlich ,
76 BytesGolfvorschläge willkommen! Probieren Sie es online!
Bearbeiten: -1 Byte dank Teal Pelican.
Ungolfing
quelle
Z♂#Σ
umZ♂Σ
sie in allen. Danke für den Tipp: DJavaScript (ES6), 46 Byte
quelle
Python 2 , 58 Bytes
Probieren Sie es online!
quelle
lambda *m
?J , 13 Bytes
Probieren Sie es online!
Basierend auf der Inspiration für diese Frage.
Ein anderer Weg, dies zu tun, benötigt 27 Bytes, arbeitet aber mit Transponierung. Die meisten Bytes behandeln die automatisch hinzugefügten Nullen aus dem Auffüllen.
Erläuterung
quelle
Bash + GNU-Dienstprogramme, 55
E / A über STDIN (zeilengetrennt) und STDOUT.
Die
sed
Formate jeder Zeile führen zu einer Bash-Prozessersetzung . Diese werden danneval
bearbeitetpaste
, um das eigentliche Interleaving durchzuführen.tr
entfernt dann unnötige Zeilenumbrüche und Tabulatoren.Ideone.
quelle
PHP, 63 Bytes
Anmerkung: Verwendet die IBM-850-Codierung
Laufen Sie wie folgt:
Erläuterung
quelle
~■
(negiertes Binary 254) anstelle von"\x1"
(Binary 1) machen kann.$$
!Python 3, 75 Bytes
Ich weiß, dass der andere Python kürzer ist, aber dies ist das erste Mal
map
in meinem Leben, dass ich darauf stolz binquelle
C,
7571 BytesEinzige Einschränkung ist die Ausgabelänge. Derzeit ist es 99, kann aber leicht auf 999 (+1 Byte) erweitert werden.
Ungolfed:
quelle
Oracle SQL, 195 Byte
Übernimmt seine Eingabe aus einer Tabelle
i
mit den Spaltena
(die die Zeichenfolge enthalten) undo
(die Reihenfolge der Zeichenfolge):Erläuterung:
Wir nutzen es
CONNECT BY
, um die Zeichenfolgen in die einzelnen Zeichen aufzuteilen, aus denen sie bestehen.PRIOR SYS_GUID()
Dadurch wirdNOT NULL
sichergestellt, dass wir nicht in einer Schleife stecken bleiben.Wir verketten dann die einzelnen Zeichen mit
LISTAGG
, mischen sie jedoch mit einerORDER BY
Klausel um und ordnen sie zuerst nach ihrer Position in der ursprünglichen Zeichenfolge und erst dann nach der Zeichenfolge, aus der sie stammen.Nicht so kurz wie die anderen Antworten, aber SQL ist nicht wirklich als Manipulationssprache für Strings gedacht :)
quelle
Python 2,
12896Ich hatte gehofft, keine itertools verwenden zu müssen
Ungolfed
quelle
Perl 5 , 28 Bytes
26 Byte Code + 2 für
-0n
.Probieren Sie es online!
quelle
R , 73 Bytes
Probieren Sie es online!
Erklärung: sehr einfach (aber wortreich), durchlaufe einfach das
i
Zeichen derj
Zeichenkette. Gibt glücklicherweisesubstr
eine leere Zeichenfolge zurück, wenn eine Eingabe außerhalb des gültigen Bereichs erfolgt.quelle
Python, 112 Bytes
quelle
x
undy
aus?Perl 5 , 53 Bytes
Probieren Sie es online!
Methode
Erstellt ein zweidimensionales Array, bei dem die Anzahl der Zeilen der Länge der längsten Zeichenfolge und die maximale Anzahl der Spalten der Anzahl der Zeichenfolgen entspricht. Geben Sie dann jede Zeile des Arrays ohne Abstand aus.
quelle
TXR Lisp , 20 Bytes
Lauf:
Die
weave
Funktion ist faul und gibt eine Liste zurück. Aus diesem Grund müssen wir das Ergebnis in eine Zeichenfolge umwandeln. Da es faul ist, kann es unendliche Sequenzen weben. Zum Beispiel können wir gerade und ungerade natürliche Zahlen weben, die selbst unendlich faul sind:quelle
K (oK) ,
35 bis29 BytesLösung:
Probieren Sie es online!
Beispiel:
Erläuterung:
Verwenden Sie die Indexierung der zweiten Ebene, um Indizes von 0 bis maximal (Länge der abgeflachten Liste) über alle Eingabelisten hinweg abzurufen. Alle Indizierungen, die über den Rand der Unterliste hinausgehen, geben eine Null zurück. Drehen (dreht sich um 90), reduzieren und dann die Nicht-Null-Ergebnisse herausziehen.
Anmerkungen:
i$
) umgewandelt, damit wir nützliche Nullen erhalten, da space () als Null für eine Zeichenliste betrachtet wird, was bedeutet, dass Sie Nullen nicht von gültigen Leerzeichen unterscheiden können.
quelle
Jq 1,5 , 49 Bytes
Erläuterung
Probelauf
Probieren Sie es online aus
quelle