Tạo một bảng chế tạo Minecraft


15

Bạn không ghét nó khi bạn không thể nhớ cách tạo ra thứ gì đó trong Minecraft? Thôi, thời gian để khắc phục điều đó!

Bài tập

Nhiệm vụ của bạn là lấy một đầu vào, dưới dạng danh sách 1D hoặc 2D và xuất ra mục nào là kết quả của bảng chế tạo!

Đầu vào

Bạn có thể lấy đầu vào dưới dạng chuỗi hoặc danh sách độ dài 9hoặc mảng lồng nhau 2D.

Nếu bạn lấy đầu vào là ...

Chuỗi

Mỗi mục trong bảng là 1 char trong ký tự ASCII có thể in ( 0x20đến 0x7E). Để thể hiện một không gian trống, bạn sử dụng một -ví dụ WWW-W-WWWsẽ giống như một bảng chế tạo như

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

Bạn cũng có thể lấy đầu vào dưới dạng một chuỗi nhiều dòng miễn là tất cả các khoảng trắng được giữ nguyên, ví dụ:

WWW
 W 
WWW

Mảng 1D

Bạn sẽ lấy đầu vào là một mảng char trong đó các khoảng trống trên bảng chế tạo sẽ là một char trống, ví dụ như bảng trên sẽ là ['W','W','W','','W','','W','W','W']

Mảng 2D

Lần này, mỗi danh sách đại diện cho một dòng trên bảng chế tạo, trong đó một khoảng trống là một char trống, vd [['W','W','W'],['','W',''],['W','W','W']]

Bạn có thể giả định rằng đầu vào sẽ luôn tương ứng với một mục có thể được tạo và nếu sử dụng đầu vào mảng, bạn có thể thay thế char trống bằng bất kỳ ký tự nào không được sử dụng làm tên viết tắt.

Đầu ra

Đầu ra sẽ là vật phẩm được chế tạo từ đầu vào, dưới bất kỳ hình thức nào bạn muốn, miễn là nó rõ ràng có nghĩa là gì. (Cá nhân, tôi sẽ sử dụng chữ viết tắt 1 chữ cái của các mục)

Thành phần

Đối với thử thách này, wood có nghĩa là ván gỗ, không phải gỗ.

Bạn chỉ phải xử lý các mặt hàng phổ biến nhất khi chế tạo. Đây là những thành phần để chế tạo nhưng cũng có thể là sản phẩm của chế tạo. Công thức chế tạo theo định dạng xxxxxxxxxnhư đầu vào chuỗi ở trên. Nếu một vật phẩm không thể được chế tạo,--------- thay vào đó được đặt.

Một số công thức nấu ăn là không có hình dạng , có nghĩa là chỉ cần miễn là tất cả các mặt hàng ở đó, các mặt hàng sẽ được thực hiện. Chúng được ký hiệu là a *. Một ví dụ về điều này sẽ là pumpkin pie(không phải là một trong thử thách này) mà chỉ cần pumpkin, sugareggđược thực hiện.

   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-

Các sản phẩm

Đây là danh sách tất cả các sản phẩm mà bạn có thể xử lý để chế tạo. nếu vật phẩm cũng là một thành phần, nó sẽ không được đưa vào đây nhưng bạn vẫn có thể xử lý nó . Mỗi người có thể được chế tạo bằng cách chỉ sử dụng các thành phần trên và được chỉ định một chữ cái viết thường, duy nhất để xác định nó. Armor ( +) có thể sử dụng bất kỳ thành phần nào trong [G, I, L, D]. Vũ khí ( $) có thể được làm từ [W, C, I, G, D]. Vì đây là một trang web , tuy nhiên, chúng tôi cần làm cho các danh sách này ngắn hơn. [G, I, L, D]được ký hiệu là a Q[W, C, I, G, D]được ký hiệu là 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

Chấm điểm

Vì sẽ không hợp lý khi yêu cầu bạn thực hiện tất cả các công thức này, bạn chỉ phải làm những công việc bạn muốn! Nhưng tất nhiên, bạn càng làm, điểm số của bạn càng tốt.

Điểm được định nghĩa là

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

Ví dụ, đây có thể là một đệ trình.

input()
print('S')

Như bạn có thể giả sử rằng đầu vào được truyền sẽ là một đầu vào mà nó có thể xử lý ( ----W--W-), nó sẽ luôn xuất ra S, tương đương với sticks. Điều này sẽ ghi được 18/1 = 18 .

Bạn phải lấy đầu vào là một chương trình hợp lệ và bạn phải có khả năng xử lý ít nhất 5 đầu vào khác nhau .

Người có số điểm thấp nhất sẽ thắng.

Quy tắc

  • Điểm số thấp nhất sẽ thắng
  • Bạn có thể nhận đầu vào bằng bất kỳ phương thức được chấp nhận nào (tham số chức năng, STDIN, v.v.)
  • Bạn chỉ có thể lấy đầu vào ở một trong các hình thức trên. Nó không quá hạn chế và có thể thực hiện được
  • Các sơ hở tiêu chuẩn không được phép
  • Bạn phải lấy đầu vào
  • Bạn phải xuất ít nhất 5kết quả chính xác để đủ điều kiện là cạnh tranh.
  • Đối với các công thức nấu ăn không có hình dạng, ví dụ như vàng cốm, các kết hợp khác nhau không được tính là các công thức khác nhau. ----W----là giống nhau (công thức-khôn ngoan) như --W------và chỉ có 1 công thức.
  • Mặt khác, đối với các công thức nấu ăn sử dụng nhiều hơn một nguyên liệu, chẳng hạn như các khối nguyên liệu, mỗi nguyên liệu khác nhau được tính là một công thức khác nhau, có nghĩa IIIIIIIIIlà không giống nhau (theo công thức) RRRRRRRRR.

Chúc may mắn, Minecrafters!


1
gậy có thể được chế tác bởi W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, hay, -----W--W. chúng ta chỉ cần xử lý một trong số này hay tất cả những thứ này?
tsh

Tôi có thể lấy đầu vào là một chuỗi các chuỗi không? (ví dụ: "WWW", "CIC", "CRC"])
dzaima

1
Câu trả lời trong Mã Minecraft, 5 byte
Magic Octopus Urn

1
@MagicOctopusUrn Minecraft được viết bằng Java nên không có cách nào có thể: p
dzaima 17/07/17

1
Mã Minecraft: Đầu vào là một cấu hình trên bảng chế tạo và đầu ra là đầu ra từ bảng chế tạo. Dễ dàng. : p / s
HyperNeutrino

Câu trả lời:


6

Con trăn 2 , Điểm: 0,0636347

715 byte, tất cả 106 công thức nấu ăn

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]

Hãy thử trực tuyến!

Xử lý tất cả các công thức nấu ăn được chỉ định, bao gồm các biến thể vật liệu.

Tạo một từ điển của tất cả các công thức nấu ăn làm việc (với độ dài 9).

Các công thức nấu ăn hoàn hảo được bao gồm bằng cách sắp xếp chuỗi đầu vào và kiểm tra chúng theo từ điển.

Chỉnh sửa: Chuyển sang nén chuỗi và lưu 7 byte trong mã nhờ notjagan




@dzaima Armor chỉ có 4 vai (GILD) nên tôi đếm 106
TFeld 17/07/17

1
@TFeld oh yeah, áo giáp than không tồn tại: |
dzaima

3

Toán học, điểm: 0,0482378 0,0540228 0,0543788

542 607 611 byte, tất cả 106 công thức nấu ăn

-4 byte để sắp xếp lại dữ liệu nén

-65 byte vì mất khả năng xử lý các đầu vào không hợp lệ

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

Lấy đầu vào là danh sách 1D {"W", "W", "", "", ...}

Phiên bản mở rộng và rõ ràng:

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

Lớn Uncompresslà một bảng chuỗi của tất cả các kết hợp, kết hợp với nhau.

"        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 tìm kiếm sự phù hợp theo thứ tự: đầu vào chính nó, đầu vào được sắp xếp (cho công thức tạo hình), áo giáp, vũ khí, tấm áp lực.

# & @@ Join @@ trả về vị trí xuất hiện đầu tiên

/9+8/9tính toán chỉ số trong bảng kết quả và StringTakelấy ký tự ở vị trí đó.


2

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

Giải trình:

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

Hãy thử nó ở đây! hoặc kiểm tra bằng cách chạy như sau (sẽ nói những gì sai):

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

Thạch , điểm 0,00173611111

4 / (48 ^ 2) = 0,00173611111 điểm

OṢḄỌ

Đưa đầu vào như chuỗi với dấu gạch nối cho không gian trống rỗng, ví dụ -----WWWW.

Tôi nghĩ rằng điều này là hợp lệ bởi vì thách thức nói

Đầu ra sẽ là vật phẩm được chế tạo từ đầu vào, dưới bất kỳ hình thức nào bạn muốn , miễn là nó rõ ràng có nghĩa là gì. (Cá nhân, tôi sẽ sử dụng chữ viết tắt 1 chữ cái của các mục)

Các chữ viết tắt 1 chữ cái cũng khó hiểu như những gì đầu ra này, vì vậy đầu ra này đủ rõ ràng về ý nghĩa của nó.

Điều này giả sử đầu vào có thể là một trong những chương trình có thể xử lý như được chỉ định bởi

bạn có thể cho rằng đầu vào được truyền sẽ là một đầu vào mà nó có thể xử lý

Hãy thử trực tuyến!

Test Suite (Header và footer làm đẹp đầu ra) Điều này thực hiện tất cả 48 công thức nấu ăn và đặt tên của chúng.

Làm thế nào nó hoạt động

Đây thực sự chỉ là một hàm băm thực sự kém.

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 Tại sao downvote? Điều này phù hợp với thông số kỹ thuật theo như tôi biết.
fireflame241
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.