Sagen Sie, ich habe Text wie diesen (jedes Wort in einer Zeile, ohne Leerzeichen)
Programming
Puzzles
&
Code
Golf
Das macht keinen Sinn! Es widerspricht völlig den Gesetzen der Physik.
Ihre Herausforderung besteht darin, diese unmögliche Situation zu beheben und den Text wie folgt zu reduzieren:
P
Prog
&uzz
Coderam
Golflesming
Damit unter keinem Zeichen ein Leerzeichen steht, behalten die Zeichen ihre vertikale Reihenfolge bei.
Ziel ist es, die Anforderungen zu erfüllen, aber möglichst wenige Byte Quellcode zu verwenden.
Antworten:
Pyth, 10 Bytes
Versuchen Sie es online im Pyth Compiler / Executor .
Idee
Wir können die gewünschte Ausgabe erzielen, indem wir vier einfache Transformationen anwenden:
Kehre die Reihenfolge der Zeilen um:
Zeilen und Spalten transponieren:
Diese Spitze rechtfertigt das Reduzieren der ursprünglichen Spalten.
Zeilen und Spalten transponieren:
Kehre die Reihenfolge der Zeilen um:
Code
quelle
Haskell, 62 Bytes
Ich bin sehr reif.
quelle
Python 2, 104 Bytes
Ein iterativer One-Pass-Algorithmus. Wir gehen jede Zeile der Reihe nach durch und aktualisieren die Liste
l
der auszugebenden Zeilen. Das neue Wort wird effektiv von unten gedrückt, wobei alle darüber stehenden Buchstaben um ein Leerzeichen verschoben werden. Zum Beispiel im TestfallNachdem wir fertig sind
Code
, haben wirund dann
Golf
Ergebnisse hinzufügen inwas wir als die Kombination von zwei Stücken sehen können
wo das erste Stück durch verschoben wurde
golf
. Wir führen diese Verschiebung mit einemzip
Element in der Ausgabeliste am Ende (linke Seite) und mit einer Leerzeile (rechte Seite) durch, wobei jeder Teil an der Länge des neuen Elements abgeschnitten wird.Es mag natürlicher erscheinen, stattdessen rückwärts zu iterieren und neue Buchstaben von oben fallen zu lassen, aber mein Versuch, dies zu tun, wurde länger.
Zum Vergleich ist hier ein
zip
/filter
-Ansatz mitmap(None,*x)
verwendet füriziplongest
(109 Bytes):quelle
CJam, 11 Bytes
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
Die Idee ist die gleiche wie in meiner Pyth-Antwort .
quelle
JavaScript (ES6), 146
(Die 2 Zeilenumbrüche in den Vorlagenzeichenfolgen sind signifikant und werden gezählt.)
Die Idee von @Dennis in JavaScript umgesetzt. Die langwierige S-Funktion transponiert Zeile für Zeile und Zeichen für Zeichen. Das Ergebnis verbleibt im
t
Array.Weniger Golf im Snippet (versuchen Sie es in Firefox)
quelle
S(t.reverse()),t.reverse().join
mitS(R=t.reverse()),R.join
.R, 223 Bytes
Dies ist eine absurd lange, naive Methode.
Ungolfed:
Sie können es online ausprobieren .
quelle
Matlab / Octave, 99 Bytes
Beispiel :
Definieren Sie beispielsweise eine Eingabezeichenfolge in einer Variablen
s
.10
ist das Zeilenvorschubzeichen:Aufruffunktion
f
mit Eingabes
:Oder probieren Sie es online aus (danke an @beaker für die Hilfe beim Online-Octave-Interpreter)
quelle
JavaScript ES6, 119 Byte
Hier ist es ungolfed und in ES5 mit Kommentaren, die erklären, wie es funktioniert:
quelle
APL (Dyalog Extended) ,
1311 Byte SBCS-2 mit meinen Erweiterungen zu Dyalog APL.
Anonyme implizite Funktion, die eine Zeichenmatrix aufnimmt und zurückgibt.
Probieren Sie es online!
~
Entfernen Sie∘
die' '
Leerzeichen⍤
von1
Zeilen (lit. 1D-Subarrays),⍢
während Sie sie⍉
transponieren,⍢
während Sie sie⊖
spiegelnquelle
R
190178175 BytesVermutlich noch etwas Platz zum Golfen dabei. Wahrscheinlich ein paar unnötige Operationen
Ungolfed und erklärte
Testlauf. Es ist interessant festzustellen, dass aufgrund der Funktionsweise des Scans der gesamte Satz mit Leerzeichen eingegeben werden kann und trotzdem die angegebene Ausgabe erfolgt.
quelle
STATA, 323 Bytes
Übernimmt die Eingabe in eine Datei mit dem Namen ab. Funktioniert jetzt nur für bis zu 24 Zeichen. Wird später aktualisiert, damit es mit mehr funktioniert. Funktioniert auch nicht im Online-Compiler. Benötigt den unfreien Compiler.
Bearbeiten: Verschiebt die leise (um die Ausgabe zu unterdrücken) aus jeder Anweisung in der Schleife in die Schleife selbst und spart 8 Byte.
quelle
R, 171 Bytes
Mit Zeilenumbrüchen und Einrückung:
Verwendungszweck:
quelle
Gelee , 6 Bytes (nicht konkurrierend)
Probieren Sie es online!
Wie es funktioniert
Die Idee ist die gleiche wie in meiner Pyth-Antwort .
quelle
Turtlèd , 72 Bytes, nicht konkurrierend
Ziemlich sicher, dass ich den Ansatz ändern könnte, um Bytes zu sparen, aber später.
: p Nicht-Golf-Esolang schlägt regelmäßig langs: p
Das Seltsame an Turtlèd ist, dass es ursprünglich nach einer Diskussion über ascii art langs gemacht wurde, aber es scheint tatsächlich das Beste für diese Art von Herausforderungen zu sein
Turtlèd kann keine Zeilenumbrüche, sondern mehrere Eingaben vornehmen, und dies erfordert nur eine Eingabe: Beenden Sie jedes Wort mit einem Leerzeichen, einschließlich des letzten.
Probieren Sie es online!
Erläuterung:
quelle
Perl, 133 Bytes
Dies war eine dieser Herausforderungen, die sich in meinem Kopf von zu schwierig, zu einfach, zu viel mehr Code als erwartet änderten. Ich bin nicht besonders zufrieden mit dem Ansatz, ich bin mir sicher, dass es einen gibt viel besserer Weg, um das
print pop@F...
Bit zu reduzieren, vielleicht mit-n
oder einfach nur mit regulärem Ausdruck, aber ich komme gerade nicht dahin ... Ursprünglich habe ich verwendetsay
, aber ich denke, ich müsste das höher bewerten (use 5.01
), weil$'
.Verwendungszweck
Speichern unter
vertically-collapse-text.pl
.quelle
SmileBASIC, 90 Bytes
Wendet die Schwerkraft auf den gesamten Text in der Konsole an. Ich bin nicht sicher, ob dies gültig ist oder ob ich ein String-Array verwenden muss.
quelle
Rubin,
9982 BytesDahin kommen...
Eine versuchte Erklärung:
Führen Sie es so aus:
quelle
K 30
.
Erläuterung
x@\:!|/#:'x
Erweitert jede Zeichenfolge, um eine quadratische Zeichenmatrix zu erstellen.+
transponiert es{(-#x)$x@&~^x}
Entfernt Leerzeichen aus einer Zeichenfolge und füllt die Zeichenfolge mit der ursprünglichen Länge aufWenden Sie diese Funktion auf jede der transponierten Saiten an und drehen Sie die Ausgabe, um das Ergebnis zu erhalten
quelle
{+{(-#x)$x@&~^x}'+(|/#:'x)$x}
für 29.pb - 310 Bytes
Was für eine Katastrophe. Ich kann mich kaum daran erinnern, wie es funktioniert.
Aufgrund der Art und Weise, wie die Eingabe von pb funktioniert (eine einzelne Zeile auf einmal), müssen Sie Leerzeichen anstelle von Zeilenumbrüchen in der Eingabe verwenden. Wenn der Interpreter kein Müll wäre und Sie könnten Zeilenumbrüche in die Eingabe aufnehmen, wäre die einzige Änderung die
[B=32]
am Anfang stehende[B=10]
.Ich arbeite an einem Update für pbi (den Interpreter), das die Grafiken aufräumt, wenn Sie das Programm laufen lassen möchten. Es braucht noch viel Arbeit, aber in der Zwischenzeit können Sie dieses Programm auf YouTube ansehen .
quelle
J, 17 Bytes
Ganz angenehme Lösung.
Erläuterung:
Testfall erklärt
Testfälle
quelle
;@;:&.(|:@|.)
für 13Tatsächlich 13 Bytes
Dies verwendet den in Dennis 'Jelly-Antwort beschriebenen Algorithmus . Input und Output sind beide Listen von Strings. Leider funktioniert die eingebaute Transponierungsfunktion nicht sehr gut, wenn die inneren Listen oder Strings nicht alle gleich lang sind, was den Punkt des vertikalen Kollabierens in erster Linie zunichte machen würde. Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
Schläger 312 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
JavaScript (ES6), 103 Byte
Die äußere Karte ist auf CR aufgeteilt und sorgt dafür, dass wir genügend Zeit für eine Schleife haben, damit die "Schwerkraft" die Buchstaben so weit fallen lässt, wie sie fallen müssen.
Die innere Karte prüft zuerst, ob es eine nächste Zeile gibt. Wenn dies der Fall ist und diese kürzer ist, lassen Sie den Überlauf in die nächste Zeile fallen. dh wenn die 1. Zeile "ABCD" und die 2. Zeile "FG" enthält, legen Sie die "CD" von der 1. Zeile in die 2. Zeile ab, sodass die 1. Zeile zu "AB" und die 2. Zeile zu "FGCD" wird.
Wenn wir dies so oft tun, wie es Zeilen gibt, fallen die Buchstaben so weit ab, wie sie sollten, was uns das gewünschte Ergebnis liefert.
quelle
Japt , 8 Bytes
Probieren Sie es online!
Wie es funktioniert
Es gibt auch
z
welche die 2D-Zeichenfolge um ein Vielfaches von 90 Grad dreht, aber es schneidet die Zeichenfolge irgendwie ab, wennheight > length
.quelle
05AB1E ,
109 BytesProbieren Sie es online aus.
oder mit alternativem Start:
Probieren Sie es online aus.
Ähnliches Vorgehen wie bei @ Dennis ♦ 'Pyth-Antwort .
-1 Byte dank @Emigna als Ersatz
ðõ:
fürðм
.Erläuterung:
Alternative Erklärung:
quelle
R,
s8152 BytesBei der Interpretation der Frage habe ich mir etwas Freiheit genommen und angenommen, dass der Text in einer Matrix mit einem Zeichen pro Zelle dargestellt wird.
Also wird x:
Jetzt benutze ich
order
und[
um die Spalten so zu sortieren, dass die NA's zuerst kommen und dann alle anderen Werte:Es wird länger, wenn die Ausgabe Wörter sein muss:
quelle
function(x)
müssen daher in die Bytezahl einbezogen werden.R
196189170 BytesEine für Menschen lesbare Version:
Wie es funktioniert:
(Oder mit anderen Worten, "überflüssige" Teile fallen herunter, bis alles heruntergefallen ist, was herunterfallen kann.)
Eingabe: Ein Zeichenvektor.
quelle
Julia 0,6 , 141 Bytes
Probieren Sie es online!
Wenn
g.([w], [d d])
ich mit übertrage, kann ich jede Map-Anweisung loswerden und spare mir etwa 7 Bytes.quelle