Il y a 21 objets dans Minecraft que vous pouvez fabriquer en utilisant uniquement du bois et des objets fabriqués à partir de bois:
hache
bateau
bol
bouton
poitrine
artisanat table
porte
clôture
porte
houe
échelle
pioche
planches
plaque de pression
pelle
signe
dalle
escaliers
bâton
épée
trappe
Cette liste suppose que les 6 différents types de planches / dalles / portes / etc. En bois. tous comptent comme le même article. Une autre façon de penser est de supposer que vous n'avez accès qu'à un seul type de bois.
Chacun de ces 21 articles a une recette d'artisanat différente . Nous représenterons chacune de ces recettes comme une grille 2 × 2 ou 3 × 3 des personnages .WPS
. Il .
s'agit d'un emplacement d'artisanat vide, W
destiné au bois , P
aux planches de bois et S
aux bâtons . Aucun autre personnage n'est nécessaire pour ces éléments particuliers.
Par exemple, voici la recette d'un coffre :
PPP
P.P
PPP
Défi
Écrivez un programme qui prend le nom de l'un de nos 21 articles, exactement comme il apparaît ci-dessus, et imprime une recette d'artisanat valide pour cet article.
Les recettes de fabrication sont invariantes par rapport à la traduction, donc si l'entrée est fence
, les deux sont valides:
PSP
PSP
...
...
PSP
PSP
Si une recette tient dans une grille 2 × 2, vous pouvez la sortir dans une grille 2 × 2 ou 3 × 3. par exemple stick
:
.P
.P
...
.P.
.P.
Les recettes peuvent également être mises en miroir horizontalement (autour d'une ligne de symétrie verticale), bien que cela ne fasse une différence que pour la hache, la houe et les escaliers. par exemple hoe
:
.PP
.S.
.S.
PP.
.S.
.S.
Donc, la sortie de toute recette qui tient dans la grille et qui a la bonne forme (en ignorant la traduction et la mise en miroir) est ce que votre programme doit faire. Ce sont toutes les recettes que le jeu officiel reconnaîtra. (Notez que les recettes ne peuvent pas être tournées ou mises en miroir verticalement.)
Détails
- Prenez l'entrée de stdin ou de la ligne de commande. Vous pouvez supposer que l'entrée est toujours valide. Exiger des guillemets autour de l'entrée (par exemple
"chest"
) est très bien. - Sortie vers stdout (ou l'alternative la plus proche) avec une nouvelle ligne de fin facultative.
- La soumission la plus courte en octets l' emporte.
Exemple
Voici une liste de toutes les entrées et exemples de sorties:
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
...
la source
Réponses:
CJam,
100969491 octetsStackExchange modifie les non imprimables, donc plutôt que de copier et coller ici est le permalien . De plus, voici le programme de test .
(Merci à @Optimizer de m'avoir parlé
f
et à @ MartinBüttner de m'avoir parlé de l'indexation modulo de CJam.)Cygwin
hexdump
:Explication
Pour construire les recettes, nous utilisons 13 lignes différentes (également expliquées pourquoi cela est minimal):
Nous encodons les lignes via
Z"O>HVa=4a"98bZb+"P.SW"f=3/
, ce qui donneLe premier bit
"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/
encode les recettes, donnantNotez comment est la première entrée
[3 3 8]
, qui est la recettesign
.l72b970%=
lit l'entrée, puis applique un peu de magie pour déterminer la recette à prendre dans la liste. Même si nous n'avons que 21 recettes, il y en a 24 dans la liste - les quelques spots supplémentaires correspondent aux[1 0 0]
s.Après avoir lu l'entrée, choisi la recette et converti la recette en lignes, nous avons ajouté quelques nouvelles lignes
N*
et l'impression automatique.CJam,
898683 octets... il s'avère que le codage en dur de toutes les sorties fait un peu mieux dans CJam. Je suis assez déçu.
Encore une fois, nous avons quelques imprimables donc voici le programme de permalien et de test .
Cygwin
hexdump
:Explication
Les sorties sont codées en utilisant la base 3, le seul
W
étant cloué sur le devant avant que la chaîne ne soit divisée en 3 pour donner des lignes, et les lignes sont divisées en groupes de 3 pour donner des recettes.Comme ci-dessus, la conversion de base et la magie modulo sont utilisées pour sélectionner la recette. Il y a 22 recettes (une inutilisée) mais nous devons prendre modulo 24, nous devons donc spécifier explicitement
24%
cette heure plutôt que de compter sur l'indexation modulo.la source
xxd
? Les permaliens ne fonctionnent pas sur Firefox.JavaScript (ES6), 235
241 262Modifier En abusant encore plus de la règle selon laquelle la saisie est toujours valide: il n'y a qu'un seul élément qui nécessite W, et qui peut être un boîtier spécial. Ainsi, la grille de sortie est codée en 9 chiffres de base 3.
235 octets avec E / S via popup.
221 octets comme fonction testable.
Sortie toujours en grille 3x3. Avec 4 symoboles de sortie disponibles, la grille est codée sous la forme d'un nombre de 3x3x2 (18) bits. Et comme l'entrée doit être toujours valide, la chaîne est stockée tronquée au strict minimum.
Tester dans la console Firefox / FireBug
Production
la source
Python, 305 octets
Explication
Commentaire
Ce code n'est certainement pas le plus petit mais il fonctionne très bien. Je suis satisfait. :)
Python, 282 octets
En utilisant la même technique pour générer un identifiant unique mais en recherchant directement la recette dans un tableau. C'est beaucoup plus simple et un peu plus compact que mon premier code.
la source
W.\n..