Crea un tavolo da lavoro di Minecraft


15

Non lo odi quando non ricordi come creare qualcosa in Minecraft? Bene, è tempo di rimediare!

Compito

Il tuo compito è quello di prendere un input, come un elenco 1D o 2D e produrre quale oggetto è il risultato della tabella di creazione!

Ingresso

È possibile accettare input come una stringa o un elenco di lunghezza 9o un array nidificato 2D.

Se prendi input come ...

Corda

Ogni elemento nella tabella è 1 carattere nel carattere ASCII stampabile ( 0x20a 0x7E). Per rappresentare uno spazio vuoto, utilizzare -ad esempio WWW-W-WWWsarebbe lo stesso di una tabella di fabbricazione come

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

Puoi anche prendere l'input come una stringa multilinea purché tutti gli spazi siano conservati, ad es

WWW
 W 
WWW

1D array

Si prenderebbe l'input come un array di caratteri in cui gli spazi vuoti sulla tabella di creazione sarebbero un carattere vuoto, ad esempio la tabella sopra ['W','W','W','','W','','W','W','W']

Matrice 2D

Questa volta, ogni elenco rappresenta una linea sul tavolo di creazione, in cui uno spazio vuoto è un carattere vuoto, ad es [['W','W','W'],['','W',''],['W','W','W']]

Si può presumere che l'input corrisponderà sempre a un oggetto che può essere creato e, se si utilizza l'input di array, è possibile sostituire il carattere vuoto con qualsiasi carattere non utilizzato come nome abbreviato.

Produzione

L'output sarà l'oggetto creato dall'input, in qualsiasi forma tu voglia, purché sia ​​ovvio cosa significhi. (Personalmente, userei le mie abbreviazioni da 1 lettera degli articoli)

ingredienti

Per questa sfida, woodsignifica assi di legno, non tronchi di legno.

Devi solo maneggiare gli oggetti più comuni durante il crafting. Questi sono gli ingredienti per il crafting ma possono anche essere prodotti del crafting. La ricetta di fabbricazione segue il formato xxxxxxxxxcome l'input di stringa sopra. Se un oggetto non può essere fabbricato, ---------viene invece inserito.

Alcune ricette sono informe , il che significa che fino a quando tutti gli oggetti saranno presenti, l'oggetto verrà prodotto. Questi sono indicati come a *. Un esempio di questo sarebbe pumpkin pie(non uno in questa sfida) che solo ha bisogno pumpkin, sugare eggda fare.

   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-

Prodotti

Questo è un elenco di tutti i prodotti che potresti gestire per il crafting. se l'articolo è anche un ingrediente, non sarà incluso qui ma devi comunque essere in grado di gestirlo . Ognuno può essere realizzato utilizzando solo gli ingredienti sopra ed è designato con una lettera minuscola unica per identificarlo. Armor ( +) può usare qualsiasi ingrediente in [G, I, L, D]. Le armi ( $) possono essere fatte da [W, C, I, G, D]. Dato che si tratta di un sito di , tuttavia, è necessario abbreviare queste liste. [G, I, L, D]è indicato da a Qed [W, C, I, G, D]è indicato da 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

punteggio

Poiché sarebbe irragionevole chiederti di fare tutte queste ricette, devi fare solo quelle che vuoi! Ma ovviamente, più fai, migliore è il tuo punteggio.

Il punteggio è definito come

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

Ad esempio, questa potrebbe essere una presentazione.

input()
print('S')

Come puoi supporre che l'input passato sarà uno che può gestire ( ----W--W-), verrà sempre emesso S, che è equivalente a sticks. Ciò significherebbe 18/1 = 18 .

È necessario accettare input per essere un programma valido ed essere in grado di gestire almeno 5 input diversi .

Vince la persona con il punteggio più basso.

Regole

  • Il punteggio più basso vince
  • È possibile accettare input utilizzando qualsiasi metodo accettato (parametri di funzione, STDIN ecc.)
  • Puoi prendere input solo in uno dei moduli sopra. Non è troppo restrittivo e dovrebbe essere praticabile
  • Le scappatoie standard non sono ammesse
  • Devi prendere input
  • Devi ottenere almeno i 5risultati corretti per qualificarti come concorrente.
  • Per ricette senza forma, ad esempio pepite d'oro, combinazioni diverse non contano come ricette diverse. ----W----è lo stesso (dal punto di vista della ricetta) di --W------ed è solo 1 ricetta.
  • Il rovescio della medaglia di questo, per le ricette che usano più di un materiale, come blocchi di materiale, ogni materiale diverso conta come una ricetta diversa, il che significa che IIIIIIIIInon è lo stesso (dal punto di vista della ricetta) di RRRRRRRRR.

Buona fortuna, Minecrafters!


1
bastoncini possono essere realizzati da W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, o, -----W--W. dobbiamo gestire solo uno di questi o tutti questi?
TSH

posso prendere input come una matrice di stringhe? (es. ["WWW", "CIC", "CRC"])
dzaima,

1
Risposte in codice Minecraft, 5 byte
Magic Octopus Urn

1
@MagicOctopusUrn Minecraft è scritto in Java, quindi non è possibile: p
dzaima,

1
Codice Minecraft: l'input è una configurazione su una tabella di crafting e l'output è l'output della tabella di crafting. Facile. : p / s
HyperNeutrino,

Risposte:


6

Python 2 , Punteggio: 0,0636347

715 byte, tutte le 106 ricette

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]

Provalo online!

Gestisce tutte le ricette specificate, comprese le variazioni di materiale.

Crea un dizionario di tutte le ricette di lavoro (con lunghezza 9).

Le ricette informe sono incluse ordinando la stringa di input e controllando quelle sul dizionario.

Modifica: passato alla compressione delle stringhe e salvato 7 byte nel codice grazie a notjagan




@dzaima Armor ha solo 4 vendicatori (GILD) quindi conto 106
TFeld

1
@TFeld oh yeah, l'armatura di carbone non esiste: |
dzaima,

3

Mathematica, punteggio: 0,0482378 0.0540228 0.0543788

542 607 611 byte, tutte le 106 ricette

-4 byte per riorganizzare i dati compressi

-65 byte per perdere la capacità di gestire input non validi

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

Prendi input come 1D-list {"W", "W", "", "", ...}

Versione estesa e chiara:

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

Il grande Uncompressè una tabella di stringhe di tutte le combinazioni, unite insieme.

"        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 cerca la corrispondenza in un ordine di: input stesso, input ordinato (per ricetta informe), armatura, arma, spingidisco.

# & @@ Join @@ restituisce la posizione della prima occorrenza.

/9+8/9calcola l'indice nella tabella dei risultati e StringTakeprende il carattere in quella posizione.


2

SOGL V0.12 , 325 322 317 316 byte / 106 ^ 2 = punteggio 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

Spiegazione:

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

Provalo qui! o prova eseguendo quanto segue (che dirà cosa c'è che non va):

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);

0

Gelatina , punteggio 0,00173611111

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

OṢḄỌ

Accetta input come stringa con trattini per spazio vuoto, ad es -----WWWW.

Penso che questo sia valido perché la sfida dice

L'output sarà l'oggetto creato dall'input, in qualsiasi forma tu voglia , purché sia ​​ovvio cosa significhi. (Personalmente, userei le mie abbreviazioni da 1 lettera degli articoli)

Le abbreviazioni di 1 lettera sono confuse quanto ciò che questo produce, quindi questo risultato è abbastanza ovvio sul significato.

Ciò presuppone che l'input possa essere quello che il programma può gestire come specificato da

puoi presumere che l'input passato sarà uno che può gestire

Provalo online!

Test Suite (intestazione e piè di pagina preettificano l'output) Questo fa tutte e 48 le ricette e dà il loro nome.

Come funziona

Questa è davvero solo una funzione hash davvero scadente.

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.栮

@Downvoter Perché il downvote? Questo è conforme alle specifiche per quanto ne so.
fireflame241
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.