마인 크래프트 제작 테이블 만들기


15

Minecraft에서 무언가를 제작하는 방법을 기억할 수 없을 때 싫어하지 않습니까? 글쎄, 그것을 해결하는 시간!

직무

당신의 임무는 1D 또는 2D 목록으로 입력을 받고 크래프팅 테이블의 결과로 어떤 아이템을 출력하는 것입니다!

입력

문자열 또는 길이 목록 9또는 2D 중첩 배열 로 입력을받을 수 있습니다 .

당신이 입력으로 가져 가면 ...

표의 각 항목은 인쇄 가능한 ASCII 문자 ( 0x20~ 0x7E) 에서 1 자 입니다. 빈 공간을 표현하기 위해, 당신은 사용 -예는 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은 위의 문자열 입력과 같은 형식을 따릅니다 . 아이템을 제작할 수 없으면 ---------대신에 배치됩니다.

일부 요리법은 모양이 없으므로 모든 항목이있는 한 항목이 만들어집니다. 이들은로 표시 *됩니다. 이것의 예로들 수 있습니다 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]a로 표시된다 Q[W, C, I, G, D]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

채점

이러한 레시피를 모두 요청하는 것은 불합리하므로 원하는 것만 수행하면됩니다! 그러나 물론할수록 점수가 높아집니다.

점수는 다음과 같이 정의됩니다

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------합니다.
  • 이것의 반대로, 재료 블록과 같이 하나 이상의 재료를 사용하는 레시피의 경우, 각기 다른 재료는 서로 다른 레시피로 계산 IIIIIIIII됩니다 RRRRRRRRR.

행운을 빕니다, Minecrafters!


1
스틱에 의해 만들어진 수있다 W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, 또는 -----W--W. 이 중 하나 또는 전부를 처리해야합니까?
tsh

문자열 배열로 입력을받을 수 있습니까? (예 : [ "WWW", "CIC", "CRC"])
dzaima

1
마인 크래프트 코드의 답변, 5 바이트
Magic Octopus Urn

1
@MagicOctopusUrn Minecraft는 Java로 작성되었으므로 가능한 방법은 없습니다 : p
dzaima

1
마인 크래프트 코드 : 입력은 크래프팅 테이블의 구성으로, 출력은 크래프팅 테이블의 출력입니다. 쉬운. : p / s
HyperNeutrino

답변:


6

파이썬 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 인 모든 작업 레시피 사전을 생성합니다.

형태없는 레시피는 입력 문자열을 정렬하고 사전과 비교하여 점검하여 포함됩니다.

편집 : 문자열 압축으로 전환하고 notjagan 덕분에 코드에 7 바이트를 저장 했습니다.




@dzaima Armor는 4 개의 vairants (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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.