Minecraftのクラフトテーブルを作成する


15

Minecraftで何かを作成する方法を思い出せない場合は、嫌いではありませんか?さて、それを改善する時間です!

仕事

あなたの仕事は、入力を1Dまたは2Dリストとして受け取り、作成テーブルの結果であるアイテムを出力することです!

入力

入力は、文字列、長さのリスト、9またはネストされた2D配列のいずれかとして取得できます。

として入力を取得する場合...

ストリング

表の各項目は、印刷可能なASCII文字(0x200x7E)の1文字です。空きスペースを表現するには、使用-例は、WWW-W-WWWのようなクラフトテーブルと同じになります

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

すべてのスペースが保持されている限り、入力を複数行の文字列として受け取ることもできます。

WWW
 W 
WWW

1D配列

入力を文字配列として受け取ります。この配列では、作成テーブルの空のスペースが空の文字になります。たとえば、上記のテーブルは ['W','W','W','','W','','W','W','W']

2D配列

今回は、各リストはクラフトテーブルの行を表します。空のスペースは空の文字です。 [['W','W','W'],['','W',''],['W','W','W']]

入力は常に作成可能なアイテムに対応すると想定できます。配列入力を使用する場合は、空のcharを省略名として使用されていない任意の文字に置き換えることができます。

出力

出力は、それが何を意味するのかが明白である限り、任意の形式の入力から作成されたアイテムになります。(個人的には、1文字のアイテムの略語を使用します)

材料

この課題でwoodは、木の丸太ではなく、木の板を意味します。

作成時に最も一般的なアイテムを処理するだけです。これらはクラフトの材料ですが、クラフトの製品でもあります。作成レシピは、xxxxxxxxx上記の文字列入力のような形式に従います。アイテムを作成できない場合は、---------代わりに配置されます。

いくつかのレシピはなく、すべてのアイテムがそこにある限りアイテムが作られることを意味します。これらはで示されます*。これの例は、pumpkin pie(このチャレンジの1つではなく)必要pumpkinsugarあり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で示され、a 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-)であると想定できるため、常にoutput 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。これらのうちの1つだけを処理する必要がありますか?
tsh

入力を文字列の配列として取得できますか?(例[[WWW]、 "CIC"、 "CRC"])
dzaima

1
Minecraftコードの回答、5バイト
マジックタコのUr

1
P:@MagicOctopusUrn Minecraftのは可能です決してので、Javaで書かれている
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)。

形状のないレシピは、入力文字列をソートし、辞書と照合することで含まれます。

編集:文字列圧縮に切り替え、notjaganのおかげでコードに7バイトを保存し ました




@dzaima Armorには4つのバリアント(GILD)しかありませんので、106をカウントします
TFeld

1
@TFeldそうそう、石炭の鎧は存在しません:|
dzaima

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.12325 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なぜダウン投票なのですか?私の知る限り、これは仕様に準拠しています。
fireflame241
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.