Herausforderung:
Überlappen Sie eine Liste mehrzeiliger Zeichenfolgen (oben links) und geben Sie das Ergebnis aus.
Beispiel:
Eingabe: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Ausgabe:
cbaa
bbaa
bbaa
aaaa
Herausforderungsregeln:
- Das Eingabeformat ist flexibel. Sie können die Eingabe als 2D-Liste von Linien (dh
[["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]
) oder 3D-Liste von Zeichen (dh[[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]
) erhalten. Sie können alle Eingaben einzeln über STDIN vornehmen. Etc. - Das Ausgabeformat ist streng. Sie können die mehrzeilige Zeichenfolge drucken oder zurückgeben. (Wenn Ihre Sprache keine Zeichenketten enthält, ist die Ausgabe als 2D-Liste von Zeichen als Alternative zulässig. Aber nur, wenn Ihre Sprache überhaupt keine Zeichenketten enthält.)
- Die Reihenfolge der Eingabeliste ist natürlich wichtig (aber Sie können die Eingabe auch in umgekehrter Reihenfolge vornehmen, wenn Sie dies wünschen).
- Eingaben enthalten nur druckbare ASCII-Zeichen im Unicode-Bereich (
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
). - Eingaben sind nur Rechtecke (also keine seltsamen Formen). Die Ausgabe ist jedoch kein notwendiges Rechteck.
- Nachgestellte Leerzeichen und eine einzelne nachgestellte Zeile sind zulässig. Führende Leerzeichen und / oder Zeilenumbrüche nicht.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Eingabe: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Ausgabe:
cbaa
bbaa
bbaa
aaaa
Eingabe: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Ausgabe:
00145
01121
012
00
Eingabe: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Ausgabe:
this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Antworten:
Gelee , 3 Bytes
Probieren Sie es online!
Hatte Jelly schon eine Weile nicht mehr benutzt, aber ich fand die Herausforderung in den Kommentaren besiegbar. Verwendet direkt logisch und (
a
), um die Stapeloperation zwischen jedem Element der Eingabe (/
) auszuführen .Y
wird verwendet, um im gewünschten Format zu drucken.quelle
ḷ""/Y
mit einer umgekehrten Eingabeliste.a
JavaScript (Node.js) , 24 Byte
2 Bytes dank @Grimy gespart
Angenommen, die zurückgegebene Zeichenfolge wird auf einem Terminal gedruckt, das ANSI-Escape-Codes unterstützt . Enthält das nicht druckbare Zeichen ESC, das wie folgt maskiert wird (kein Wortspiel beabsichtigt)
\x1B
.Dies funktioniert nicht mit TIO, aber Sie können es online ausprobieren! stattdessen die rohe Ausgabe zu sehen.
Wie?
Die verwendeten CSI-Sequenzen sind:
ED (Löschen im Display):
ESC[2J
wobei2 mittels „clear gesamter Bildschirm“
CUP (Cursorposition):
ESC[H
Dies bedeutet, "bewegt den Cursor in Zeilen , Spalte m ", wobei sowohl n als auch m weggelassen und implizit auf 1 (obere linke Ecke des Bildschirms).
Beispielausgabe
quelle
;
. Ich denke auch, dass dies "JavaScript + Terminal" oder etwas ähnliches sein sollte, das nicht mit reinem JavaScript konkurriert.if the last parameter sub-string(s) is empty, the separator preceding it may be omitted
. Da es nur zwei Unterzeichenfolgen gibt, ist das Trennzeichen vor der letzten Unterzeichenfolge das einzige, und es kann weggelassen werden.\x1B[H
notwendig? Beginnt es nicht standardmäßig oben links und Sie müssen es nur nach jeder Eingabe zurücksetzen (was macht der Join?). Oder wird es anfänglich standardmäßig an einer anderen Stelle gestartet und muss explizit an dieser Cursorposition gestartet werden, damit es erfolgreich an diese Position im Join zurückgesetzt werden kann?f=a=>print(`\x1B[H`+a.join`\x1B[H`)
mit vermutlichf(input_here)
die gleiche Ausgabe wieprint(f(input_here))
? Ich verstehe also nicht, warum Sie das nicht weglassenprint
und einfach eine Zeichenfolge zurückgeben dürfen.R ,
120,111110107 BytesProbieren Sie es online!
Eine Funktion, die eine Liste von Zeichenmatrizen akzeptiert (3D-Eingabe wird akzeptiert).
(Wie Sie an der Anzahl der Bytes erkennen können, ist dies in R nicht ganz einfach ...)
quelle
array
stattmatrix
!ncol
(Sie können transponieren, um zu erhaltennrow
).Python 2 , 88 Bytes
Probieren Sie es online!
Erklärung (mit Beispiel):
Nimmt eine 2D-Liste als Eingabe.
Zuerst wird die Eingabeliste gezippt, um die Zeilen der einzelnen Eingaberechtecke zu erhalten (entspricht
map(None,l)
einer Zip-Länge):Jede dieser Zeilen wird dann gefiltert, um
None
s zu entfernen , und erneut komprimiert:Welches ist eine Liste von Zeichen für jede Position des gewünschten Ergebnisses. Diese Listen werden erneut gefiltert und die letzte wird genommen:
Zuletzt werden die resultierenden Listen zusammengefügt und gedruckt:
quelle
R
10797 BytesFunktioniert anscheinend nicht mit TIO, was möglicherweise mit der Verwendung des
\r
Wagenrücklaufzeichens zusammenhängt. Es funktioniert auf meiner lokalen Installation von R.Nimmt die Eingabe als Liste mit einem Vektor von Zeilen:
Durchläuft die Zeilen jedes Rechtecks, druckt nach jedem Zeilenumbruch einen Zeilenumbruch und startet die Zeile neu.
Wenn wir die Regeln ein wenig ausdehnen, können wir die Länge der Eingabe überprüfen und einfach eine Endlosschleife ausführen und eine große Anzahl von Zeilenumbrüchen ausgeben:
R, 85 Bytes
quelle
\r
und willkommen zurück! Nur eine Anmerkung, ich denke, dies funktioniert nur in interaktiven R-Sitzungen (wenninteractive()
true zurückgegeben wird)rscript
Befehlszeile. Ich vermute, es ist eine Windows / Linux-Sache, da Windows\r\n
für Newlines und Linux verwendet\n
.APL (Dyalog Unicode) , 22 Byte SBCS
Anonyme implizite Präfixfunktion, die eine Liste von 2D-Zeichenarrays als Argument verwendet. Druckt.
Probieren Sie es online!
Dies funktioniert, indem eine Zeichenfläche erstellt, diese dann an die Liste der Blöcke angehängt und mit einer Funktion, die Blöcke in der Ecke platziert, verkleinert (gefaltet) wird.
↑
Mischen Sie den 2D-Block, um einen orthogonalen 3D-Block zu erstellen, und füllen Sie ihn nach Bedarf mit Leerzeichen auf1⌷
Nimm die erste Schicht⊂
legen Sie das∘
dann bei⌽,
der umgekehrten Liste von Blöcken voran(
…)
Wenden folgende stillschweigende Funktion an:{
…}/
Reduzieren mit dem folgenden anonymen Lambda:⊢⍵
mit dem richtigen argument als leinwand ...⍺@(
…)
Ändern mit den Elementen des linken Arguments, platziert bei folgenden Stellen platziert sind:⍴⍺
die Form des linken Arguments⍳
die ɩ eines Arrays dieser Form⊃
offen zu legen (weil die Reduzierung um Rang eingeschlossen)quelle
Haskell, 66 Bytes
Die Eingabe wird als eine Liste der Liste von Zeichenketten in umgekehrter Reihenfolge genommen, zB für den ersten Testfall:
[["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]]
.Probieren Sie es online!
quelle
05AB1E , 12 Bytes
Port von TFelds Python-Lösung
2 Bytes gespart dank Grimy
Probieren Sie es online!
Erläuterung
Alternative 14-Byte-Version
Probieren Sie es online!
Erläuterung
quelle
--no-lazy
der Fix ist, um immer noch eine Map / Filter mit Print für das Implizite zu verwendeny
, um ein Byte im Vergleich zu speichernvy...,
:) Ich wusste, dass dies in der Legacy-Version funktioniert, aber in der neuen Version würde es auch das ausgeben[...]
. Wusste nicht, dass das am Mangel von lag--no-lazy
. ;) Was die Antwort selbst betrifft, sehr nett! Ich wusste, dass eine kumulative Reduzierung notwendig war, konnte es aber nicht wirklich herausfinden, als ich es selbst ausprobierte. Sie machen es so einfach aussehen ..õζεõK
kann seinζεðK
,õζõδK
kann seinζðδK
.Canvas , 5 Bytes
Probieren Sie es hier aus!
Wenn ein Überlappen von
/
+\
→X
,-
+|
→+
usw. in Ordnung wäre, würden 2 Bytes funktionieren.quelle
Python 2 , 77 Bytes
Probieren Sie es online!
quelle
PowerShell 6 , nur Konsole, 20 Byte
basierend auf Arnauld's Antwort . Dies funktioniert nur mit der Konsole und nicht mit TIO.
Probieren Sie es online!
PowerShell , 103 Byte
Probieren Sie es online!
Abgerollt:
quelle
C # (.NET Core) , 68 + 23 = 91 Byte
23 Bytes ist für den Import,
using C=System.Console;
Funktioniert nicht in TIO, da es keine Konsole ist.
Probieren Sie es online!
quelle
Ruby , 67 Bytes
Die Eingabe ist eine Liste von Zeilen. Erstellt eine Liste von Zeilen und überschreibt diese während des Durchlaufs der Eingaben. Anschließend werden sie mit einer neuen Zeile (dargestellt durch die Variable
$/
) am Ende verbunden, um der strengen Ausgabe zu entsprechen.Probieren Sie es online!
quelle
C (GCC, MinGW) 138 Bytes
Es wird davon ausgegangen, dass CR den Cursor an den Anfang der aktuellen Zeile setzt.
Getestet mit:
quelle
Oktave ,
7167 BytesFunktion, die ein vertikales Zellenarray von Zeichenmatrizen verwendet und eine Zeichenmatrix zurückgibt.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
quelle
Javascript (Browser) ,
216208204 BytesMein Versuch dazu. Ich bin nicht glücklich über die Größe und es muss sicherlich noch mehr für Verbesserungen geben, aber ich bin nicht so erfahren im Golfen.
Auf jeden Fall werden zuerst alle Zeichenfolgen aufgeteilt, dann alle Zeichenfolgen umgedreht und dann in einer Reduce-Operation geloopt umgedreht Reduce- gestartet. PadStart all the strings together. Kehren Sie dann alle Zeichenfolgen erneut um und fügen Sie sie mit Zeilenumbrüchen wieder zusammen.
Besonderer Dank geht an Kevin Cruijssen , der mich daran erinnert hat, dass der letzte Teil einer for-Schleife am Ende stattfindet und insgesamt 8 Byte eingespart werden .
quelle
('')
kann zwei sein, um vier Bytes zu sparen :)for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}
mitfor(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];
.j
wird zuerst zugewiesen(j=a[i])
, dann erfolgt die if-Anweisung mitif(!...)j=b[i];
(wo...
ist das(j=a[i])
, also der aktualisierte Wert vonj
), und dann;a[i]=b[i++].padStart(j.length,j))
erfolgt die Iteration am Ende der for-Schleife. Nicht sicher, wo das Problem liegt, und es scheint zu funktionieren?C (GCC) ,
5147 BytesProbieren Sie es online!
-4 Bytes dank Ceilingcat.
Verwendet die CSI-Sequenzen zum Speichern / Wiederherstellen der Cursorposition. Durchläuft einfach das übergebene String-Array (im selben Format wie
argv
) und druckt<save position>string<restore position>
für jedes.Der Cursor bleibt dabei oben links. Wenn Sie also am Terminal arbeiten, müssen Sie danach genügend Zeilenumbrüche einfügen, damit die Eingabeaufforderung die Eingabe nicht blockiert.
quelle
Japt
-P
, 7 BytesÜbernimmt die Eingabe als Array von mehrzeiligen Zeichenfolgen und gibt eine einzelne mehrzeilige Zeichenfolge aus.
Versuch es
quelle
T-SQL-Abfrage,
297295 ByteVerwenden von ¶ als Trennzeichen und einer Tabellenvariablen als Eingabe.
Probieren Sie es online aus
quelle
Javascript (Browser),
129124 BytesMein erster Versuch, Code Golf zu spielen. Ich habe die in den Regeln angegebenen Links gelesen (Lücken, Standardregeln ...) und hoffe, dass ich etwas falsch gemacht habe!
Ich habe die Eingaben beibehalten, wie sie im ersten Beitrag (flache Array-Form) sind.
Vielen Dank an Kevin Cruijssen für das Speichern von 5 Bytes.
Tests:
Code-Snippet anzeigen
quelle
for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}
kann seinfor(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;
:)=(r[l])?
die entfernt werden kann=r[l]?
:)r
. Andernfalls wird stattdessen das Ergebnis der Zuordnung zurückgegeben.Pyth , 18 Bytes
Probieren Sie es online! (Hinweis: Der Code selbst wertet nur einen Block aus. Im Test-Suite-Modus des Interpreters wird das Programm für jede Eingabezeile einmal ausgeführt.)
Basiert auf der Python 2-Lösung von TFeld .
Erläuterung:
Eine Erklärung, warum der Algorithmus selbst funktioniert, finden Sie in der Antwort von TFeld.
quelle
Kohle , 4 Bytes
Probieren Sie es online (ausführlich) oder online (rein) .
Erläuterung:
Durchlaufen Sie die Eingabeliste mehrzeiliger Zeichenfolgen:
Und drucken Sie die mehrzeilige Zeichenfolge, ohne den Cursor zu bewegen:
quelle