Hacer una mesa de elaboración de Minecraft

15

¿No odias cuando no puedes recordar cómo crear algo en Minecraft? Bueno, ¡es hora de remediar eso!

Tarea

¡Su tarea es tomar una entrada, ya sea como una lista 1D o 2D y dar salida a qué elemento es el resultado de la tabla de elaboración!

Entrada

Puede tomar la entrada como una cadena o una lista de longitud 9o una matriz anidada 2D.

Si toma la entrada como ...

Cuerda

Cada elemento de la tabla es 1 carácter en el carácter ASCII imprimible ( 0x20a 0x7E). Para representar un espacio vacío, utiliza un -eg WWW-W-WWWsería lo mismo que una mesa de fabricación como

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

También puede tomar la entrada como una cadena multilínea siempre que se conserven todos los espacios, p. Ej.

WWW
 W 
WWW

Matriz 1D

Tomaría la entrada como una matriz de caracteres donde los espacios vacíos en la tabla de creación serían un carácter vacío, por ejemplo, la tabla anterior sería ['W','W','W','','W','','W','W','W']

Matriz 2D

Esta vez, cada lista representa una línea en la mesa de trabajo, donde un espacio vacío es un carácter vacío, por ejemplo [['W','W','W'],['','W',''],['W','W','W']]

Puede suponer que la entrada siempre corresponderá a un elemento que se puede crear, y si usa la entrada de matriz, puede reemplazar el carácter vacío con cualquier carácter que no se use como nombre abreviado.

Salida

La salida será el elemento creado a partir de la entrada, en cualquier forma que desee, siempre que sea obvio lo que significa. (Personalmente, usaría mis abreviaturas de 1 letra de los artículos)

Ingredientes

Para este desafío, woodsignifica tablones de madera, no troncos de madera.

Solo tienes que manejar los elementos más comunes al crear. Estos son los ingredientes para la elaboración, pero también pueden ser productos de elaboración. La receta de elaboración sigue el formato xxxxxxxxxcomo la entrada de cadena anterior. Si un artículo no se puede crear, ---------se coloca en su lugar.

Algunas recetas no tienen forma , lo que significa que siempre y cuando todos los artículos estén allí, el artículo estará hecho. Estos se denotan ser a *. Un ejemplo de esto sería pumpkin pie(no uno en este desafío) que sólo necesita pumpkin, sugary eggque se harán.

   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-

Productos

Esta es una lista de todos los productos que podría manejar para la elaboración. Si el artículo también es un ingrediente, no se incluirá aquí, pero aún debe ser capaz de manejarlo . Cada uno se puede elaborar utilizando solo los ingredientes anteriores y se designa con una letra minúscula única para identificarlo. Armor ( +) puede usar cualquier ingrediente en [G, I, L, D]. Las armas ( $) se pueden hacer de [W, C, I, G, D]. Sin embargo, como este es un sitio de , debemos acortar estas listas. [G, I, L, D]se denota por a Qy [W, C, I, G, D]se denota por 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

Puntuación

Como no sería razonable pedirle que haga todas estas recetas, ¡solo tiene que hacer las que desee! Pero, por supuesto, cuanto más hagas, mejor será tu puntuación.

El puntaje se define como

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

Por ejemplo, esto podría ser una presentación.

input()
print('S')

Como puede suponer que la entrada pasada será una que pueda manejar ( ----W--W-), siempre generará S, lo que es equivalente a sticks. Esto obtendría 18/1 = 18 .

Debe tomar la entrada para ser un programa válido y debe poder manejar al menos 5 entradas diferentes .

La persona con el puntaje más bajo gana.

Reglas

  • La puntuación más baja gana
  • Puede tomar datos utilizando cualquier método aceptado (parámetros de función, STDIN, etc.)
  • Solo puede tomar la entrada en uno de los formularios anteriores. No es demasiado restrictivo y debería ser viable.
  • Las lagunas estándar no están permitidas
  • Debe tomar entrada
  • Debe generar al menos 5resultados correctos para calificar como competidor.
  • Para las recetas que no tienen forma, por ejemplo, pepitas de oro, las diferentes combinaciones no cuentan como recetas diferentes. ----W----es el mismo (en cuanto a recetas) que --W------y solo es 1 receta.
  • Por otro lado, para las recetas que usan más de un material, como bloques de materiales, cada material diferente cuenta como una receta diferente, lo que significa que IIIIIIIIIno es lo mismo (en cuanto a recetas) RRRRRRRRR.

¡Buena suerte, Minecrafters!

caird coinheringaahing
fuente
1
palos pueden ser elaborados por W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, o, -----W--W. ¿Necesitamos manejar solo uno de estos o todos estos?
tsh
¿Puedo tomar la entrada como un conjunto de cadenas? (por ejemplo, ["WWW", "CIC", "CRC"])
dzaima
1
Respuestas en Minecraft Code, 5 bytes
Urna de pulpo mágico
1
@MagicOctopusUrn Minecraft está escrito en Java, por lo que no es posible: p
dzaima
1
Código de Minecraft: la entrada es como una configuración en una mesa de trabajo, y la salida es la salida de la mesa de trabajo. Fácil. : p / s
HyperNeutrino

Respuestas:

6

Python 2 , Puntuación: 0.0636347

715 bytes, las 106 recetas

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]

Pruébalo en línea!

Maneja todas las recetas especificadas, incluidas las variaciones de material.

Crea un diccionario de todas las recetas de trabajo (con longitud 9).

Las recetas sin forma se incluyen ordenando la cadena de entrada y comparándolas con el diccionario.

Editar: Cambió a la compresión de cadenas y guardó 7 bytes en el código gracias a notjagan

TFeld
fuente
Cuento 110 recetas
dzaima
-7 bytes .
notjagan
@dzaima Armor solo tiene 4 vairants (GILD), así que cuento 106
TFeld
1
@TFeld oh sí, la armadura de carbón no existe: |
dzaima
3

Mathematica, puntuación: 0.0482378 0.0540228 0.0543788

542 607 611 bytes, las 106 recetas

-4 bytes para reorganizar datos comprimidos

-65 bytes por perder la capacidad de manejar entradas inválidas

"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}&

Tomar entrada como lista 1D {"W", "W", "", "", ...}

Versión ampliada y clara:

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

El grande Uncompresses una tabla de cuerdas de todas las combinaciones, unidas.

"        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 busca coincidencias en un orden de: entrada en sí, entrada ordenada (para receta sin forma), armadura, arma, placa de presión.

# & @@ Join @@ devuelve la posición de la primera ocurrencia.

/9+8/9calcula el índice en la tabla de resultados y StringTaketoma el carácter en esa posición.

Keyu Gan
fuente
2

SOGL V0.12 , 325 322 317 316 bytes / 106 ^ 2 = puntuación 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

Explicación:

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

Pruébalo aquí! o prueba ejecutando lo siguiente (que dirá lo que está mal):

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
fuente
0

Jalea , partitura ,00173611111

4 / (48 ^ 2) = 0.00173611111 puntaje

OṢḄỌ

Toma la entrada como una cadena con guiones para el espacio vacío, por ejemplo -----WWWW.

Creo que esto es válido porque el desafío dice

La salida será el elemento creado a partir de la entrada, en cualquier forma que desee , siempre que sea obvio lo que significa. (Personalmente, usaría mis abreviaturas de 1 letra de los artículos)

Las abreviaturas de 1 letra son tan confusas como lo que esto genera, por lo que esta salida es bastante obvia de lo que significa.

Esto supone que la entrada puede ser una que el programa puede manejar según lo especificado por

puede suponer que la entrada aprobada será una que pueda manejar

Pruébalo en línea!

Test Suite (Encabezado y pie de página embellecen la salida) Esto hace las 48 recetas y da sus nombres.

Cómo funciona

Esto es realmente una función hash realmente pobre.

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
fuente
@Downvoter ¿Por qué el downvote? Esto se ajusta a las especificaciones hasta donde yo sé.
fireflame241