Складіть таблицю майстерності Minecraft


15

Хіба ви не ненавидите це, коли не можете згадати, як щось майструвати в Minecraft? Ну, час це виправити!

Завдання

Ваше завдання - взяти вхід як 1D або 2D список і вивести, який елемент є результатом таблиці майстрів!

Вхідні дані

Ви можете приймати дані як рядок або список довжини 9або 2D вкладений масив.

Якщо ви сприймаєте інформацію як ...

Рядок

Кожен елемент таблиці має 1 знак у символі ASCII для друку ( 0x20до 0x7E). Щоб представити порожній простір, ви використовуєте, -наприклад, WWW-W-WWWбуло б те саме, що і крафтовий стіл

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

Ви також можете приймати дані як багаторядкові рядки до тих пір, поки всі пробіли збережені, наприклад

WWW
 W 
WWW

1D масив

Ви б сприймали введення як масив char, де порожні пробіли на таблиці обробляються порожнім знаком, наприклад, наведена вище таблиця ['W','W','W','','W','','W','W','W']

2D масив

Цього разу кожен список являє собою рядок таблиці оброблення, де порожній простір - порожній знак, наприклад [['W','W','W'],['','W',''],['W','W','W']]

Можна припустити, що вхід завжди буде відповідати елементу, який можна створити, і якщо ви використовуєте введення масиву, ви можете замінити порожній знак будь-яким символом, який не використовується як скорочене ім'я.

Вихідні дані

Вихід буде предметом, створеним із вхідних даних, у будь-якій формі, до якої ви хочете, доки очевидно, що це означає. (Особисто я використовував би свої абревіатури з 1 літери)

Інгредієнти

Для цього завдання мають на woodувазі дерев'яні дошки, а не дерев’яні колоди.

Потрібно обробляти лише найпоширеніші предмети при крафті. Це інгредієнти для крафтингу, але вони також можуть бути продуктами крафтоутворення. Рецепт виготовлення слідує такому формату, xxxxxxxxxяк введення рядка вище. Якщо елемент неможливо створити, ---------замість цього розміщується.

Деякі рецепти є безформними , це означає, що так довго, поки всі предмети є, предмет буде зроблений. Вони позначаються як a *. Прикладом цього може бути pumpkin pie(не один із цього виклику), який лише потребує pumpkin, sugarі eggйого потрібно зробити.

   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-

Продукція

Це перелік усіх продуктів, з якими ви могли впоратися з крафтом. якщо предмет також є інгредієнтом, він сюди не буде включений, але ви все одно маєте змогу обробляти його . Кожен з них може бути створений, використовуючи лише інгредієнти, наведені вище, і позначається унікальною малою літерою для його ідентифікації. Броня ( +) може використовувати будь-який інгредієнт в [G, I, L, D]. Зброя ( $) може бути виготовлена ​​з [W, C, I, G, D]. Оскільки це веб сайт з , нам потрібно скоротити ці списки. [G, I, L, D]позначається а Qі [W, C, I, G, D]позначається а 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

Оцінка балів

Як було б нерозумно просити вас виконувати всі ці рецепти, ви повинні робити лише ті, що хочете! Але звичайно, чим більше ви робите, тим краще ваш рахунок.

Оцінка визначається як

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

Наприклад, це може бути подання.

input()
print('S')

Як ви можете припустити, що переданий вхід буде таким, який він може обробити ( ----W--W-), він завжди буде виводити S, що еквівалентно sticks. Це дасть бал 18/1 = 18 .

Ви повинні приймати дані, щоб бути дійсною програмою, і ви повинні мати можливість обробляти щонайменше 5 різних входів.

Перемагає людина з найнижчою оцінкою.

Правила

  • Виграє найнижчий рахунок
  • Ви можете приймати дані, використовуючи будь-який прийнятий метод (параметри функції, STDIN тощо)
  • Ви можете взяти дані лише в одній з перерахованих вище форм. Він не надто обмежувальний і повинен бути працездатним
  • Стандартні лазівки заборонені
  • Ви повинні взяти вклад
  • Ви повинні вивести принаймні 5правильні результати, щоб визнатись змагальними.
  • Для безрецептурних рецептів, наприклад, золотих самородків, різні комбінації не вважаються різними рецептами. ----W----такий самий (рецепт), як --W------і лише 1 рецепт.
  • З іншого боку, для рецептів, в яких використовується більше одного матеріалу, таких як матеріальні блоки, кожен різний матеріал вважається різним рецептом, тобто означає, що IIIIIIIIIвін не такий (як рецепт) RRRRRRRRR.

Удачі, Minecrafters!


1
Палички можуть бути оброблені з допомогою W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, або, -----W--W. чи потрібно нам обробляти лише один із цих чи всіх цих?
tsh

чи можу я взяти введення як масив рядків? (напр. ["WWW", "CIC", "CRC"])
dzaima

1
Відповіді в кодексі Minecraft, 5 байтів
Чарівний восьминіг Урна

1
@MagicOctopusUrn Minecraft написаний на Java, тому це неможливо: p
dzaima

1
Код Minecraft: Введення - це конфігурація таблиці для крафт-файлів, а вихід - вихід із таблиці крафт-файлів. Легко. : п / с
HyperNeutrino

Відповіді:


6

Python 2 , Оцінка: 0.0636347

715 байт, всі 106 рецептів

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]

Спробуйте в Інтернеті!

Обробляє всі зазначені рецепти, включаючи варіації матеріалів.

Створює словник усіх робочих рецептів (довжиною 9).

Безформні рецепти включаються, сортуючи вхідний рядок і перевіряючи відповідність словнику.

Редагувати: перемикається на стиснення рядків і зберігає 7 байтів у коді завдяки notjagan


Я рахую 110 рецептів
dzaima


@dzaima Armor має лише 4 вайранти (GILD), тому я рахую 106
TFeld

1
@TFeld о так, вугільна броня не існує: |
dzaima

3

Математика, оцінка: 0,0482378 0,0540228 0.0543788

542 607 611 байт, всі 106 рецептів

-4 байти для перестановки стислих даних

-65 байт для втрати можливості працювати з недійсними входами

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

Візьміть дані як 1D-список {"W", "W", "", "", ...}

Розширена та чітка версія:

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

Велика Uncompress- це рядкова таблиця всіх комбінацій, об'єднаних разом.

"        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 шукає відповідність у порядку: власне введення, відсортований вхід (за безформним рецептом), броня, зброя, тиск.

# & @@ Join @@ повертає позицію першого виникнення.

/9+8/9обчислює індекс у таблиці результатів і StringTakeприймає символ у цій позиції.


2

SOGL V0.12 , 325 322 317 316 байт / 106 ^ 2 = оцінка 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

Пояснення:

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

Спробуйте тут! або тестуйте, виконавши наступне (що скаже, що не так):

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

Желе , оцінка 0,00173611111

4 / (48 ^ 2) = 0,00173611111 бал

OṢḄỌ

Вводиться як рядок із дефісами для порожнього простору, наприклад -----WWWW.

Я думаю, що це справедливо, оскільки виклик говорить

Вихід буде предметом, створеним із вхідних даних, у будь-якій формі, яку ви хочете , доки зрозуміло, що це означає. (Особисто я використовував би свої абревіатури з 1 літери)

Абревіатури на 1 букву є приблизно такими ж заплутаними, як і те, що виводиться, тому цей результат є очевидним, що це означає.

Це передбачає, що вхід може бути таким, яким програма може обробити, як зазначено в

ви можете припустити, що переданий вхід буде таким, яким він може обробити

Спробуйте в Інтернеті!

Тестовий сюїт (заголовки та колонтитули вдосконалюють результат) Це робить усі 48 рецептів та дає їх назви.

Як це працює

Це насправді просто погана хеш-функція.

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 Чому downvote? Наскільки мені відомо, це відповідає специфікаціям.
fireflame241
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.