Ihre Aufgabe ist es, eine Eingabezeichenfolge von ASCII-Zeichen zu nehmen und die Zeichenfolge als eine Reihe vertikaler Wörter auszugeben, die durch Leerzeichen getrennt sind. Ein Beispiel ist unten gezeigt:
Angesichts der Zeichenfolge:
Hello, World! My name is Foo.
Die Ausgabe sollte sein:
H W M n i F
e o y a s o
l r m o
l l e .
o d
, !
10 Bonuspunkte werden gutgeschrieben, wenn Ihr Programm Zeichenfolgen korrekt verarbeitet, die das Terminal umschließen müssen. Dies wird auf 80 Zeichen festgelegt.
50 Punkte, wenn Ihr Programm auch das Gegenteil kann!
code-golf
string
printable-ascii
Foo Barrigno
quelle
quelle
Antworten:
J, 15
Verwendung:
quelle
Javascript -
228172145126Mein erster Code Golf :)
quelle
"Input ?"
das Verhalten des Programms auch nicht wirklich beeinflussen und es auch entfernen.length
anstatt es zweimal zu fragen, einige sinnlose Klammern, einige unnötige Semikolons.A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)
. (In der Meta-Frage zu JavaScript-Standards fürif(A[i][y]){B+=A[i][y];}else{B+=" ";}
=>B+=(x=A[i][y])?x:" "
APL, 22
Erläuterung
Beispiel
quelle
Ruby,
9187Hurra, ich habe Perl besiegt! : D
Rubin, 150 - 50 Bonus = 100
Es erkennt nur Zeilenumbrüche und wendet eine spezielle Behandlung an, wenn sie erkannt werden.
Führen Sie es wie
quelle
Javascript
184149123Mit der Beispielzeichenfolge definiert:
Sie können die zweite Anweisung in die Konsole Ihres Browsers kopieren.
Nicht abgeschlossen:
JsFiddle Link: http://jsfiddle.net/FzMvK/
Mein erster Code Golfpost: P
quelle
float:right
für den Rückwärtsgang wechseln ?Perl - 92
97Erledigt die Arbeit auf ziemlich einfache Weise.
quelle
while
hier auch der Anweisungsmodifikator verwendet wird.do{}while()
Schleife?do
selbst hat nichts anderes, nur einen Block. Daswhile
ist eine separate Sache.K, 33
Beispiel Ein- und Ausgabe:
quelle
"
da sein?{-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}
(37 Zeichen), was die Ausgabe ohne"
Python:
Eine Codezeile, um den Stich zu verarbeiten:
quelle
Python 2.7,
108103Ich bin mir sicher, dass man mehr Golf spielen kann, aber hier ist eine erste Lösung in Python.
Verbesserungen:
quelle
i=m
0 beginnen und eine Schleife bis 0F #, 187
quelle
Rubin, 63
Der Algorithmus ist sehr einfach; nur golfen. Der Code ist 61 Bytes lang, plus 2 Bytes für die
-na
Optionen, die er benötigt, um zu funktionieren. Vonruby -h
:Probelauf:
quelle
Python 2.7 -
137112 BytesJemand anderes hat es schon besser gemacht, aber ich könnte es genauso gut auf den Tisch legen. Fügt Leerzeichen zu jedem Wort in der Eingabe hinzu, bis es die gleiche Länge wie das längste hat (um Indexfehler für den nächsten Teil zu vermeiden), und druckt dann denc
achten Buchstaben jedes Wortes ausc
von 0 bis zur Länge jeder Zeichenfolge gegangen wird.Ich habe mir einen viel besseren Weg ausgedacht und 25 Bytes herausgeschnitten. Anstatt Zeichenfolgen mit Leerzeichen aufzufüllen, um den Indexfehler zu vermeiden, behandle ich den Fehler direkt! Wann immer es nichts zu drucken gibt, drucke ich ein einzelnes Leerzeichen an seiner Stelle mit
try:print w[c],
,except:print' ',
. Ich erinnerte mich auch, dass ich zwischen einer print-Anweisung und einem String-Literal kein Leerzeichen brauche, wodurch ein Byte gespart wurde.Beachten Sie, dass Sie in Python 2 Tabulatoren und Leerzeichen mischen können und sie als separate Einzugsebenen betrachten. Der Markdown-Interpreter von SE ersetzt ein Tabulatorzeichen durch vier Leerzeichen, aber jede Zeile dieses Programms mit Ausnahme der ersten enthält genau ein Byte Einrückung.
Die Formatierung war ziemlich einfach, da
print 'something',
Drucke'something '
eher als'something\n'
. Ich habe das für jedes Zeichen gemacht und eine leereprint
Anweisung verwendet, um die neue Zeile dort zu platzieren, wo ich sie brauchte.quelle
C
1111109590 BytesDiese Lösung verwendet VT-100-Steuercodes, um den Cursor auf dem Terminal zu bewegen
Die
^[
Sequenz ist ein Platzhalter für das einzelne ASCII-ESC-Zeichen, das hier nicht angezeigt werden kann.^[7
speichert die aktuelle Zeigerposition^[8
Setzt die Cursorposition auf die gespeicherte Position zurück^[[2C
bewegt sich 2 Schritte nach rechts^[[B
bewegt sich 1 Schritt nach untenedit 1: Der
^[[D
VT-100-Code (1 Schritt links) wurde durch ein Backspace ersetzt (wie^H
hier gezeigt , jedoch nur ein ASCII-Zeichen). habe auch die Anweisung "durch Leerzeichen getrennt" vergessen, die jetzt behoben ist2 bearbeiten:
7 Zeichen, die durch Verwenden einer
for
Schleife anstelle vonwhile
und32
anstelle von gespeichert wurden' '
:8 weitere Zeichen werden durch Aufrufen eines weniger gespeichert
printf
: Der ternäre?:
Operator wird jetzt in denprintf
Parametern verwendet3 bearbeiten:
Wurde die lokale Variable los
s
und arbeitete direkt mitargv
akav
. Das ist total abscheulich. Aber 4 Zeichen gespart. Ersetzt==
mit^
und?:
vertauscht daher die Operanden, um 1 Zeichen mehr zu sparen.Verwendung
Ungolf-Version (erste Version)
Ungolf-Version (letzte Version)
quelle
Ich habe diese Frage vor langer Zeit beantwortet . Eigentlich war es einer meiner ersten Beiträge auf der Website. Ich bin kürzlich wieder darauf gestoßen und war irgendwie verlegen. 112 Bytes ?! Inakzeptabel. Also habe ich es nochmal probiert:
Python 3 - 92 Bytes
In den 109 Tagen, seit ich diese erste Antwort gepostet habe, denke ich, dass ich einen langen Weg zurückgelegt habe. Sogar so etwas wie Python 3 über 2.7 1 wäre mir nicht eingefallen. Mit diesem Code, der auf unter 100 Bytes reduziert ist, kann sich meine Seele endlich ausruhen und ich kann ins Jenseits vordringen.
Erläuterung
Dadurch wird eine Zeile abgerufen
stdin
und eine Liste erstellt, indem diese in Leerzeichen aufgeteilt wird. Das einzige Leerzeichen in der Eingabe ist ein Leerzeichen. In dieser Zeile wird eine Liste mit Wörtern angezeigt.Nehmen wir die zweite Zeile von innen nach außen:
map
Nimmt eine Funktion und eine Iteration als Argumente. Es wendet die Funktion auf jedes Element der Iteration an und gibt eine neue Iteration der Ergebnisse zurück. Hier erstelle ich eine Iterable mit den Längen der einzelnen Eingabewörter.max
Ruft den Maximalwert aus einem iterablen Wert ab. Dies bringt uns das längste Wort in der Eingabe.Ein Listenverständnis ist ähnlich wie
map
. Mit jedem Element einer Iteration wird etwas ausgeführt, und es wird eine Liste mit den Ergebnissen zurückgegeben. Für jedes Wort in der Eingabe mache ichthat_word.ljust(
einen Code)
.ljust
ist die Abkürzung für "left justify". Es nimmt eine Ganzzahl als Argument und fügt der Zeichenfolge Leerzeichen hinzu, bis sie so lang ist.Dies ist ein ordentlicher Trick. In diesem Zusammenhang
*
bedeutet "Entpacken Sie diese iterable als mehrere Argumente". Auf diese Weisezip
kann eine Matrix transponiert werden (zBzip(*[(1,2),(3,4)])
->[(1,3),(2,4)]
). Die einzige Einschränkung besteht darin, dass alle Zeilen in der Matrix gleich lang sein müssen oder Elemente aus allen Zeilen, aber die kürzesten, entsprechend abgeschnitten werden.Wir wissen schon was
map
. Das einzig Neue hier istjoin
, dass eine Folge von Strings iteriert und mit dem Trennzeichen, an das sie angehängt ist, zu einem einzelnen String wird. Zum Beispiel'a'.join(['I', 'can', 'play', 'the', 'saxophone'])
2 wirdIacanaplayatheasaxophone
.Dies
join
nimmt eine Reihe von Zeichenfolgen und trennt sie durch Zeilenumbrüche. Alles, was bleibt, istprint
zustdout
und wir sind fertig!Jetzt alle zusammen:
Finden Sie die Länge des längsten Wortes aus der Eingabe, fügen Sie Leerzeichen an jedes Wort an, bis es die gleiche Länge hat, transponieren Sie mit dem
zip(*
3- Trick,join
trennen Sie jedes Zeichen in einer Zeile mit Leerzeichen,join
und trennen Sie jede Zeile mit einer neuen Zeile. und drucken! Nicht schlecht für die einzige nicht eingabebehandelnde Zeile in einem 92-Byte-Programm.1. Die zusätzlichen Zeichen in
print()
Klammern werden durch die 4 Zeichen, die ich ausraw_input()
-> entferne, aufgewogeninput()
.2. Ich kann eigentlich kein Saxophon spielen.
3.
)
. Bitte.quelle
print("\n".join(...))
zu*map(print,...),
. Probieren Sie es online!05AB1E , Ergebnis
8-20-21 (3029 Bytes - 50 Bonus):Probieren Sie es online aus (normale einzeilige Eingabe).
Probieren Sie es online aus (mehrzeiliger invertierter Eingang).
Erläuterung:
Ursprüngliche 8-Byte-Antwort:
Probieren Sie es online aus.
Erläuterung:
quelle
Mathematica 49
Offensichtlich ist Mathematica nicht das Beste für dieses:
quelle
Javascript, 141
Stichprobe
quelle
GolfScript [41 Bytes]
Wie es funktioniert:
Sie können die Online-Demo hier sehen .
PS: Dies ist mein erster GolfScript-Code, also verurteile mich nicht streng;)
quelle
R 116
quelle
Bash + Coreutils, 54
Ausgabe:
quelle
$()
Konstrukts ist jetzt die übliche Methode für die Befehlssubstitution.APL: 18
Erläuterung:
a ← '', setze ein Leerzeichen vor die Zeichenkette und ordne a zu
'' = finde Leerzeichen, erzeugt einen Booleschen Wert
1 ↓ ¨a⊂⍨ Erstelle Teilstrings, die dort beginnen, wo der Boolesche Wert 1 hat und lösche das erste Element von jedem (also das Leerzeichen).
⍉ ↑ Machen Sie eine Matrix aus den resultierenden Teilzeichenfolgen und kehren Sie sie entlang der Diagonale um
quelle
R , 81 Bytes
Speichern Sie ein Byte, indem Sie eine neue Zeile als speichern
e
, die in beidenscan
Aufrufen, dem Vergleichsaufruf und dem Vergleichsaufruf verwendet werden kanncat
.Probieren Sie es online!
quelle
K (oK) , 26 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
quelle
Python 2.7 -
119106Nehmen Sie 1 - 166. Das Umkehren der Listen war erforderlich, damit Pop in der von mir gewünschten Reihenfolge funktioniert, aber das schien verschwenderisch. Und als ich versuchte, mich zum Spaß zu einem einzigen Verständnis zusammenzuschließen, hat der Pop alles vermasselt.
Nehmen Sie 2 - 119. Also wechselte ich zur einfachen Listenindizierung. Scheint jedoch immer noch klobig zu sein, insbesondere das Auffüllen von Leerzeichen und neuen Zeilen.
Nimm 3 - danke an @grc
quelle
[len(l)for l in w]
zu können verkürzt werdenmap(len,w)
,.split(' ')
auf.split()
und.join([...])
zu.join(...)
.v.pop(0)
um Pop das erste Element anstelle des Letzter?Python 3, 124
quelle
Haskell, 112
Golf gespielt:
Erklärt:
Beispiel:
quelle
JavaScript, 139 (156 mit console.log-Ausgabe)
Ich denke, das ist so gut wie ich es kriegen kann. Ich habe gerade geteilt, das größte Wort gefunden und entsprechend transponiert und Leerzeichen hinzugefügt, wenn das Zeichen in den kürzeren Wörtern nicht vorhanden ist. Mehr als die zuvor übermittelte JavaScript-Antwort, aber diese Antwort scheint nicht zu funktionieren?
quelle
Japt
-R
, 5 BytesVersuch es
Erläuterung
quelle
Pyth, 8 Bytes
Probieren Sie es online!
Ziemlich einfach. Nimmt Eingaben in Anführungszeichen, dh
"Hello World"
quelle
C
schneidet auf die Länge des kürzesten Eintrags ab, dies funktioniert also nicht . Hier ist eine schnelle Lösung, die ebenfalls 8 Bytes umfasst.APL (NARS), 79 Zeichen, 158 Byte
Prüfung:
Die alte Funktion hat nicht perfekt ausgegeben:
quelle