Сделать стол для крафта Minecraft


15

Разве ты не ненавидишь, когда не помнишь, как создать что-то в Minecraft? Что ж, пора это исправить!

задача

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

вход

Вы можете использовать входные данные в виде строки, списка длины 9или двумерного вложенного массива.

Если вы принимаете вход как ...

строка

Каждый элемент в таблице содержит 1 символ в печатном символе ASCII ( 0x20до 0x7E). Чтобы представить пустое пространство, вы должны использовать -например WWW-W-WWW, будет такой же, как таблица крафта, как

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

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

WWW
 W 
WWW

1D массив

Вы бы взяли входные данные в виде массива char, где пустые места в таблице крафта были бы пустым char, например, приведенная выше таблица будет ['W','W','W','','W','','W','W','W']

2D массив

На этот раз каждый список представляет строку в таблице крафта, где пустое пространство - это пустой символ, например [['W','W','W'],['','W',''],['W','W','W']]

Вы можете предположить, что ввод всегда будет соответствовать элементу, который может быть создан, и, если используется ввод массива, вы можете заменить пустой символ любым символом, не используемым в качестве сокращенного имени.

Выход

Выводом будет элемент, созданный из входных данных, в любой форме, которую вы хотите, если очевидно, что это означает. (Лично я бы использовал свои 1 буквенные сокращения пунктов)

Ингредиенты

Для этого вызов woodозначает деревянные доски, а не деревянные бревна.

Вы должны обрабатывать только самые распространенные предметы при изготовлении. Это ингредиенты для крафта, но также могут быть и продукты крафта. Рецепт крафтинга следует формату, xxxxxxxxxподобному строковому вводу выше. Если предмет не может быть обработан, ---------вместо него помещается.

Некоторые рецепты бесформенны , это означает, что, пока все предметы есть, предмет будет изготовлен. Они обозначены как *. Примером этого может быть 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.

Удачи, майнкрафтеры!


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: ввод - это конфигурация на столе крафта, а вывод - это выход из стола крафта. Легко. : p / s
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




@dzaima Armor имеет только 4 вайранта (GILD), поэтому я считаю 106
TFeld

1
@TFeld о да, угольной брони не существует: |
Дзайма

3

Mathematica, оценка: 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 буквенные сокращения пунктов)

Однобуквенные сокращения примерно так же запутаны, как и то, что это выводит, поэтому этот вывод достаточно очевиден, что он означает.

Это предполагает, что ввод может быть тот, который программа может обрабатывать, как указано

Вы можете предположить, что переданный вход будет тем, который он может обработать

Попробуйте онлайн!

Набор тестов (заголовок и нижний колонтитул предварительно подтверждают вывод) Это делает все 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.