Faça uma mesa de artesanato Minecraft

15

Você não odeia quando não consegue se lembrar de como criar algo no Minecraft? Bem, é hora de remediar isso!

Tarefa

Sua tarefa é pegar uma entrada, como uma lista 1D ou 2D, e produzir qual item é resultado da tabela de criação!

Entrada

Você pode receber a entrada como uma sequência de caracteres ou uma lista de comprimento 9ou uma matriz aninhada 2D.

Se você considerar a entrada como ...

Corda

Cada item da tabela possui 1 caractere no caractere ASCII imprimível ( 0x20para 0x7E). Para representar um espaço vazio, use um -exemplo WWW-W-WWWseria o mesmo que uma tabela de criação como

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

Você também pode receber a entrada como uma sequência de múltiplas linhas, desde que todos os espaços sejam preservados, por exemplo

WWW
 W 
WWW

Matriz 1D

Você usaria a entrada como uma matriz de caracteres, onde os espaços vazios na tabela de criação seriam um caractere vazio, por exemplo, a tabela acima ['W','W','W','','W','','W','W','W']

Matriz 2D

Desta vez, cada lista representa uma linha na tabela de criação, onde um espaço vazio é um caractere vazio, por exemplo [['W','W','W'],['','W',''],['W','W','W']]

Você pode assumir que a entrada sempre corresponderá a um item que pode ser criado e, se estiver usando a entrada da matriz, poderá substituir o caractere vazio por qualquer caractere não usado como um nome abreviado.

Resultado

A saída será o item criado a partir da entrada, da forma que você desejar, desde que seja óbvio o que isso significa. (Pessoalmente, eu usaria minhas abreviações de uma letra dos itens)

Ingredientes

Para este desafio, woodsignifica pranchas de madeira, não toras de madeira.

Você só precisa lidar com os itens mais comuns ao criar. Estes são os ingredientes para a elaboração, mas também podem ser produtos da elaboração. A receita de criação segue o formato xxxxxxxxxcomo a entrada de sequência acima. Se um item não puder ser criado, ele ---------será colocado.

Algumas receitas não têm forma , o que significa que, desde que todos os itens estejam lá, o item será feito. Estes são indicados como a *. Um exemplo disso seria pumpkin pie(não um neste desafio) que só precisa de pumpkin, sugare eggpara ser feita.

   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-

Produtos

Esta é uma lista de todos os produtos que você pode manipular para criar. se o item também for um ingrediente, ele não será incluído aqui, mas você ainda deve poder manipulá-lo . Cada um pode ser criado usando apenas os ingredientes acima e é designada uma letra minúscula exclusiva para identificá-lo. Armor ( +) pode usar qualquer ingrediente em [G, I, L, D]. É $possível fabricar armas ( ) [W, C, I, G, D]. Como este é um site de , no entanto, precisamos tornar essas listas mais curtas. [G, I, L, D]é denotado por a Qe [W, C, I, G, D]é denotado 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

Pontuação

Como não seria razoável pedir-lhe para fazer todas essas receitas, você só precisa fazer as que deseja! Mas é claro que, quanto mais você faz, melhor sua pontuação.

Pontuação é definida como

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

Por exemplo, isso pode ser um envio.

input()
print('S')

Como você pode supor que a entrada passada será uma que ela possa manipular ( ----W--W-), ela sempre produzirá S, o que equivale a sticks. Isso marcaria 18/1 = 18 .

Você deve considerar a entrada como um programa válido e deve poder manipular pelo menos 5 entradas diferentes .

A pessoa com a pontuação mais baixa ganha.

Regras

  • Menor pontuação ganha
  • Você pode receber informações usando qualquer método aceito (parâmetros de função, STDIN etc.)
  • Você só pode receber informações de uma das formas acima. Não é muito restritivo e deve ser viável
  • As brechas padrão não são permitidas
  • Você deve receber informações
  • Você deve produzir pelo menos 5resultados corretos para se qualificar como concorrente.
  • Para receitas sem forma, por exemplo, pepitas de ouro, combinações diferentes não contam como receitas diferentes. ----W----é o mesmo (em termos de receita) --W------e é apenas uma receita.
  • Por outro lado, para receitas que usam mais de um material, como blocos de materiais, cada material diferente conta como receita diferente, o que significa que IIIIIIIIInão é o mesmo (em termos de receita) que RRRRRRRRR.

Boa sorte, Minecrafters!

caird coinheringaahing
fonte
1
varas podem ser trabalhada por W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, ou, -----W--W. precisamos lidar com apenas um desses ou todos?
tsh
posso receber entrada como uma matriz de seqüências de caracteres? (por exemplo, ["WWW", "CIC", "CRC"]))
dzaima 17/07
1
Respostas em Minecraft Code, 5 bytes
Magic Octopus Urn
1
@MagicOctopusUrn O Minecraft é escrito em Java, então não é possível: p
dzaima
1
Código Minecraft: A entrada é como uma configuração em uma tabela de criação e a saída é a saída da tabela de criação. Fácil. : p / s
HyperNeutrino

Respostas:

6

Python 2 , Pontuação: 0.0636347

715 bytes, todas as 106 receitas

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]

Experimente online!

Lida com todas as receitas especificadas, incluindo variações de material.

Cria um dicionário de todas as receitas de trabalho (com comprimento 9).

As receitas disformes são incluídas ordenando a sequência de entrada e comparando-as com o dicionário.

Edit: Mudou para compressão de string e salvou 7 bytes no código graças a notjagan

TFeld
fonte
Conto 110 receitas
dzaima
-7 bytes .
notjagan
@dzaima armadura tem apenas 4 vairants (GILD) para que contam 106
TFeld
1
@TFeld oh yeah, a armadura de carvão não existe: |
Dzaima 17/07
3

Mathematica, pontuação: 0.0482378 0,0540228 0,0543788

542 607 611 bytes, todas as 106 receitas

-4 bytes para reorganizar dados compactados

-65 bytes para perder a capacidade de lidar com 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}&

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

Versão expandida e clara:

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

O grande Uncompressé uma tabela de strings de todas as combinações, 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 procura correspondência em uma ordem de: entrada em si, entrada classificada (para receita sem forma), armadura, arma, prato de pressão.

# & @@ Join @@ retorna a posição da primeira ocorrência.

/9+8/9calcula o índice na tabela de resultados e StringTakeleva o caractere nessa posição.

Keyu Gan
fonte
2

SOGL V0.12 , 325 322 317 316 bytes / 106 ^ 2 = pontuação 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

Explicação:

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

Experimente aqui! ou teste executando o seguinte (que dirá o que está errado):

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

Geléia , pontuação 0.00173611111

4 / (48 ^ 2) = 0.00173611111 pontuação

OṢḄỌ

Recebe entrada como string com hífens para espaço vazio, por exemplo -----WWWW.

Eu acho que isso é válido porque o desafio diz

A saída será o item criado a partir da entrada, na forma que você desejar , desde que seja óbvio o que isso significa. (Pessoalmente, eu usaria minhas abreviações de uma letra dos itens)

As abreviações de 1 letra são tão confusas quanto o que isso gera, portanto, esse resultado é óbvio o que significa.

Isso pressupõe que a entrada possa ser aquela que o programa possa manipular, conforme especificado por

você pode assumir que a entrada passada será uma que ele possa manipular

Experimente online!

Suíte de teste (cabeçalho e rodapé prettify a saída) Isso faz todas as 48 receitas e dá seus nomes.

Como funciona

Esta é realmente apenas uma função de hash muito ruim.

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
fonte
@Downvoter Por que o voto negativo? Isso está em conformidade com as especificações, tanto quanto eu sei.
fireflame241