Schreiben Sie ein Programm oder eine Funktion, die zwei positive Ganzzahlen, eine Breite und eine Höhe, verwendet und ein ASCII-Art- Hahnentritt- Gittermuster mit diesen Abmessungen zeichnet, wobei dieses 25 × 26-Textgitter als Basiszelle verwendet wird:
.......#.....#####.......
.......##.....#####......
.......###.....#####.....
.......####.....####.....
.......#####.....###.....
.......######.....##.....
.......#######.....#.....
.......########..........
####################.....
.####################....
..####################...
...####################..
....####################.
.....####################
#.....##############.####
##.....#############..###
###....#############...##
####...#############....#
#####..#############.....
.#####.#############.....
..##################.....
........#####............
.........#####...........
..........#####..........
...........#####.........
............#####........
Wenn also die Eingabe 2,1
die Ausgabe wäre, wäre dies:
.......#.....#####..............#.....#####.......
.......##.....#####.............##.....#####......
.......###.....#####............###.....#####.....
.......####.....####............####.....####.....
.......#####.....###............#####.....###.....
.......######.....##............######.....##.....
.......#######.....#............#######.....#.....
.......########.................########..........
####################.....####################.....
.####################.....####################....
..####################.....####################...
...####################.....####################..
....####################.....####################.
.....####################.....####################
#.....##############.#####.....##############.####
##.....#############..#####.....#############..###
###....#############...#####....#############...##
####...#############....#####...#############....#
#####..#############.....#####..#############.....
.#####.#############......#####.#############.....
..##################.......##################.....
........#####....................#####............
.........#####....................#####...........
..........#####....................#####..........
...........#####....................#####.........
............#####....................#####........
Und wenn die Eingabe 5,4
die Ausgabe wäre, wäre dies:
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
.......#.....#####..............#.....#####..............#.....#####..............#.....#####..............#.....#####.......
.......##.....#####.............##.....#####.............##.....#####.............##.....#####.............##.....#####......
.......###.....#####............###.....#####............###.....#####............###.....#####............###.....#####.....
.......####.....####............####.....####............####.....####............####.....####............####.....####.....
.......#####.....###............#####.....###............#####.....###............#####.....###............#####.....###.....
.......######.....##............######.....##............######.....##............######.....##............######.....##.....
.......#######.....#............#######.....#............#######.....#............#######.....#............#######.....#.....
.......########.................########.................########.................########.................########..........
####################.....####################.....####################.....####################.....####################.....
.####################.....####################.....####################.....####################.....####################....
..####################.....####################.....####################.....####################.....####################...
...####################.....####################.....####################.....####################.....####################..
....####################.....####################.....####################.....####################.....####################.
.....####################.....####################.....####################.....####################.....####################
#.....##############.#####.....##############.#####.....##############.#####.....##############.#####.....##############.####
##.....#############..#####.....#############..#####.....#############..#####.....#############..#####.....#############..###
###....#############...#####....#############...#####....#############...#####....#############...#####....#############...##
####...#############....#####...#############....#####...#############....#####...#############....#####...#############....#
#####..#############.....#####..#############.....#####..#############.....#####..#############.....#####..#############.....
.#####.#############......#####.#############......#####.#############......#####.#############......#####.#############.....
..##################.......##################.......##################.......##################.......##################.....
........#####....................#####....................#####....................#####....................#####............
.........#####....................#####....................#####....................#####....................#####...........
..........#####....................#####....................#####....................#####....................#####..........
...........#####....................#####....................#####....................#####....................#####.........
............#####....................#####....................#####....................#####....................#####........
- Das width-Argument muss an erster Stelle stehen. Jedes vernünftiges Eingabeformat (zB
w,h
,w h
,(w, h)
) ist in Ordnung. - Drucken Sie das Ergebnis aus oder geben Sie es mit einem optionalen Zeilenumbruch zurück.
- Sie können anstelle von und zwei beliebige druckbare ASCII- Zeichen verwenden .
.
#
- Sie können die Basiszelle vertikal oder horizontal so verschieben, als ob sie periodische Randbedingungen hätte . Daher ist die linke obere Ecke der Ausgabe nicht unbedingt ein 7 × 8-Rechteck
.
. ( Neue Regel! )
Der kürzeste Code in Bytes gewinnt.
Als Bonus generieren Sie stattdessen ein Bild, bei dem jedes .
Pixel einer Farbe und jedes #
Pixel einer anderen Farbe ist.
code-golf
ascii-art
kolmogorov-complexity
Calvins Hobbys
quelle
quelle
Antworten:
Pyth,
61605549 BytesProbieren Sie es online aus: Demonstration
edit 1: Kombiniere die beiden Anweisungen, die das Band und das Dreieck erzeugen (siehe unten)
edit 2: Habe nicht gesehen, dass wir irgendwelche Symbole verwenden können. Gespeicherte 5 Bytes bearbeiten
edit 3: @ Calvin'sHobbies erlaubt das Übersetzen des Basisbildes. Da mein Ansatz auf dieser Idee beruhte, hat dies sehr geholfen. -6 Bytes
Und für den Cookie-Bonus :
Dies ist nur 2 Bytes länger (51 Bytes) und generiert die Datei
o.png
. Für die Eingabe5\n4
wird folgendes Bild erzeugt:Erläuterung:
Das Hahnentrittmuster sieht wirklich ziemlich unregelmäßig aus. Wenn wir aber die linken 7 Spalten nach rechts und die oberen 5 Zeilen nach unten bringen, erhalten wir ein viel schöneres Muster:
Zuerst produziere ich den oberen linken 13x13 Block:
Es gibt 2 einfache Ungleichungen, die die beiden
#
Bereiche beschreiben. Das Band kann beschrieben werden durchy + 1 <= x <= y + 5
und das Dreieck kann beschrieben werden durchx <= y - 5
. Ich habe diese beiden Bedingungen kombiniert:Dann
+Rm012
fügt 12 Nullen am Ende jeder Reihe, den oberen 25x13 Block zu erhalten.Der untere 25x13 Block ist jetzt ganz einfach:
Jetzt müssen Sie nur noch das Muster wiederholen und ausdrucken
Der Unterschied zum Cookie-Bonuscode :
255
anstatt1
mjk*Qd
ich benutze*RQ
, da ich keinen string will.w
speichert dieses 2D-Array in einer Datei (konvertiert es implizit in PNG)quelle
CJam,
1067371 BytesDruckt
1
und0
anstelle von.
und#
. Probieren Sie es online im CJam-Interpreter aus .Wie es funktioniert
Cookie-Bonus
druckt eine tragbare BitMap anstelle von ASCII-Grafiken.
Unten sehen Sie die Ausgabe für die Eingabe
24 13
, die in PNG konvertiert wurde:quelle
Befunge-93 ,
21201967 BytesHier ist ein paar hochqualitative Probleme mit der Ausnahmebehandlung für das Debuggen!
(Offensichtlich ist dies immer noch sehr golfen. Ich wollte hier erst einmal eine Antwort bekommen.)
Das setzt sich also aus verschiedenen Teilen zusammen.
Dies ist nur der Initialisierer, der die Werte aufnimmt und speichert
In diesem Abschnitt wird die Zeilenzahl zurückgesetzt, damit wir weitere (breite) Bilder nebeneinander ausdrucken können.
94+2*
berechnet 26, die Anzahl der Zeilen. Wenn die Höhe Null ist, wird das Programm ebenfalls beendet.Dadurch wird die Breite des Stapels ermittelt, sodass wir wissen, wie viele gedruckt werden müssen
Dies fügt dem Stapel zwei Dummy-Werte hinzu, um festzustellen, wann wir eine Operation beendet haben und in welcher Zeile (n) wir uns befinden. Dadurch werden dem Stapel n Werte hinzugefügt
Dies ist ein Steuerabschnitt, der zur Zeile (26-n) führt. Dies ist der einfachste Weg, um herauszufinden, wie es geht.
Dies wird offensichtlich gelesen und wird jede Zeile, die auf dem Stapel gelesen wird, rückwärts platzieren. Das heißt, wenn wir es herausnehmen, wird es richtig gedruckt.
Dies wird gedruckt, bis der Stapel eine 0 erreicht, die wir zuvor verlassen haben.
Dabei wird 1 von der Nummer der zu druckenden Zeile abgezogen und dann geprüft, ob sie Null ist oder nicht. Wenn es nicht Null ist, kehren wir zum vierten Codeblock zurück.
Dies subtrahiert 1 von der Zeile (n), druckt eine neue Zeile und kehrt zu Block 3 zurück
Nachdem alle Zeilen gedruckt wurden, wird eine Zeile von der Anfangshöhe abgezogen und zu Block 2 zurückgekehrt.
Der gesamte Rest des Codes ist entweder Kontrollfluss oder Stapelverwaltung. Schreibe dieses mas mehr, als ich gedacht habe, aber ich bin zufrieden damit, wie es aussieht. Es ist viel mehr Golf, und das wird wahrscheinlich ein Projekt für einen weiteren Tag bleiben.
2120 -> 1967 : Einige Zeilen mit viel verschwendetem Platz verkleinert
quelle
Perl, 243
(Ein Byte hinzugefügt, damit der
-n
Switch die Eingabe von stdin abruft.)Dies ist ziemlich einfach - alles, was Sie tun müssen, ist ein Array von 26 Hex-Zahlen in Binärzahlen umzuwandeln und sie so oft wie erforderlich auszudrucken.
Beispiel:
Eingang:
Ausgabe:
quelle
Rev 1, C,
118115 BytesDurch die neue Regel, die die Übersetzung der Zelle ermöglicht, wurden 9 Byte eingespart. 3 Bytes gespeichert durch Verwendung von
w*=25
. Der Rest der Post bleibt unverändert.Rev 0, C, 127 Bytes
Dies durchläuft die Zeichen und druckt sie einzeln aus.
i%(25*w)||puts("")
Fügt am Ende jeder Zeile eine neue Zeile ein.Ich betrachte das Design ähnlich wie Jakube, aber ich bringe die oberen 8 Zeilen nach unten und die 5 rechten Spalten nach links, um die folgende Ansicht zu erhalten. Im Programm wird dieser Schritt durch
+20
und+8
in den Ausdrücken für x und y "umgekehrt" .Abgesehen von der "Umkehrung der Farben" mag es sehr ähnlich aussehen, aber es gibt einen wichtigen Unterschied: Die diagonalen Streifen stimmen überein. (Beachten Sie, dass das ursprüngliche Design keine diagonale Symmetrie aufweist, da es 25 x 26 misst.)
Der Ausdruck
((y>x^y>x+5^x>y+4)^y/13)+34
erzeugt das Folgende, wobei die verschiedenen Vergleichsoperatoren die Streifen erzeugen, die^y/13
"Farbumkehrung" auf halber Höhe erzeugt und+34
die resultierende Zahl0,1
auf den ASCII-Bereich erhöht34,35
.Der Term
&y/13==x/13
ergibt oben rechts und unten links false = 0, wodurch der quadratische Teil des Musters wie oben gezeigt erzeugt wird. Beachten Sie, dass sich der Ursprung x = y = 0 unten rechts befindet, da das Programm herunterzählt. Dies ist praktisch, da das Quadrat aus#
13 Zeichen und das Quadrat aus"
nur 12 Zeichen besteht.quelle
Befunge -93, 968 Bytes
Ja, das ist richtig! Eine konkurrierende Antwort von Befunge!
Erklärung morgen, Bett jetzt. Ich werde jedoch sagen, dass ich kluge Sachen mit dem Verschieben einiger Umleitungspfeile mache und die Wrap-Around-Eigenschaft auch ziemlich oft benutze. Testen Sie es in diesem Online-Dolmetscher .
quelle