Du weißt nichts Die Dinge, die ich für " Chaos ist eine Leiter " tue, sind eine denkwürdige Zeile aus der Fernsehserie Game of Thrones .
Der Zweck dieser Herausforderung ist es, eine Leiter aus dem Chaos in ASCII-Kunst zu bauen.
Die Herausforderung
Eingang
- Leiterbreite
W >= 3
(Ganzzahl) - Stufenhöhe
H >= 2
(ganze Zahl) - Anzahl der Sprossen
N >= 2
(Ganzzahl).
Ausgabe
Eine Leiter mit horizontalen Sprossen und vertikalen Schienen , alle 1 Zeichen breit. Die Leiterbreite ( W
) enthält die beiden Schienen, und die Stufenhöhe ( H
) enthält die entsprechende Sprosse.
Alle Sprossen, einschließlich der obersten und der untersten, haben ein vertikales Schienenstück mit einer Länge H-1
direkt darüber und darunter. Das Beispiel wird dies verdeutlichen.
Die Leiter besteht aus druckbaren ASCII-Zeichen (ohne Leerzeichen), dh dem Einschlussbereich von !
(Codepunkt 33
) bis ~
(Codepunkt 126
). Die tatsächlichen Zeichen werden nach dem Zufallsprinzip ausgewählt . In Anbetracht der Eingaben muss jede zufällige Auswahl von Zeichen eine Wahrscheinlichkeit ungleich Null haben. Ansonsten ist die Wahrscheinlichkeitsverteilung beliebig.
Führende oder nachfolgende Leerzeichen (horizontal oder vertikal) sind zulässig.
Beispiel
Vorausgesetzt W=5, H=3, N=2
, eine mögliche Ausgabe ist wie folgt.
x :
g h
q$UO{
t T
6 <
bUZXP
8 T
5 g
Beachten Sie, dass die Gesamthöhe gleich ist H*(N+1)-1
, da es N
Sprossen und N+1
vertikale Abschnitte gibt.
Zusätzliche Regeln
Eingabemittel und Format sind wie gewohnt flexibel . Beispielsweise können Sie die drei Zahlen in einer beliebigen Reihenfolge oder in einem Array eingeben, das sie enthält.
Die Ausgabe kann über STDOUT oder ein von einer Funktion zurückgegebenes Argument erfolgen. In diesem Fall kann es sich um eine Zeichenfolge mit Zeilenumbrüchen, ein 2D-Zeichenarray oder ein Array von Zeichenfolgen handeln.
Ein Programm oder eine Funktion kann bereitgestellt werden.
Standardlücken sind verboten.
Kürzester Code in Bytes gewinnt.
Testfälle
Für jede wird W, H, N
eine mögliche Ausgabe angezeigt.
W=5, H=3, N=2:
\ ~
: K
ke:[E
5 u
0 _
8Fr.D
# r
7 X
W=3, H=2, N=2:
$ X
Mb)
0 ]
(T}
j 9
W=12, H=4, N=5:
d Y
P `
5 3
p$t$Ow7~kcNX
D x
` O
* H
LB|QX1'.[:[F
p p
x (
2 ^
ic%KL^z:KI"^
C p
( 7
7 h
TSj^E!tI&TN8
| [
< >
= Q
ffl`^,tBHk?~
O +
p e
n j
W=20, H=5, N=3:
G %
o y
% 3
- 7
U'F?Vml&rVch7{).fLDF
o }
U I
h y
a g
;W.58bl'.iHm\8v?bIn&
, U
N S
4 c
5 r
F3(R|<BP}C'$=}xK$F]^
' h
h u
x $
6 5
Antworten:
Jelly ,
24 2322 BytesEin volles Programm nehmen die drei Argumente
W
,H
,N
und Druck das Ergebnis.Probieren Sie es online!
Wie?
Erstellt eine 2D-Array-Maske aus einem einzelnen Strompfad und seinen vertikalen Abschnitten darunter, wiederholt sie
N+1
und entfernt den oberen Strompfad. Anschließend werden je nach Maskenwert zufällige Zeichen oder Leerzeichen eingefügt.quelle
Operation Flashpoint Skriptsprache,
643624 BytesLächerlich lang, weil es keine Möglichkeit gibt, die Zeichen aus den Zeichencodes zu erstellen.
Rufen Sie an mit:
Ausgabe:
Die Leiter ist besonders chaotisch, da die Schrift nicht monospaced ist.
Abgerollt:
quelle
"\n"
funktioniert,"\xa3"
etwas zu bekommen,£
das nicht funktioniert? Wenn Sie Unicode-Escape-Zeichen verwenden können, können Sie möglicherweise Ihr Array zuschneiden.\n
ist die einzige Flucht, die erkannt wird. (Und""
in Anführungszeichen, um eine darzustellen"
)05AB1E , 29 Bytes
Eingabe erfolgt in der Bestellung
N, H, W
Probieren Sie es online!
Erläuterung
quelle
C 95 Bytes
quelle
R ,
1381291119893 Bytes-13 Bytes dank Neal Fultz!
-1 Byte danke an Robin Ryder
Probieren Sie es online!
Anonyme Funktion; Gibt das Ergebnis als Matrix zurück.
Dank dieser Word Grids-Frage habe ich viel mehr als sonst über Matrizen nachgedacht. Ich habe festgestellt, dass sich die Sprossen in den Matrixzeilen befinden, die ein Vielfaches der Stufenhöhe sind
H
(R ist 1-indiziert), und dass die Schienen die erste und die letzte Spalte sind1
undW
. Also erstelle ich eine Matrix aus zufälligen ASCII-Zeichen, ersetze die Buchstaben, die diesen Kriterien nicht entsprechen, durch Leerzeichen und gebe die Matrix zurück. TIO Link druckt es schön aus.Neal Fultz schlug eine andere Indizierung für die Leerzeichen vor
[-H*(1:N),3:W-1]
, die alle Zeichen mit Ausnahme derjenigen in Zeilen mit Vielfachen vonH
:-H*(1:N)
und nicht am Rand3:W-1
<==> ersetzt2:(W-1)
.R , 121 Bytes
Probieren Sie es online!
Eine Verbesserung gegenüber dem ursprünglichen matrixbasierten Ansatz, mit dem ich begonnen habe; Es ist der gleiche Algorithmus, aber die
for
Schleifen sind kürzer als das Erstellen und Drucken einer Matrix (aber nicht, wenn ich sie nicht drucke!)quelle
m[-H*(1:N),3:W-1]=" "
scheint ein wenig kürzer - Sie können immer testenrow
undcol
mit einem 2-D-Slice ersetzen .sample(33:126,...)
durch32+sample(94,...)
.Perl 5 , 81 Bytes
80 Byte Code + 1 für
-p
.Probieren Sie es online!
quelle
Kohle ,
3432 BytesProbieren Sie es online! Nimmt Eingaben in der Reihenfolge N, H, W vor. Ausführliche Näherung (
Plus(InputNumber(), 1)
wird derzeit bei TIO unterbrochen). Erläuterung:Karte über den Bereich
1..H*(N+1)
. Dies bedeutet, dass die Sprossen erscheinen, wenni
ein Vielfaches vonH
.Verbinden Sie das Ergebnis von:
Abbildung über den impliziten Bereich
0..W
:Wenn die Spalte nicht
0
oderW-1
und die Zeile kein Vielfaches vonH
ist, wird ein Leerzeichen ausgegeben.Nehmen Sie andernfalls die vordefinierte ASCII-Zeichenvariable, kehren Sie sie um (setzen Sie das Leerzeichen an die 94. Stelle) und drucken Sie ein zufälliges Zeichen aus der jetzt ersten 94. (Weil
Slice
saugt)Verbinden Sie mit der leeren Zeichenfolge. Das Endergebnis wird implizit gedruckt.
quelle
NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«
? Nun, ich habe es halbiert und begangena0a6316
.Map
wo er verwendet wurde,not is_command
als er bedeuteteis_command
. Sie sollten also schreiben,NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴
wenn dieser Fehler nicht vorgelegen hätte.C (GCC) ,
141131114109107 BytesSollte in der Lage sein, dies ein bisschen herunter zu spielen ...
Probieren Sie es online!
quelle
i=1
die globale Deklaration bearbeiten ?Perl 6 ,
76,73 BytesProbieren Sie es online!
Nimmt (h, n, w) als Argumente. Gibt eine Liste von Zeichenfolgen zurück.
Erläuterung:
quelle
xx
und++$
anstelle vonmap
. Vielleicht finden Sie einen Platz zum Golfen aus Bytes heraus?PowerShell ,
132 -124 ByteProbieren Sie es online!
Wir bauen eine Leiter, der nur aus
#
erstem ( Beispiel ), dann die Schleife|%{...}
über jedes Zeichen undif
seinen-eq
UAL zu35
, haben wir ein neues ausziehbaresRandom
Zeichen aus dem entsprechenden Bereich. Andernfalls geben wir aus (dh entweder ein Leerzeichen oder eine neue Zeile).quelle
JavaScript (ES6),
117115 ByteEine rekursive Funktion, die die Ausgabe zeichenweise aufbaut.
"Schau, Ma, kein Zeilenvorschub!"
Demo
Code-Snippet anzeigen
quelle
String.fromCharCode
, da ich nicht ehrlich sagen konnte, dass ich mir das selbst ausgedacht hätte, nachdem ich das gesehen hatte. Sagen Sie mir Bescheid, wenn Sie der Meinung sind, dass meine jetzt zu ähnlich zu Ihrer ist.Python 2 , 142 Bytes
Probieren Sie es online!
Gespeicherte Bytes dank ovs!
quelle
1
in der Front> _>Pyth, 33 Bytes
Probieren Sie es online aus: Demonstration
quelle
Python 2 , 114 Bytes
Probieren Sie es online!
quelle
SOGL V0.12 ,
3231 BytesProbieren Sie es hier aus!
Eingabe in der Reihenfolge N, W, H.
Erläuterung:
18 Bytes ohne die zufälligen Zeichen: /
quelle
Java 8,
203188168133132130128126 BytesProbieren Sie es online!
quelle
W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
W-1
, die innere Schleife muss eine zusätzliche Iteration durchführen (>=0
+1 Byte).W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
;++i<H*N+H;
: -2 Bytes.Haskell ,
226220211190 BytesProbieren Sie es online!
9 Bytes dank Laikoni gespart
21 Bytes dank wchargin eingespart
Sollte golffähig sein (
b$(s w)<$[2..h]
undb$((s w)<$[2..h])++[r w]
). Ich fühle mich mit IO und Golf nicht wohl.quelle
t w h n= ...
:(w#h)n= ...
.pure
kann anstelle von verwendet werdenreturn
. Sie können die Klammern um(d ' ')<$
und setzen(s w)<$
.c=randomRIO('!','~')
, damit Sie auch inline arbeiten könnend=return
. Ist auchmapM id
ein Byte kürzer alssequence
.JavaScript (ES6), 144 Byte
Erstellt die Leiter aus
#
Zeichen und ersetzt jedes durch ein zufälliges ASCII-Zeichen.Testschnipsel
Code-Snippet anzeigen
quelle
String.fromCharCode
undMath.random
in einer Lösung - warum hasst uns JavaScript ?! Kam mit bis diese für 137 Bytes, die zu Ihnen sehr ähnlich ist, nur ohne das Array. Ich frage mich jetzt, ob eine rekursive Lösung noch kürzer sein könnte. werde später nachforschen.JavaScript (ES6),
129117 ByteLeider schlug Arnauld mich zu einer ähnlichen, aber kürzeren Lösung . Durch die Kombination unserer beiden Lösungen können dies 113 Byte sein
Beinhaltet einen nachgestellten Zeilenumbruch.
Versuch es
quelle
Japt
-R
,42414037342825 BytesÜbernimmt die Eingabe in der Reihenfolge
H,W,N
.Versuch es
quelle
QBIC , 76 Bytes
Erläuterung
Probelauf
quelle
MATL ,
6350 Bytes-13 Bytes dank Luis Mendo
Probieren Sie es online!
Ich bin noch neu im Golfspielen in MATL (und ich bin in MATLAB nicht besonders gut), daher weiß ich, dass dies wahrscheinlich nicht annähernd optimal ist. Trinkgelder sind willkommen. Nimmt die Eingabe in der angegebenen Reihenfolge vor
N,H,W
.Auf geht's:
Wir haben jetzt eine Matrix von zufälligen Zeichen.
Jetzt gibt es auch eine logische Matrix für die Schienen.
Jetzt haben wir 3 Matrizen auf dem Stapel:
Also machen wir folgendes:
quelle
X"
ist3$
standardmäßig eingestellt.6Y2
kann praktisch sein , statt13:106
...20+
.~~
istg
.J3G&Ol5LZ(
kann anstelle von1F3G2-Y"h1hJT3$X"
X"
. In diesem letzten Tipp5L
steht,[1 0]
aber ich bin nicht sicher, wie das in Verbindung mit verwendet wirdZ(
-1
ich verstehe , dass es der ersten und der letzten Spalte zugewiesen ist, aber ich verstehe nicht, wie5LZ(
dies erreicht wird. Ich werde Sie wahrscheinlich später in MATL CHATL anpingen, also machen Sie sich vorerst keine Sorgen.0
"end".Z(
Ordnet Spalten zu. Natürlich kannst du mich gerne im Chat anpingen!Powershell, 102 Bytes
Weniger Golf-Testskript:
Ausgabe:
quelle
Ruby , 71 Bytes
BEARBEITEN: Hoppla, ich dachte, dies sei eine neue Herausforderung, da kürzlich ein Tippfehler behoben wurde. Ich lasse das aber immer noch offen, weil es noch keine Ruby-Antwort darauf gibt.
Probieren Sie es online!
quelle