Faire une table de fabrication Minecraft

15

Ne détestez-vous pas quand vous ne vous souvenez pas comment créer quelque chose dans Minecraft? Eh bien, il est temps de remédier à cela!

Tâche

Votre tâche consiste à prendre une entrée, soit sous forme de liste 1D ou 2D et à sortir quel élément est le résultat de la table de fabrication!

Contribution

Vous pouvez prendre l'entrée comme une chaîne ou une liste de longueur 9ou un tableau imbriqué 2D.

Si vous prenez l'entrée en tant que ...

Chaîne

Chaque élément du tableau contient 1 caractère dans le caractère ASCII imprimable ( 0x20à 0x7E). Pour représenter un espace vide, vous utilisez un -exemple WWW-W-WWWserait la même chose qu'une table d'artisanat comme

+------+------+------+
| Wood | Wood | Wood |
+------+------+------+
|      | Wood |      |
+------+------+------+
| Wood | Wood | Wood |
+------+------+------+

Vous pouvez également prendre l'entrée comme une chaîne multiligne tant que tous les espaces sont préservés, par exemple

WWW
 W 
WWW

Matrice 1D

Vous prendriez l'entrée comme un tableau de caractères où les espaces vides sur la table d'artisanat seraient un caractère vide, par exemple la table ci-dessus serait ['W','W','W','','W','','W','W','W']

Réseau 2D

Cette fois, chaque liste représente une ligne sur la table de fabrication, où un espace vide est un caractère vide par exemple [['W','W','W'],['','W',''],['W','W','W']]

Vous pouvez supposer que l'entrée correspondra toujours à un élément qui peut être fabriqué, et si vous utilisez une entrée de tableau, vous pouvez remplacer le caractère vide par n'importe quel caractère non utilisé comme nom abrégé.

Production

La sortie sera l'élément fabriqué à partir de l'entrée, sous la forme que vous souhaitez, tant qu'il est évident de ce que cela signifie. (Personnellement, j'utiliserais mes abréviations à 1 lettre des articles)

Ingrédients

Pour ce défi, cela woodsignifie des planches de bois, pas des rondins de bois.

Vous n'avez qu'à gérer les objets les plus courants lors de la fabrication. Ce sont les ingrédients de l'artisanat mais peuvent aussi être des produits de l'artisanat. La recette d'artisanat suit le format xxxxxxxxxcomme l'entrée de chaîne ci-dessus. Si un objet ne peut pas être fabriqué, ---------est placé à la place.

Certaines recettes sont informe , ce qui signifie que tant que tous les articles sont là, l'article sera fait. Celles-ci sont désignées par a *. Un exemple de cela serait pumpkin pie(pas un seul dans ce défi) qui n'a besoin que pumpkin, sugaret eggà réaliser.

   item name    | abb. name | crafting recipe
----------------+-----------+------------------
wood            |     W     | ---------
cobblestone     |     C     | ---------
sticks          |     S     | ----W--W-
iron            |     I     | ---------
gold            |     G     | ---------
diamond         |     D     | ---------
redstone        |     R     | ---------
string          |     N     | ---------
coal            |     Y     | ---------
sugar cane      |     U     | ---------
redstone torch  |     E     | -R--S----
paper           |     P     | ---------
book            |     B     | ---PL-PP-
wool            |     M     | ---NN-NN-
obsidian        |     O     | ---------
gunpowder       |     X     | ---------
sand            |     A     | ---------
glass           |     H     | ---------
feather         |     F     | ---------
flint           |     K     | ---------
torch           |     T     | ---------
leather         |     L     | ---------
material blocks |     Z     | QQQQQQQQQ (here Q represents any in `[G, I, R, D, Y]`
compass         |     V     | -I-IRI-I-

Des produits

Ceci est une liste de tous les produits que vous pourriez manipuler pour l'artisanat. si l'article est également un ingrédient, il ne sera pas inclus ici mais vous devez toujours pouvoir le manipuler . Chacun peut être fabriqué en utilisant uniquement les ingrédients ci-dessus et est désigné comme une lettre minuscule unique pour l'identifier. Armor ( +) peut utiliser n'importe quel ingrédient [G, I, L, D]. Les armes ( $) peuvent être fabriquées à partir de [W, C, I, G, D]. Comme il s'agit d'un site de , nous devons raccourcir ces listes. [G, I, L, D]est désigné par a Qet [W, C, I, G, D]est noté par a J.

   item name    | abb. name | crafting recipe
----------------+-----------+------------------
crafting table  |     a     | -----WWWW
boots +         |     b     | ---Q-QQ-Q
pants +         |     c     | QQQQ-QQ-Q
chestplate +    |     d     | Q-QQQQQQQ
helmet +        |     e     | QQQQ-Q---
bed             |     f     | ---MMMWWW
chest           |     g     | WWWW-WWWW
wood door       |     h     | WW-WW-WW-
iron door       |     i     | II-II-II-
furnace         |     j     | CCCC-CCCC
trap door       |     k     | ---WW-WW-
TNT             |     l     | XAXAXAXAX
anvil           |     m     | ZZZ-I-III
axe $           |     n     | -JJ-SJ-S-
sword $         |     o     | -J--J--S-
pickaxe $       |     p     | JJJ-S--S-
hoe $           |     q     | JJ--S--S-
shovel $        |     r     | -J--S--S-
arrow           |     s     | -K--S--F-
bow             |     t     | SN-S-NSN-
bowl            |     u     | ---W-W-W-
gold nugget *   |     v     | ----G----
bucket          |     w     | ---I-I-I-
clock           |     y     | -G-GRG-G-
map             |     z     | PPPPVPPPP
fishing rod     |     1     | --S-SNS-N
flint and steel |     2     | ----I---K
shears          |     3     | ---I---I-
wood button *   |     4     | ----W----
dropper         |     5     | CCCC-CCRC
stone button *  |     6     | ----C----
jukebox         |     7     | WWWWDWWWW
lever           |     8     | ----S--C-
noteblock       |     9     | WWWWRWWWW
piston          |     0     | WWWCICCRC
pressure plate  |     !     | ------WW- (W can also be replaced with C/I/G)
repeater        |     @     | ---ERECCC
tripwire hook   |     #     | -I--S--W-
activator rail  |     (     | ISIIEIISI
boat            |     %     | ---W-WWWW
minecart        |     ^     | ---I-IIII
powered rail    |     &     | G-GGSGGRG
rail            |     )     | I-IISII-I
stone wall      |     {     | ---CCCCCC
fence gate      |     }     | ---SWSSWS
fence panel     |     [     | ---SSSSSS
glass pane      |     ]     | ---HHHHHH
iron bars       |     ;     | ---IIIIII
item frame      |     :     | SSSSLSSSS
ladder          |     '     | S-SSSSS-S
sandstone       |     "     | -----AAAA
slabs           |     |     | ---CCC---
stairs          |     <     | W--WW-WWW
bookshelves     |     >     | WWWBBBWWW
carpet          |     .     | -------MM
painting        |     ,     | SSSSMSSSS
sign            |     ?     | WWWWWW-S-
cauldron        |     /     | I-II-IIII
enchant. table  |     `     | -B-DODOOO
glass bottle    |     ~     | ---H-H-H-
rocket *        |     _     | -----PXXX

Notation

Comme il serait déraisonnable de vous demander de faire toutes ces recettes, vous n'avez qu'à faire celles que vous voulez! Mais bien sûr, plus vous en faites, meilleur est votre score.

Le score est défini comme

score = length of program in bytes / number of working recipes squared

Par exemple, cela pourrait être une soumission.

input()
print('S')

Comme vous pouvez supposer que l'entrée passée sera celle qu'elle peut gérer ( ----W--W-), elle sortira toujours S, ce qui est équivalent à sticks. Cela donnerait 18/1 = 18 .

Vous devez prendre l'entrée pour être un programme valide et vous devez pouvoir gérer au moins 5 entrées différentes .

La personne avec le score le plus bas gagne.

Règles

  • Le score le plus bas gagne
  • Vous pouvez prendre des entrées en utilisant n'importe quelle méthode acceptée (paramètres de fonction, STDIN, etc.)
  • Vous ne pouvez prendre de saisie que dans l'un des formulaires ci-dessus. Ce n'est pas trop restrictif et devrait être réalisable
  • Les failles standard sont interdites
  • Vous devez prendre des informations
  • Vous devez produire au moins 5des résultats corrects pour être qualifié de concurrent.
  • Pour les recettes sans forme, par exemple les pépites d'or, différentes combinaisons ne comptent pas comme des recettes différentes. ----W----est la même (au niveau de la recette) que --W------et n'est qu'une seule recette.
  • D'un autre côté, pour les recettes qui utilisent plus d'un matériau, comme les blocs de matériaux, chaque matériau différent compte comme une recette différente, ce qui signifie que ce IIIIIIIIIn'est pas la même chose (au niveau de la recette) que RRRRRRRRR.

Bonne chance, Minecrafters!

caird coinheringaahing
la source
1
bâtonnets peuvent être fabriqués par W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, ou, -----W--W. avons-nous besoin de gérer un seul de ces éléments ou tous ces éléments?
tsh
puis-je prendre l'entrée comme un tableau de chaînes? (par exemple ["WWW", "CIC", "CRC"])
dzaima
1
Answers in Minecraft Code, 5 bytes
Magic Octopus Urn
1
@MagicOctopusUrn Minecraft est écrit en Java donc ce n'est pas possible: p
dzaima
1
Code Minecraft: l'entrée est une configuration sur une table d'artisanat et la sortie est la sortie de la table d'artisanat. Facile. : p / s
HyperNeutrino

Réponses:

6

Python 2 , score: 0,0636347

715 octets, les 106 recettes

import zlib,base64
i=input()
x=`sorted(i)`[2::5]
W=zlib.decompress(base64.b64decode('eNpVUglywyAMfJEeEUPqaoKPQTPFzf8fUq0O6iyyLJsFLUhERMOM6Gx0ngj2HWYYijXBiZ6oid8EM7nZYhhW0orvTiS2qxK6PhHCmO+B527UYK3dA5+qVGG13gOf0lyr5YyAUjxN+SZDKPZsLXawXXxKsW3bcNB8wYrC3PWI8X6/7RiMaRlYrhQpCPSnMAIVIisCzSEVgV87yGYgm4FsBrKZJFOSKcmUZEoy1V7mv5KjaxeqRz2Og+i/rE7GaSyAfgtwcxbgOvI2DOB+/gH39ue8rkt2/drF+mfY8CpbVYVk19lT8QOHavXoDo7H/QsSa1Rg9HgXLqWXKEEvRHknIW4ebyqOgHkqhn/2p/JZmJ+s3qV6ledxvGHQP7KqyI9GlejS4lqIvm1AzhCYopmn8OAYTIx3oeKh0KzLsnjy2W1RIMe2YRNzSGH4AwHh7JI='))
d={W[l:l+9]:'SBMaZZZZZikeEVbcebcebcebcddqddqfghjlmnnnnnooooorrrrrs#`4ppppp6qvq_tuw1zy3279058|!!!!@(%q^&/){~}:\'];"><?.,['[l/9]for l in range(0,len(W),9)}
if i in d:x=i
print d[x]

Essayez-le en ligne!

Gère toutes les recettes spécifiées, y compris les variations de matériaux.

Crée un dictionnaire de toutes les recettes de travail (de longueur 9).

Les recettes informes sont incluses en triant la chaîne d'entrée et en les comparant au dictionnaire.

Edit: Passé à la compression de chaîne et enregistré 7 octets dans le code grâce à notjagan

TFeld
la source
Je compte 110 recettes
dzaima
-7 octets .
notjagan
@dzaima Armor n'a que 4 vairants (GILD) donc je compte 106
TFeld
1
@TFeld oh ouais, l'armure de charbon n'existe pas: |
dzaima
3

Mathematica, score: 0,0482378 0,0540228 0,0543788

542 607 611 octets, les 106 recettes

-4 octets pour réorganiser les données compressées

-65 octets pour avoir perdu la capacité de gérer les entrées invalides

"4/a[:chwpb?_oqjB%',>!6aM7^s<S@1|dfi~g38y&.nz}25#0r;]`mVe{v)b\"l9(tZE"~StringTake~{#&@@Join@@StringPosition[Uncompress@"1:eJw9UVuOgzAMrHoS9yglsGnUJkAsLYj92wv0/n+dsU3HZoAwfnL7f3f9u14uEtiKFDrIXgHc9IsXaQWEjo/uQDHjFxU6gt0MfiKy7Psuq9CVKVycACcoXrIsEQ6oF3euJBwOw+CNAUwSSNZx9NManSnGmCLmelrRH+R38ebFxO5Tn6wNFGwqjUmtK85rwHOtFVElNsWoh5mV+dbyy2ohQZbcs5hlzXx21MoBlEtbgF8SgzbMqRJJnrGfnviqsZpU7OTcIbUlftzDIIOM8zjP83EcPjy5x29aJRaXUmzekClUk/rUIbsD+2kcspOonKjXhhYaeD0hPbr6AOvmjtk=",#<>""&/@{v=#/.""->" ",Sort@v,v/.(#|##2&@@Characters@"GLIDWCYR"->"Q")}]/9+8/9}&

Prendre l'entrée en tant que liste 1D {"W", "W", "", "", ...}

Version étendue et claire:

TableOfNames~StringTake~{# & @@ 
      Join @@ StringPosition[
        Uncompress@CompressedRecipeTable,
        # <> "" & /@ {v = # /. "" -> " ", Sort@v, 
          v /. (# | ##2 & @@ Characters@"GLIDWCYR" -> "Q")}]/9 + 8/9} 
 &

Le grand Uncompressest une table de cordes de toutes les combinaisons, réunies.

"        WI II IIII     WWWW   SSSSSSSSSSLSSSSQQQQ QQ QWW WW WW    I \
I I QQQ S  S    W W W WWWWWW S      PXXX Q  Q  S QQ  S  S CCCC CCCC   \
PL PP    W WWWWS SSSSS SSSSSMSSSSWWWBBBWWW      QQ         C   WW WW  \
  NN NN WWWWDWWWW   I IIII K  S  F W  WW WWW    W  W    ERECCC  S SNS \
N   CCC   Q QQQQQQQ   MMMWWWII II II    H H H WWWW WWWW   I   I     S \
 C  G GRG G G GGSGGRG       MM QQ SQ S PPPPVPPPP   SWSSWS    I   \
KCCCC CCRC I  S  W WWWCICCRC Q  S  S    IIIIII   HHHHHH B DODOOOZZZ I \
III I IRI I QQQQ Q      CCCCCC        GI IISII I   Q QQ Q     \
AAAAXAXAXAXAXWWWWRWWWWISIIEIISISN S NSN QQQQQQQQQ R  S    "

StringPosition recherche la correspondance dans un ordre de: entrée elle-même, entrée triée (pour une recette informe), armure, arme, plaque de pression.

# & @@ Join @@ renvoie la position de première occurrence.

/9+8/9calcule l'index dans le tableau des résultats et StringTakeprend le caractère à cette position.

Keyu Gan
la source
2

SOGL V0.12 , 325 322 317 316 octets / 106 ^ 2 = score 0,0281238875

3∫HA"-?%mΛe*▓╔Υι§ā⅜β¬kēōΠ»t ‰CV↓ZΟΚΨpΝ∫3υ≤↕‰č⅛c╚≤Æ⁷/←;[piυ¦╗⌠⁄⁸qη╔@O;┐√)cR█9ιZ׀l»░(■DΛQ-╥76PT─ō4ο3ū^╝/9»¾κλCβ׀+!'▼vw-№█⁷$▒d`Σ⅟Ιž⁴n≡,`!m≤Σ═╥∫Κ‽∆Q>+g=¼⁾⁽D┐?─D○≠6τ╝ZTΞķ⅜∑²V=]4Æ⁴℮lT$¡sψī1 ◄δ)⅞/Σ/Δō»ņe#≥ζz⅛yB÷B⅞⁵Kβn┘g⁵ķ»<§└≡↓θ○‼¼ņΔε⁄z‼Ζ∙Φ6β⅜c≈Νycm!=V○Jεκ~  :I)ΩS‘U9ndW:? ~Δ" $*+-=\x”Z+čøŗ"SEBMZV”+W←,a‽"9╚πw⁽νQσ_‘č┌ŗD}a?□D

Explication:

3∫                    3 times repeat (on each it'll try something else)
  HA                    save 1-indexed iteration - 1 on variable A
    "..‘                push a string of the recipes
        U               uppercase it (as lowercase was ~7 bytes shorter)
         9n             split into and array of strings of length 9
           d            load the variable D (by default string input)
            W           get the variables 1-based index in that array, 0 if not found
:?                  ←   if [it isn't 0], leaves the input on the stack
   ~Δ                     get the ascii characters from space to ~ (inclusive)
     "..”                 push " $*+-=\x", the characters that are in the ASCII but not used
         Z+               add the uppercase alphabet to that (as most of it can't be outputted)
           čøŗ            filter those out
              "..”+       append to it the uppercase characters that are used - "SEBMZV"
                   W      get in the finished string the character at the index gotten before the if
                    ←     exit, outputting that
       ,                push the input
        a‽        }     if the 0-based index is not [0] (aka if this is the 1st time in the loop)
          "..‘            push "RDYWCDCIGL" - characters that are either of the groups of Q, J or the pressure plate
              č┌ŗ         replace [in the pushed input, each of those characters, with a dash]
                 D        save on variable D - used in the IF above
                   a?   if the 0-based index [is == 0] (aka if this is the 2st time in the loop, soon-to-be 3rd/last)
                     □    sort [the previously pushed input]
                      D   save on the variable D

Essayez-le ici! ou testez en exécutant ce qui suit (qui dira ce qui ne va pas):

var arr = `      WW  !\n      CC  !\n      II  !\n      GG  !\n     AAAA "\n I  S  W  #\n   W WWWW %\nG GGSGGRG &\nS SSSSS S '\nISIIEIISI (\nI IISII I )\nSSSSMSSSS ,\n       MM .\nI II IIII /\nWWWCICCRC 0\n  S SNS N 1\n    I   K 2\n   I   I  3\n        W 4\nW         4\n    W     4\n      W   4\nCCCC CCRC 5\n        C 6\n     C    6\nC         6\nWWWWDWWWW 7\n    S  C  8\nWWWWRWWWW 9\nSSSSLSSSS :\n   IIIIII ;\nW  WW WWW <\nWWWBBBWWW >\nWWWWWW S  ?\n   ERECCC @\n   SSSSSS [\n   HHHHHH ]\n   I IIII ^\n     PXXX _\n XP    XX _\nX   XP  X _\nXXXP      _\n B DODOOO \`\n   G GG G b\nGGGG GG G c\nG GGGGGGG d\nGGGG G    e\n   I II I b\nIIII II I c\nI IIIIIII d\nIIII I    e\n   L LL L b\nLLLL LL L c\nL LLLLLLL d\nLLLL L    e\n   D DD D b\nDDDD DD D c\nD DDDDDDD d\nDDDD D    e\n   MMMWWW f\nWWWW WWWW g\nWW WW WW  h\nII II II  i\nCCCC CCCC j\n   WW WW  k\nXAXAXAXAX l\nZZZ I III m\n WW SW S  n\n W  W  S  o\nWWW S  S  p\nWW  S  S  q\n W  S  S  r\n CC SC S  n\n C  C  S  o\nCCC S  S  p\nCC  S  S  q\n C  S  S  r\n II SI S  n\n I  I  S  o\nIII S  S  p\nII  S  S  q\n I  S  S  r\n GG SG S  n\n G  G  S  o\nGGG S  S  p\nGG  S  S  q\n G  S  S  r\n DD SD S  n\n D  D  S  o\nDDD S  S  p\nDD  S  S  q\n D  S  S  r\n K  S  F  s\nSN S NSN  t\n   W W W  u\n        G v\n      G   v\n   G      v\nG         v\n   I I I  w\n G GRG G  y\nPPPPVPPPP z\n   CCCCCC {\n   CCC    |\n   SWSSWS }\n   H H H  ~\n    W  W  S\n R  S     E\n   PL PP  B\n   NN NN  M\nGGGGGGGGG Z\nIIIIIIIII Z\nLLLLLLLLL Z\nDDDDDDDDD Z\n I IRI I  V`.split("\n");
toLog = "";
arr.forEach(f=>{
  inputs.value = f.substring(0,9);
  runClicked();
  correct = f.charAt(10);
  got = output.value;
  if (got != correct)
    toLog+= "\""+ inputs.value +"\": expected \""+ correct +"\", got \""+ got +"\".";
})
console.log(toLog);
dzaima
la source
0

Jelly , score 0,00173611111

4 / (48 ^ 2) = 0,00173611111 score

OṢḄỌ

Prend l'entrée sous forme de chaîne avec des tirets pour l'espace vide, par exemple -----WWWW.

Je pense que cela est valable parce que le défi dit

La sortie sera l'élément fabriqué à partir de l'entrée, sous la forme que vous souhaitez , tant qu'il est évident de ce que cela signifie. (Personnellement, j'utiliserais mes abréviations à 1 lettre des articles)

Les abréviations à 1 lettre sont à peu près aussi confuses que ce que cela produit, donc cette sortie est assez évidente ce qu'elle signifie.

Cela suppose que l'entrée peut être celle que le programme peut gérer comme spécifié par

vous pouvez supposer que l'entrée passée sera celle qu'elle peut gérer

Essayez-le en ligne!

Suite de tests (l'en-tête et le pied de page affinent la sortie) Cela fait les 48 recettes et donne leurs noms.

Comment ça fonctionne

Il s'agit vraiment d'une fonction de hachage vraiment médiocre.

OṢḄỌ - main link, input e.g. ZZZ-I-III
O      - character codes e.g. [90, 90, 90, 45, 73, 45, 73, 73, 73]
 Ṣ     - sort. This helps shapeless recipes and keeps recipes such as TNT in CJK 
           e.g. [45, 45, 73, 73, 73, 73, 90, 90, 90]
  Ḅ    - convert from binary to integer e.g. 26670
   Ọ   - chr: convert from integer to character e.g.栮
fireflame241
la source
@Downvoter Pourquoi le downvote? Pour autant que je sache, cela est conforme aux spécifications.
fireflame241