Zrób stół do tworzenia Minecraft

15

Czy nie nienawidzisz tego, gdy nie pamiętasz, jak stworzyć coś w Minecraft? Czas to naprawić!

Zadanie

Twoim zadaniem jest wziąć dane wejściowe, jako listę 1D lub 2D i wypisać, jaki przedmiot jest wynikiem tabeli rzemieślniczej!

Wejście

Możesz wziąć dane wejściowe jako ciąg znaków, listę długości 9lub zagnieżdżoną tablicę 2D.

Jeśli weźmiesz wkład jako ...

Strunowy

Każdy element w tabeli ma 1 znak w drukowanym znaku ASCII ( 0x20do 0x7E). Aby przedstawić pustą przestrzeń, użyj -np. WWW-W-WWWByłby taki sam jak stół rzemieślniczy jak

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

Możesz również wziąć dane wejściowe jako ciąg wielowierszowy, o ile wszystkie spacje są zachowane, np

WWW
 W 
WWW

Tablica 1D

Wziąłbyś dane wejściowe jako tablicę znaków, w której puste miejsca na stole rzemieślniczym byłyby pustym znakiem, np. Powyższa tabela byłaby ['W','W','W','','W','','W','W','W']

Tablica 2D

Tym razem każda lista reprezentuje linię na stole rzemieślniczym, gdzie puste miejsce to pusty znak, np [['W','W','W'],['','W',''],['W','W','W']]

Możesz założyć, że dane wejściowe zawsze będą odpowiadały elementom, które można spreparować, a jeśli używasz danych tablicowych, możesz zastąpić pusty znak dowolnym znakiem nieużywanym jako nazwa skrócona.

Wynik

Wyjście będzie przedmiotem wytworzonym na podstawie danych wejściowych, w dowolnej formie, o ile będzie oczywiste, co to znaczy. (Osobiście użyłbym moich 1-literowych skrótów pozycji)

Składniki

Dla tego wyzwania woodoznacza drewniane deski, a nie drewniane kłody.

Podczas wytwarzania musisz obsługiwać tylko najczęstsze przedmioty. Są to składniki rzemieślnicze, ale mogą być również produktami rzemieślniczymi. Przepis wytwarzania ma format xxxxxxxxxpodobny do powyższego ciągu znaków. Jeśli przedmiot nie może zostać wytworzony, ---------zamiast tego jest umieszczany.

Niektóre przepisy są bezkształtne , co oznacza, że ​​dopóki wszystkie elementy będą dostępne, przedmiot zostanie wykonany. Są one oznaczone jako a *. Przykładem tego będzie pumpkin pie(nie jeden na to wyzwanie), który tylko potrzebuje pumpkin, sugara eggktóre mają być wykonane.

   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-

Produkty

To jest lista wszystkich produktów, które możesz wykorzystać do tworzenia. jeśli przedmiot jest również składnikiem, nie zostanie tu uwzględniony, ale nadal musisz go obsługiwać . Każdy z nich może być wykonany przy użyciu wyłącznie powyższych składników i jest oznaczony unikalną, małą literą, aby go zidentyfikować. Pancerz ( +) może używać dowolnego składnika [G, I, L, D]. Broń ( $) może być wykonana z [W, C, I, G, D]. Ponieważ jest to strona z , musimy skrócić te listy. [G, I, L, D]jest oznaczony przez a Qi [W, C, I, G, D]jest oznaczony przez 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

Punktacja

Ponieważ nierozsądne byłoby prosić cię o wykonanie wszystkich tych przepisów, musisz zrobić tylko te, które chcesz! Ale im więcej tego zrobisz, tym lepszy wynik.

Wynik jest zdefiniowany jako

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

Na przykład może to być przesłanie.

input()
print('S')

Jak można założyć, że przekazane dane wejściowe będą w stanie obsłużyć ( ----W--W-), zawsze będą generować dane wyjściowe S, co jest równoważne z sticks. Dałoby to wynik 18/1 = 18 .

Musisz wziąć dane wejściowe, aby być poprawnym programem i musisz być w stanie obsłużyć co najmniej 5 różnych danych wejściowych.

Osoba z najniższym wynikiem wygrywa.

Zasady

  • Najniższy wynik wygrywa
  • Możesz przyjmować dane wejściowe przy użyciu dowolnej zaakceptowanej metody (parametry funkcji, STDIN itp.)
  • Możesz przyjmować dane tylko w jednym z powyższych formularzy. Nie jest zbyt restrykcyjny i powinien być wykonalny
  • Standardowe luki są niedozwolone
  • Musisz wziąć wkład
  • Musisz podać co najmniej 5poprawne wyniki, aby zakwalifikować się jako konkurencyjny.
  • W przypadku przepisów bezkształtnych, np. Złote samorodki, różne kombinacje nie liczą się jako różne przepisy. ----W----jest taki sam (pod względem przepisów) jak --W------i jest tylko 1 przepisem.
  • Z drugiej strony, w przypadku przepisów, które wykorzystują więcej niż jeden materiał, takich jak bloki materiałów, każdy inny materiał liczy się jako inny przepis, co oznacza, że IIIIIIIIInie jest taki sam (pod względem receptury) jak RRRRRRRRR.

Powodzenia, Minecrafters!

Cairney Coheringaahing
źródło
1
sztyfty mogą być przygotowane przez W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, lub -----W--W. czy potrzebujemy obsługiwać tylko jedną z nich, czy wszystkie z nich?
tsh
czy mogę brać dane wejściowe jako tablicę ciągów? (np. [„WWW”, „CIC”, „CRC”])
dzaima
1
Odpowiedzi w kodzie Minecraft, 5 bajtów
Magic Octopus Urn
1
@MagicOctopusUrn Minecraft jest napisany w Javie, więc nie ma mowy, że to możliwe: p
dzaima
1
Kod Minecraft: Dane wejściowe są konfiguracją na stole rzemieślniczym, a dane wyjściowe są danymi wyjściowymi ze stołu rzemieślniczego. Łatwo. : p / s
HyperNeutrino,

Odpowiedzi:

6

Python 2 , Wynik: 0,0636347

715 bajtów, wszystkie 106 przepisów

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]

Wypróbuj online!

Obsługuje wszystkie określone przepisy, w tym odmiany materiałów.

Tworzy słownik wszystkich działających przepisów (o długości 9).

Bezkształtne przepisy są uwzględniane poprzez sortowanie ciągu wejściowego i sprawdzanie ich w słowniku.

Edycja: Przełączono na kompresję ciągów i zapisano 7 bajtów w kodzie dzięki notjagan

TFeld
źródło
Liczę 110 przepisów
dzaima
-7 bajtów .
notjagan
@dzaima Armor ma tylko 4 vairantów (GILD), więc liczę 106
TFeld
1
@TFeld o tak, zbroja węglowa nie istnieje: |
dzaima
3

Mathematica, wynik: 0,0482378 0,0540228 0,0543788

542 607 611 bajty, wszystkie 106 przepisów

-4 bajty do zmiany kolejności skompresowanych danych

-65 bajtów za utratę możliwości radzenia sobie z nieprawidłowymi danymi wejściowymi

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

Weź dane jako listę 1D {"W", "W", "", "", ...}

Rozszerzona i przejrzysta wersja:

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

Big Uncompressto tabela ciągów wszystkich kombinacji, połączonych ze sobą.

"        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 szuka dopasowania w kolejności: sam wkład, posortowane wejście (dla bezkształtnego przepisu), zbroja, broń, płyta dociskowa.

# & @@ Join @@ zwraca pozycję pierwszego wystąpienia.

/9+8/9oblicza indeks w tabeli wyników i StringTakeprzyjmuje znak w tej pozycji.

Keyu Gan
źródło
2

SOGL V0.12 , 325 322 317 316 bajtów / 106 ^ 2 = wynik 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

Wyjaśnienie:

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

Wypróbuj tutaj! lub przetestuj, uruchamiając następujące (co powie, co jest nie tak):

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
źródło
0

Galaretka , wynik 0,00173611111

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

OṢḄỌ

Pobiera dane wejściowe jako ciąg znaków z łącznikami dla pustej przestrzeni, np -----WWWW.

Myślę, że jest to ważne, ponieważ mówi wyzwanie

Wyjście będzie przedmiotem wytworzonym na podstawie danych wejściowych, w dowolnej formie , o ile będzie oczywiste, co to znaczy. (Osobiście użyłbym moich 1-literowych skrótów pozycji)

Skróty 1-literowe są tak samo mylące, jak to, co wyświetla, więc to wyjście jest wystarczająco oczywiste, co to znaczy.

Zakłada się, że dane wejściowe mogą być obsługiwane przez program w sposób określony przez

możesz założyć, że przekazane dane wejściowe będą w stanie obsłużyć

Wypróbuj online!

Pakiet testowy (nagłówek i stopka upiększają dane wyjściowe) Wykonuje wszystkie 48 przepisów i podaje ich nazwy.

Jak to działa

To naprawdę bardzo słaba funkcja skrótu.

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
źródło
@Downvoter Dlaczego głosowanie negatywne? Jest to zgodne ze specyfikacjami, o ile mi wiadomo.
fireflame241