Hier ist ein ASCII- Saltine-Cracker :
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Hier sind zwei gestapelte Cracker:
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Schreiben Sie das kürzestmögliche Programm, das eine positive ganze Zahl enthält und einen Stapel dieser vielen ASCII-Saltine-Cracker zeichnet.
Die Eingabe kann über stdin oder die Befehlszeile erfolgen, oder Sie können einfach eine Funktion schreiben. Die Eingabe ist immer gültig. Die Ausgabe muss auf stdout oder die nächstgelegene Alternative erfolgen.
Jeder gestapelte Cracker wird immer 2 Zeichen nach unten und 7 Zeichen rechts vom Cracker darunter verschoben. Es sollten keine nachgestellten Leerzeichen oder überflüssigen Zeilenumbrüche vorhanden sein.
Das kürzeste Programm in Bytes gewinnt.
Beispiele
Wenn der Eingang 1
der Ausgang ist
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Wenn der Eingang 2
der Ausgang ist
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Wenn der Eingang 3
der Ausgang ist
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . __________|______
| . | . | . . . |
|______| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Und so weiter.
quelle
___|___
statt_______
. Ich vermute, es würde komisch aussehen, wenn es das letztere wäreAntworten:
CJam,
140125119116 BytesProbieren Sie es online aus.
Ein einziges Salz
Das Code-Snippet
Lässt Folgendes auf dem Stapel:
Gestapelte Saltine
Angenommen, das Salz von oben ist in Z gespeichert.
quelle
JavaScript (E6) 249
259 289 304 345Nicht so sicher über die Saitenkomprimierung.Fand eine gute Kompression für die Saiten.Der einfache 1-Cracker-Fall scheint schwierig zu handhaben zu sein. Es könnte einen besseren Weg geben ...Mehr oder weniger ungolfed
Das ist der Grundcode, bevor ich mit dem Golfen anfing. Es ist nicht genau das gleiche und funktioniert nur für n> 2
Test In FireFox / Firebug - Konsole
Ausgabe
quelle
Python,
252241 ZeichenVielen Dank an FryAmTheEggman und Vincent für das Abschneiden von 11 Charakteren.
Ein Übergewicht an Crackern:
Dieser Code scheint wirklich ineffizient zu sein, aber andere Antworten werden es zeigen. Es kopiert einfach den Saltine Cracker und fügt ihn an der richtigen Stelle in ein Array ein. Der unterste Cracker weist ein Zeichen weniger auf und druckt dann alles aus.
Ich kann es auf 230 Zeichen reduzieren, wenn ich eine externe Datei verwende (202 Code + 38 Dateigröße + 1 Dateiname).
quelle
n=1 upto 2^10
damit wir sicher sein können, dass Ihr Programm wirklich das Richtige tut.list(' '*(7*N+12))
könnte sein[' ']*(7*N+12)
.G=[list(' '*(7*N+12))for _ in R(2*N+5)]
mitG=map(list,[' '*(7*N+12)]*(2*N+5))
Perl 189
Ich habe ein paar Ideen zur Komprimierung von Saiten aus dem Choroba gestohlen und Folgendes herausgefunden:
Zur einfacheren Anzeige in Ihrem Browser:
Zum Kontext, mein bestes davor:
Perl 207
Hinzufügen von Zeilenumbrüchen und Einrückungen, um das Lesen in Ihrem Browser zu erleichtern:
Sie können "pop" durch "<>" ersetzen, um die Zählung von STDIN anstelle eines Befehlszeilenparameters zu übernehmen und 206 Byte zu erhalten. Wenn Sie zu STDERR wechseln, wird der Wert auf 204 Byte reduziert.
Wenn ich die "Sagen" -Funktion ohne eine Byte-Strafe aktivieren könnte, könnte ich zu 202 gelangen.
aufgerufen als:
quelle
say
ohne Strafe durchführen, da dies mit der Ausführung in der Befehlszeile mit-E
anstelle von identisch ist-e
.perl -E''
zählt nicht zu deinen Gesamtcharakteren._|_
.Perl 201
(Entfernen Sie Zeilenumbrüche mit Ausnahme der ersten, die das # erhalten)
say
+<>
= 198.quelle
Haskell, 215 Bytes
Dieser baut den Cracker-Stack induktiv auf und zieht Cracker-Teile und Abstände aus ein paar zyklischen Listen heraus:
Der Kontrollfluss ist ziemlich einfach; Der größte Trick besteht darin, so viele Crackerteile wie möglich wiederzuverwenden.
Ungolfed:
quelle
Python, 299
Ich dachte, ich wäre schlau, aber die Lösung erwies sich als übermäßig kompliziert und länger als jeder einfache Ansatz, aber ich konnte nicht widerstehen, sie zu posten. Das Programm berechnet explizit, welches Zeichen an den verschiedenen Positionen der Ausgabezeichenfolge gezeichnet werden muss, ohne die einzelnen Cracker in einer Schleife zu durchlaufen.
Und die letzte Zeile wurde erweitert, um zu sehen, was los ist:
quelle
C 284
Für die Funktion
f
und die#define
s, ohne unnötige Leerzeichen undmain
. Entsprechend dem Kommentar von edc65 habe ich einen 128-Bit-Integer-Typ eingefügt (was ich sowieso tun wollte), aber ich habe mich erneut verrechnet und ich kann nur 29 Cracker ausführen, bevor die Spitzen verschwinden.Vollständige Funktion und Testprogramm unten. Werde es später kommentieren.
Die Ausgabe enthält nur vier verschiedene Zeichen. Diese werden aus den Binärzahlen 0-3 von decodiert
" _.|"
. Das Arrays[]
enthält eine Ganzzahl für jede Spalte der Ausgabe, 2 Bits pro Symbol, die initialisiert wird, um den Cracker ganz rechts zu enthalten.Der Erste
for
Schleife kopiert den vorherigen Cracker, verschiebt ihn nach links, um ihn nach oben zu verschieben, löscht die untere rechte Ecke mit&
und ODER-Verknüpfung mit dem vorherigen Cracker, 7 Schritte nach links.Der Zweite
for
Schleife decodiert die 2-Bit-Darstellung jedes Zeichens in das tatsächliche Zeichen und druckt das Zeichen. Es gibt hier eine Menge Code, um unnötige Leerzeichen in der Ausgabe zu unterdrücken. Ich bin enttäuscht, dass meine Punktzahl gegenüber meiner vorherigen Überarbeitung gestiegen und nicht gesunken ist.Ausgabe
Das sind 29 Cracker. Ich habe das Leerzeichen durch ein ersetzt,
-
um ein anderes Aussehen zu erhalten und um zu zeigen, dass in der Ausgabe keine nachgestellten Leerzeichen oder überflüssigen Zeilenumbrüche enthalten sind.quelle
JavaScript (ES6) HTML5 - 233
236BytesWahrscheinlich keine gültige Antwort, aber ich konnte einfach nicht widerstehen, es tut mir leid :-P
Test in Firefox mit
F(1)
,F(2)
,F(3)
etc.Beispiel: http://jsfiddle.net/Lvmg9fe8/7/
quelle
F(1)
oder eine andere Zahl, nachdem Sie diesen Code in JS - Konsole in Firefox ... eingegeben haben