Ziel dieser Herausforderung ist es, eine ASCII-Version des Covers dieses großartigen Albums der Rockband Pink Floyd zu produzieren.
Die Ziegelknoten bestehen aus Zeichen _
und |
. Steine haben eine Breite von 7 und eine Höhe von 2 Zeichen, ausgenommen Kreuzungen. Die Basiseinheit, einschließlich der Verbindungsstellen, ist also:
_________
| |
| |
_________
Jede Ziegelreihe ist gegenüber der vorherigen um eine halbe Ziegelbreite (4 Zeichen) versetzt:
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
Die Wand wird wie folgt parametriert . Alle Parameter werden in Zeichen einschließlich Übergängen gemessen:
- Horizontal - Offset der ersten Zeile
F
. Dies ist der Abstand zwischen dem linken Rand und der ersten vertikalen Verbindung der obersten Reihe. (Denken Sie auch an den relativen Versatz von Ziegeln zwischen den Zeilen). Seine Werte sind möglich0
,1
...,7
. - Gesamtbreite ,
W
. Dies schließt Knotenpunkte ein. Sein Wert ist eine positive ganze Zahl. - Gesamthöhe ,
H
. Dies schließt Knotenpunkte ein. Sein Wert ist eine positive ganze Zahl.
Die Oberseite der Wand fällt immer mit der Oberseite einer Reihe zusammen. Der Boden kann zerlumpt sein (wenn die Gesamthöhe nicht ein Vielfaches von ist 3
). Zum Beispiel ist hier der Ausgang für 6
, 44
, 11
:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
und eine visuelle Erklärung der Parameter:
F=6
......
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
H=11 . | | | | | |
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
............................................
W=44
Zusätzliche Regeln
Sie können ein Programm oder eine Funktion bereitstellen.
Das Eingabeformat ist wie gewohnt flexibel. 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 oder ein Array von Zeichenfolgen handeln.
Leerzeichen oder Zeilenumbrüche sind erlaubt.
Kürzester Code in Bytes gewinnt.
Testfälle
Die Eingaben erfolgen in der oben angegebenen Reihenfolge, dh horizontaler Versatz der ersten Reihe, Gesamtbreite, Gesamthöhe.
6, 44, 11:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
2, 20, 10:
____________________
| | |
| | |
____________________
| |
| |
____________________
| | |
| | |
____________________
1, 1, 1:
_
1, 2, 3:
__
|
|
3, 80, 21:
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
Antworten:
Pyth,
4327 BytesIch muss heftig Golf spielen ... der Score ist zu beschämend.
Probieren Sie es schon online aus.
Eingabeformat
Ausgabeformat
Erläuterung
quelle
C
86858382 Bytes3 Bytes gespart dank Lynn.
1 Byte gespart dank Charlie.
quelle
for(i=0;++i<w*h;)
oder wenni
lokal gemacht wird (param Trick):for(;++i<w*h;)
i;
durchi=1;
und speichern Sie ein weiteres Byte in der for-Schleife.for(i=1;i<w*h;++i)
->for(i=0;++i<w*h;)
spart 1C 92 Bytes
Aufrufen als
b(F, W, H)
.quelle
Perl, 63 Bytes
Wenn Sie den Shebang als 2 zählen, wird die Eingabe von stdin mit Leerzeichen getrennt vorgenommen.
Beispielnutzung
quelle
Haskell, 83 Bytes
Dies definiert eine ternäre Infix-Funktion,
!
die eine Liste von Zeichenfolgen zurückgibt. Anwendungsbeispiel:Wie es funktioniert:
quelle
JavaScript (ES6),
96 bis95 ByteErläuterung: Erstellt eine Zeichenfolge aus den sich wiederholenden 7 Leerzeichen plus
|
Muster oder nur aus den wiederholten_
s, die jedoch mindestens so lang ist, dassw
die für jede Zeile erforderlichen Zeichen extrahiert werden können . Die ersten drei Zeilen beginnen an der Positionf^7
und die nächsten drei Zeilen beginnen an der Positionf^3
. Dies erreiche ich, indem ichBit 2umschalte und das gegenüberliegende Bit 2 in den letzten beiden Zeilen jedes 6er-Blocks zum Speichern von 1 verwende Byte.f
in jeder dritten Zeilequelle
MATL,
423633 BytesEingabeformat ist:
nCols
,offset
,nRows
Probieren Sie es online
Der Ansatz hier ist, dass wir eine "Vorlage" einrichten, in die wir dann mithilfe der Zeilenindizes (
[1 2 ... nRows]
) und Spaltenindizes, die um die erste Eingabe ([1 2 ... nCols] - shift
) verschoben wurden, indexieren . Dank der modularen Indizierung von MATL wird automatisch eine gekachelte Ausgabe erstellt. Als Randnotiz, um etwas Platz zu sparen, arbeite ich technisch mit einer transponierten Version der Vorlage und nehme dann einfach eine transponierte (!
) am Ende.Die Vorlage lautet wie folgt:
quelle
Python 2,
9388 BytesDie zweite Einrückungsebene ist die Registerkarte.Ein paar Bytes sparen dank Leaky Nun und einigen eigenen Änderungen, auch jetzt korrekter Versatz:vorheriger Code:
Gleiche Länge wie unbenanntes Lambda:
quelle
F,W,H=input()
print
h/3%2*4
oderh%6/3*4
anstelle von4*(h%6>3)
print
Aussage einfach in die gleiche Zeile wie diefor
Aussage"| "
ist kürzer als("|"+7*" ")
wenn ich richtig zähleQBasic,
121109 Bytes(Getestet auf QB64)
Vielen Dank an @DLosc, dass Sie meine
IF
Aussage mit einem mathematischen Äquivalent bewertet haben . Das war 12 Bytes wert.Allgemeine Methode:
Schleife durch jede Zelle einer nach dem anderen und bestimmen , ob es eine sein sollte
_
,oder
|
auf dessen Lage abhängig.MOD
Anweisungen und Boolesche Logik werden verwendet, um die Ziegelgrenzen zu bestimmen und um wie viel die Ziegel versetzt werden sollen.Code:
Anwendungshinweis:
QBasic erwartet, dass Eingaben durch Kommas getrennte Zahlen sind.
quelle
IF
/THEN
fügt noch mehr Klammern hinzu, spart jedoch 12 Bytes:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
Java,
149,147,146, 143 BytesGolf gespielt:
Ungolfed:
quelle
> 0
der zwei Zeichen gespeichert werden könnten. Und natürlich können Sie die Deklarationen zu kombinierenint y=0,x
.int
vor dem entfernenx
undint y=0,x
in der ersten for-Schleife stattdessen 2 Bytes sparen. Auch zur Zeit können Sie Ihre änderny%3==0
zuy%3<1
. (Dies ist nicht möglich ,...%8==0
zu...&8<1
obwohl, da Ihr Betrieb eine negative Zahl zurückkehren konnte.)int...o
als Parameter verwenden und stattdessenw
zuo[1]
,h
zuo[2]
undo
zuo[0]
-3 Bytes wechseln .Rubin,
7266 BytesDanke @Value Ink für 6 Bytes!
Einfache String-Multiplikation und -Aufteilung.
Funktioniert in Ruby 2.3.0 (Ideones Version 2.1 warf einen Syntaxfehler).
quelle
i%6/4*4
anstelle von(i%6>3?4:0)
und verwenden Sie?_
anstelle von'_'
,?|
anstelle von'|'
.?
einzelnen Zeichentrick vergessen und der Teil "Mathe" ist wirklich beeindruckend!((' '*7+?|)*w)[f^7^i%6&4,w]
spart Ihnen zwei Bytes.Julia:
150128116108107 Bytesmit Argumenten laufen:
julia -e 'o=2;h=18;w=40;include("codegolf.jl")'
Wenn Sie das Gefühl haben, dass der Aufruf von bash betrügt und Sie eine Funktion innerhalb des Interpreters möchten, dann ist die Funktionsversion 117 Bytes :)
Demo
(Danke, @ glen-o für den zusätzlichen Byte-Spartipp!)
quelle
h
undw
in Ziegeln, nicht in Zeichenrepmat([32],6,8)
) verwenden und repmat dann umbenennen, um ein anderes Zeichen (g=repmat;b=g([32],6,8)
und späterb=g(b,h,w)[1:h,o+1:o+w+1]
) zu rasieren . Dann ersetzenreinterpret
mitmap
. Nach meiner Zählung sparen Sie 9 Bytes zwischen diesen Änderungen.JavaScript,
172168165157147142137 Bytesquelle
s.repeat(w)
statt verwendenArray(w).fill(s).join``
?Dyalog APL, 29 Bytes
↑⎕⍴⎕⍴¨a,4⌽¨a←'_',2⍴⊂⌽⎕⌽¯8↑'|'
Tests:
6 44 11
,2 20 10
,1 1 1
,1 2 3
,3 80 21
⎕
wird Eingabe ausgewertet; als Ausdruck von rechts nach links ausführt, fordert esF
,W
undH
in dieser Reihenfolge¯8↑'|'
ist' |'
⎕⌽
rotiert, schneidet F-Zeichen von vorne und setzt sie am Ende der Zeichenkettedas andere
⌽
bedeutet umgekehrt'_',2⍴⊂
Erstellt ein 3-Tupel von '_', gefolgt von zwei separaten Kopien der Zeichenfolgea,4⌽¨a←
Füge die 4-Rotation von allem hinzu, bis dahin erhalten wir ein 6-Tupel⎕⍴¨
Verändern Sie die Breite jedes Elements⎕⍴
auf die Höhe umformen↑
Vektor von Vektoren in eine Matrix mischenquelle
Eigentlich ,
444340 BytesDies ist ein tatsächlicher Port des Algorithmus in Neils JS-Antwort . Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing:
quelle
PowerShell ,
10188 ByteProbieren Sie es online!
quelle
Oktave
8076 Bytesvom Terminal aus laufen:
octave --eval "o=2;h=18;w=44; codegolf"
(alternativ, wenn Sie glauben, dass der Terminal-Aufruf schummelt: p, dann benötigt eine anonyme Funktionsimplementierung 86 Bytes :)
Rufen Sie
f(2,18,44)
den Oktav-Interpreter an.quelle
Bash + Sed,
411395381370 Bytes:Hier ist meine allererste Antwort in Bash oder einer anderen Shell-Skriptsprache. Dies ist auch bei weitem die längste Antwort hier. Übernimmt eine Folge von durch Leerzeichen getrennten Befehlszeilenargumenten im Format
Offset Width Height
. Dies kann wahrscheinlich viel kürzer sein als es derzeit ist, so dass alle Tipps und / oder Tricks zum Golfspielen mehr geschätzt werden.quelle
Delphi / Object Pascal,
305,302, 292 BytesVolles Konsolenprogramm, das 3 Parameter liest.
ungolfed
Leider hat Delphi keinen ternären Operator und es ist eine ziemlich ausführliche Sprache.
Testfall
Bearbeiten: Konnte 3 Bytes sparen, indem Byte als Typ für alle Variablen verwendet wurde.
Bearbeiten 2: Und Konsolenanwendungen nicht brauchen die Programmdeklaration, -10
quelle