Schreiben Sie das kürzeste Programm, das eine einzelne Ganzzahl als Eingabe verwendet und einen Suanpan-Abakus ausgibt
Testfälle
Eingang:
314159
Ausgabe:
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|
Eingang:
6302715408
Ausgabe:
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Antworten:
J,
126124121119116115113105116115112 ZeichenÜbernimmt Eingaben von der Tastatur. Beispiel:
Der Haupttrick dabei ist der Missbrauch von Js Boxen durch Neudefinition der verwendeten Zeichen. Es verwendet einen globalen Parameter -
9!:7
- dies zu tun. Es mag Raum für weiteres Golfen geben, aber um ehrlich zu sein, war ich nur froh, dass etwas funktionierte, das meinen letzten Versuch mit dieser Frage kompensieren sollte .Passt in einen Tweet mit genügend Zeichen, um "Gaz made this" zu sagen :-).
Bearbeiten: 3 Zeichen Einsparungen sind auf die Ausleihe
2 6$' || (__)'
von Jesse Millikans Antwort zurückzuführen.Weitere Bearbeitung: Es sind 11 Zeichen verloren gegangen, die zusätzliche Leerzeichen an beiden Seiten hinzugefügt haben, von denen ich nicht bemerkt habe, dass sie nicht vorhanden sind.
Erläuterung:
Der Code besteht aus drei Hauptabschnitten:
1) Setup
Dies ist selbst in zwei Teile.
9!:7'\=/<=>/=\|='
Definiert die Zeichen, die J zum Anzeigen von Feldern verwendet, neu. Js Boxen sieht normalerweise so aus:aber nach der Neudefinition sieht es so aus:
(s=:[,.~,.)
definiert ein Verb, das ich später ein paar Mal verwenden werde. Dies erweist sich als der beste Ort, um es zu deklarieren. Es nimmt ein Zeichen auf der linken Seite und ein Array von Zeichen auf der rechten Seite und schiebt das Array zwischen die Zeichen. Beispielsweise:Das Finale
[
dient nur dazu, das Setup vom nächsten Teil zu trennen.2) Eingabe und Darstellung
".,.1!:1[1
Nimmt die Eingabe von der Tastatur und trennt sie in einzelne Ziffern:((i.5)</5|])
Erstellt eine Null- und eine Einsdarstellung des unteren Teils des Abakus:|:@(1,.<&5)
Erstellt eine Nullen- und Eine-Darstellung des oberen Teils des Abakus:Diese beiden Teile sind wie folgt zusammengepackt
;
:Dann werden die Kästen übereinander gelegt, um die Basis des Abakus zu bilden, was ergibt:
3) Ausgabe
&.>
bedeutet, dass das Folgende abwechselnd auf beide Boxen angewendet wird.(,-.)
Dies ist ein Hook, der die Eingabe negiert und an das Ende des Originals anfügt:Dies ist wirklich ein Teil der Darstellung, aber für Golfzwecke ist es besser, es in diesem Abschnitt zu haben. Auf die vorherige Eingabe angewendet:
[:,.(_6[\' || (__)'){~
Die Nullen und Einsen werden nun verwendet, um eine Zeichenfolge auszuwählen, die eine Perle darstellt, oder um die Abwesenheit einer solchen Zeichenfolge zu kennzeichnen:Aber jetzt, wie Howard mir sagte, ist auf beiden Seiten der Perlen ein Leerzeichen frei. Daher verwenden wir das vordefinierte
s
Verb, um den Inhalt jeder Box zwischen zwei Spalten mit Leerzeichen einzuschließen:Nachdem Sie das getan haben, müssen Sie es nur noch in eine Zeichenfolge konvertieren,
":
damit wir es zwischen zwei Spalten einbetten können|
:quelle
Ruby 1.9, 154 Zeichen
Angenommen, die Eingabe wird nicht durch einen Zeilenumbruch beendet.
Unterhaltsame Tatsache: Aufgrund der Art und Weise, wie ich die eingegebenen Ziffern in Zahlen umwandle (
$&.hex
ist ein Byte kürzer als$&.to_i
), funktioniert dieser Abakus tatsächlich mit Hexadezimalziffern bis zue
:Denn
0xf
in der oberen Hälfte erscheint auf magische Weise eine dritte Perle.Wenn Sie zusätzliche Flags während des Skriptaufrufs zulassen, kann dies auf 152 Bytes verkürzt werden (149 Bytes Code + 3 Bytes zusätzliche Aufrufflags):
Laufen Sie mit
ruby -n suanpan.rb
.quelle
Perl (151 Zeichen)
(
168163158157156154)Erläuterung
Bearbeitungen
\n
s wurden in tatsächliche Zeilenumbrüche geändert. Kann nicht glauben, dass ich früher nicht daran gedacht habe!quelle
Windows PowerShell, 191
Geschichte:
$l
.%
, das Zahlen aus den Ziffern erstellt.$r
und nicht mehr$b
. Und$a
ist auch überholt. Wie ist$l
.$OFS
wenn ich es nur einmal brauche.$f
.-join
da wir den zusätzlichen Platz effektiv nutzen können.quelle
Haskell, 243 Zeichen
Nicht besonders schlau. Ich bin sicher, es kann irgendwie verkürzt werden ...
quelle
interact
z x|x=" (__) "|0<1=" || "
.Delphi, 348
Diese Version baut einen String auf, der nur einmal geschrieben werden kann. Die Ziffern werden von einer separaten Funktion verarbeitet, die über ein
digit modulo m >= value
Konstrukt arbeitet (negiert, wenn der Wert <0 ist).Delphi, 565Erster Versuch :
Dies verwendet 3 Arrays; eine für die 7 zu erkennenden Zeichenfolgen, eine für die Ausgabezeilen und eine für die Zuordnung der 7 Zeichenfolgen zu 11 Spalten (10 Ziffern und 1 Anfangsspalte).quelle
GolfScript, 139 Zeichen
Noch nicht viel golfen, aber es passt in einen Tweet (nur mit ASCII). Probieren Sie es hier aus .
quelle
J 225
Bestehen zwei Tests, sollten bis zu mehreren hundert Stellen funktionieren.
Zunächst einmal: Ja, ja, Totengräber. Zweitens: Das ist nur peinlich lang. Naja. Ich habe mich noch nicht entschieden, ob ich weiter Golf spielen oder mich in fötaler Position zusammenrollen und weinen soll. (Oder beides!)
Hier ist eine kurze Erklärung anstelle eines kürzeren Programms:
quelle
C,
277274 ZeichenWeißt du, es scheint mir, dass wir hier einfach nicht genug Lösungen haben, die den C-Präprozessor wirklich ausnutzen. Das liegt zum Teil daran, dass diese
#define
tatsächlich einiges an Platz einnehmen. Trotzdem gibt es so viel Potenzial. Ich habe das Bedürfnis, diesen Mangel anzugehen.Das ist besser.
quelle
Mathematica 281
Beispiel
quelle
C 548
Erste Version, nur ein bisschen Golfspielen.
quelle
Scala (489 Zeichen)
Ziemlich beschissener Versuch wirklich.
quelle
Sclipting , 77 Zeichen
Das Kopfgeld bezieht sich auf Tweets und Twitter zählt die Zeichen (nicht die Bytes). :)
Ich habe tatsächlich vor Jahren geschrieben (als diese Herausforderung veröffentlicht wurde), aber ich habe sie nie veröffentlicht, weil ich Sclipting erfunden habe, nachdem diese Herausforderung zum ersten Mal veröffentlicht wurde. Wenn Sie das Gefühl haben, dass dies nicht förderfähig ist, verstehe ich.
Erläuterung
quelle
Python,
309301288 ZeichenKompakte Version:
Klare Version:
Beachten Sie, dass zur Komprimierung die Variablen in einen einzelnen Buchstaben umbenannt wurden und das Listenverständnis in Generatoren geändert wurde, für die keine zusätzlichen Klammern erforderlich sind.
quelle