Es gibt 21 Artikel in Mine dass Sie Handwerk nur mit Holz aus Holz gefertigt und Artikel:
Axt
Boot
Schüssel
Knopf
Brust
basteln Tisch
Tür
Zaun
Tor
Hacke
Leiter
Spitzhacke
Planken
Druckplatte
Schaufel
Zeichen
Platte
Treppe
Stock
Schwert
Falltür
Diese Liste geht davon aus, dass die 6 verschiedenen Arten von Holzbohlen / Platten / Türen / etc. Alle zählen als derselbe Gegenstand. Eine andere Möglichkeit ist die Annahme, dass Sie nur Zugang zu einer Holzart haben.
Jeder dieser 21 Gegenstände hat ein anderes Herstellungsrezept . Wir werden jedes dieser Rezepte als 2 × 2- oder 3 × 3-Raster der Zeichen darstellen .WPS
. Das .
ist ein leerer Handwerksplatz, W
ist für Holz , P
ist für Holzbretter und S
ist für Stöcke . Für diese speziellen Gegenstände werden keine weiteren Zeichen benötigt.
Zum Beispiel ist dies das Rezept für eine Truhe :
PPP
P.P
PPP
Herausforderung
Schreiben Sie ein Programm, das genau wie oben den Namen eines unserer 21 Gegenstände enthält, und drucken Sie ein gültiges Herstellungsrezept für diesen Gegenstand aus.
Handwerksrezepte sind übersetzungsunabhängig. Wenn die Eingabe also zutrifft, sind fence
beide gültig:
PSP
PSP
...
...
PSP
PSP
Wenn ein Rezept in ein 2 × 2-Raster passt, können Sie es in einem 2 × 2- oder 3 × 3-Raster ausgeben. zB stick
:
.P
.P
...
.P.
.P.
Rezepte können auch horizontal gespiegelt werden (um eine vertikale Symmetrielinie), obwohl dies nur für Axt, Hacke und Treppe einen Unterschied macht. zB hoe
:
.PP
.S.
.S.
PP.
.S.
.S.
Daher muss Ihr Programm jedes Rezept ausgeben, das in das Raster passt und die richtige Form hat (Übersetzung und Spiegelung ignorieren). Dies sind alle Rezepte, die das offizielle Spiel erkennt. (Beachten Sie, dass Rezepte nicht vertikal gedreht oder gespiegelt werden können.)
Einzelheiten
- Nehmen Sie Eingaben von stdin oder der Befehlszeile entgegen. Sie können davon ausgehen, dass die Eingabe immer gültig ist. Anführungszeichen für Eingaben (z
"chest"
. B. ) sind in Ordnung. - Ausgabe auf stdout (oder die nächstgelegene Alternative) mit optionalem Zeilenumbruch.
- Die kürzeste Übermittlung in Bytes gewinnt.
Beispiel
Hier ist eine Liste aller Ein- und Beispielausgaben:
axe
PP.
SP.
S..
boat
P.P
PPP
...
bowl
P.P
.P.
...
button
P.
..
chest
PPP
P.P
PPP
crafting table
PP
PP
door
PP.
PP.
PP.
fence
PSP
PSP
...
gate
SPS
SPS
...
hoe
PP.
S..
S..
ladder
S.S
SSS
S.S
pickaxe
PPP
.S.
.S.
planks
W.
..
pressure plate
PP
..
shovel
P..
S..
S..
sign
PPP
PPP
.S.
slab
PPP
...
...
stairs
P..
PP.
PPP
stick
P.
P.
sword
P..
P..
S..
trapdoor
PPP
PPP
...
quelle
Antworten:
CJam,
100969491 BytesIn StackExchange werden nicht druckbare Dateien gemangelt, sodass hier nicht kopiert und eingefügt wird, sondern der Permalink . Zusätzlich ist hier das Testprogramm .
(Danke an @Optimizer für die Information
f
und an @ MartinBüttner für die Information über die Modulo-Indizierung von CJam.)Cygwins
hexdump
:Erläuterung
Um die Rezepte zu konstruieren, verwenden wir 13 verschiedene Zeilen (auch aufgeführt sind Erklärungen, warum dies minimal ist):
Wir kodieren die Zeilen über
Z"O>HVa=4a"98bZb+"P.SW"f=3/
, was gibtDas erste Bit
"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/
kodiert die Rezepte und gibtBeachten Sie, wie der erste Eintrag lautet
[3 3 8]
, für den das Rezept giltsign
.l72b970%=
Liest die Eingabe ein und wendet dann etwas Magie an, um herauszufinden, welches Rezept aus der Liste genommen werden soll. Obwohl wir nur 21 Rezepte haben, gibt es 24 in der Liste - die wenigen zusätzlichen Stellen entsprechen den[1 0 0]
s.Nachdem wir die Eingabe gelesen, das Rezept ausgewählt und das Rezept in Zeilen konvertiert haben, fügen wir einige neue Zeilen ein
N*
und drucken sie automatisch aus.CJam,
898683 Bytes... es stellt sich heraus, dass die Hardcodierung aller Ausgaben in CJam etwas besser funktioniert. Ich bin ziemlich enttäuscht.
Wir haben wieder einige nicht druckbare Dateien, hier ist der Permalink und Testprogramm .
Cygwins
hexdump
:Erläuterung
Die Ausgänge werden unter Verwendung der Basis 3 mit dem Einzigen codiert
W
Einzelne an der Vorderseite angeheftet wird, bevor die Zeichenfolge in Sekunden aufgeteilt wird, um Reihen zu ergeben, und die Reihen in Dreiergruppen aufgeteilt werden, um Rezepte zu ergeben.Wie oben wird zur Auswahl des Rezepts Basiskonvertierung und Modulo-Magie verwendet. Es gibt 22 Rezepte (eines davon nicht verwendet), aber wir müssen Modulo 24 verwenden, sodass wir
24%
diese Zeit explizit angeben müssen, anstatt uns auf die Modulo-Indizierung zu verlassen.quelle
xxd
? Die Permalinks funktionieren nicht in Firefox.JavaScript (ES6), 235
241 262Bearbeiten Noch mehr von der Regel missbrauchen, dass Eingaben immer gültig sind: Es gibt nur ein Element, für das W erforderlich ist. Das Ausgangsraster wird also als 9-stellige Basis-3-Zahlen codiert.
235 Bytes mit E / A über Popup.
221 Bytes als testbare Funktion.
Ausgabe immer als 3x3 Raster. Mit 4 verfügbaren Ausgangssymbolen wird das Raster als 3x3x2 (18) Bit-Nummer codiert. Und da die Eingabe immer gültig sein muss, werden die Zeichenfolgen auf das absolute Minimum gekürzt gespeichert.
Test In der Firefox / FireBug-Konsole
Ausgabe
quelle
Python, 305 Bytes
Erläuterung
Kommentar
Dieser Code ist sicherlich nicht der kleinste, aber er funktioniert einwandfrei. Ich bin zufrieden. :)
Python, 282 Bytes
Verwenden der gleichen Technik zum Generieren eines eindeutigen Bezeichners, aber direktes Nachschlagen des Rezepts in einem Array. Es ist viel einfacher und ein bisschen kompakter als mein erster Code.
quelle
W.\n..