Buat Meja Kerajinan Minecraft

15

Tidakkah kamu membencinya ketika kamu tidak ingat bagaimana membuat sesuatu di Minecraft? Nah, saatnya memperbaiki itu!

Tugas

Tugas Anda adalah mengambil input, baik sebagai daftar 1D atau 2D dan menampilkan item apa yang merupakan hasil dari tabel crafting!

Memasukkan

Anda dapat mengambil input sebagai string atau daftar panjang 9atau array bersarang 2D.

Jika Anda mengambil input sebagai ...

Tali

Setiap item dalam tabel adalah 1 karakter dalam karakter ASCII yang dapat dicetak ( 0x20untuk 0x7E). Untuk merepresentasikan ruang kosong, Anda menggunakan -eg WWW-W-WWWakan sama dengan tabel crafting like

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

Anda juga dapat mengambil input sebagai string multiline selama semua spasi dipertahankan, mis

WWW
 W 
WWW

Array 1D

Anda akan mengambil input sebagai array char di mana ruang kosong pada tabel crafting akan menjadi char kosong misalnya tabel di atas akan ['W','W','W','','W','','W','W','W']

Array 2D

Kali ini, setiap daftar merepresentasikan garis pada tabel crafting, di mana ruang kosong adalah mis kosong [['W','W','W'],['','W',''],['W','W','W']]

Anda dapat mengasumsikan bahwa input akan selalu sesuai dengan item yang dapat dibuat, dan jika menggunakan input array, Anda dapat mengganti char kosong dengan karakter apa pun yang tidak digunakan sebagai nama singkatan.

Keluaran

Keluaran akan berupa barang yang dibuat dari input, dalam bentuk apa pun yang Anda inginkan, selama itu jelas artinya. (Secara pribadi, saya akan menggunakan singkatan 1 huruf dari item)

Bahan

Untuk tantangan ini, woodberarti papan kayu, bukan kayu.

Anda hanya perlu menangani item yang paling umum saat membuat kerajinan. Ini adalah bahan untuk kerajinan tetapi mungkin juga merupakan produk kerajinan. Resep kerajinan mengikuti format xxxxxxxxxseperti input string di atas. Jika suatu barang tidak dapat dibuat, ---------ditempatkan sebagai gantinya.

Beberapa resep tidak berbentuk , artinya selama semua item ada, item tersebut akan dibuat. Ini dilambangkan menjadi a *. Contohnya adalah pumpkin pie(bukan satu-satunya dalam tantangan ini) yang hanya perlu pumpkin, sugardan eggharus dibuat.

   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-

Produk

Ini adalah daftar semua produk yang bisa Anda tangani untuk kerajinan. jika item tersebut juga merupakan bahan, itu tidak akan dimasukkan di sini tetapi Anda harus tetap bisa menanganinya . Masing-masing dapat dibuat hanya menggunakan bahan-bahan di atas dan ditunjuk sebagai huruf kecil yang unik untuk mengidentifikasinya. Armor ( +) dapat menggunakan bahan apa pun di [G, I, L, D]. Senjata ( $) dapat dibuat dari [W, C, I, G, D]. Karena ini adalah situs , kita perlu membuat daftar ini lebih pendek. [G, I, L, D]dilambangkan dengan a Qdan [W, C, I, G, D]dilambangkan dengan 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

Mencetak gol

Karena tidak masuk akal meminta Anda untuk melakukan semua resep ini, Anda hanya perlu melakukan yang Anda inginkan! Tapi tentu saja, semakin banyak yang Anda lakukan, semakin baik skor Anda.

Skor didefinisikan sebagai

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

Sebagai contoh, ini bisa jadi pengiriman.

input()
print('S')

Karena Anda dapat mengasumsikan bahwa input yang dikirimkan akan menjadi salah satu yang dapat ditangani ( ----W--W-), ia akan selalu menghasilkan S, yang setara dengan sticks. Ini akan skor 18/1 = 18 .

Anda harus mengambil input untuk menjadi program yang valid dan Anda harus dapat menangani setidaknya 5 input yang berbeda .

Orang dengan skor terendah menang.

Aturan

  • Skor terendah menang
  • Anda dapat mengambil input menggunakan metode apa pun yang diterima (parameter fungsi, STDIN, dll.)
  • Anda hanya dapat mengambil input di salah satu formulir di atas. Itu tidak terlalu membatasi dan harus bisa diterapkan
  • Celah standar tidak diijinkan
  • Anda harus mengambil input
  • Anda harus mengeluarkan setidaknya 5hasil yang benar untuk memenuhi syarat sebagai yang bersaing.
  • Untuk resep yang tidak berbentuk, misalnya nugget emas, kombinasi berbeda tidak dihitung sebagai resep berbeda. ----W----sama (resep-bijaksana) seperti --W------dan hanya 1 resep.
  • Di sisi lain dari ini, untuk resep yang menggunakan lebih dari satu bahan, seperti balok bahan, masing-masing bahan berbeda dihitung sebagai resep yang berbeda, artinya IIIIIIIIItidak sama dengan resep RRRRRRRRR.

Semoga beruntung, Minecrafters!

caird coinheringaahing
sumber
1
tongkat dapat dibuat oleh W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, atau, -----W--W. apakah kita hanya perlu menangani satu atau semua ini?
tsh
bolehkah saya mengambil input sebagai array string? (mis. ["WWW", "CIC", "CRC"])
dzaima
1
Jawaban dalam Kode Minecraft, 5 byte
Magic Octopus Urn
1
@MagicOctopusUrn Minecraft ditulis di Jawa sehingga tidak mungkin: p
dzaima
1
Kode Minecraft: Input adalah sebagai konfigurasi pada tabel crafting, dan output adalah output dari tabel crafting. Mudah. : p / s
HyperNeutrino

Jawaban:

6

Python 2 , Nilai: 0,0636347

715 byte, semua 106 resep

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]

Cobalah online!

Menangani semua resep yang ditentukan, termasuk variasi bahan.

Membuat kamus semua resep yang berfungsi (dengan panjang 9).

Resep tak berbentuk dimasukkan dengan mengurutkan string input, dan memeriksa mereka terhadap kamus.

Sunting: Beralih ke kompresi string, dan menyimpan 7 byte dalam kode berkat notjagan

TFeld
sumber
Saya menghitung 110 resep
dzaima
-7 byte .
notjagan
@dzaima Armor hanya memiliki 4 vairant (GILD) jadi saya hitung 106
TFeld
1
@Tfeld oh yeah, baju besi batu bara tidak ada: |
dzaima
3

Mathematica, skor: 0,0482378 0,0540228 0,0543788

542 607 611 byte, semua 106 resep

-4 byte untuk mengatur ulang data terkompresi

-65 byte karena kehilangan kemampuan untuk berurusan dengan input yang tidak valid

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

Ambil input sebagai daftar 1D {"W", "W", "", "", ...}

Versi yang diperluas & hapus:

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

Besar Uncompressadalah tabel string dari semua kombinasi, digabung bersama.

"        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 mencari pencocokan dalam urutan: input itu sendiri, input diurutkan (untuk resep tak berbentuk), baju besi, senjata, pressure plate.

# & @@ Join @@ mengembalikan posisi kejadian pertama.

/9+8/9menghitung indeks dalam tabel hasil dan StringTakemengambil karakter pada posisi itu.

Keyu Gan
sumber
2

SOGL V0.12 , 325 322 317 316 bytes / 106 ^ 2 = skor 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

Penjelasan:

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

Coba Di Sini! atau uji dengan menjalankan yang berikut (yang akan mengatakan apa yang salah):

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);
dzaima
sumber
0

Jelly , skor 0,00173611111

4 / (48 ^ 2) = 0,00173611111 skor

OṢḄỌ

Mengambil input sebagai string dengan tanda hubung untuk ruang kosong, mis -----WWWW.

Saya pikir ini valid karena tantangannya mengatakan

Keluaran akan berupa barang yang dibuat dari input, dalam bentuk apa pun yang Anda inginkan , selama itu jelas artinya. (Secara pribadi, saya akan menggunakan singkatan 1 huruf dari item)

Singkatan 1 huruf kira-kira membingungkan seperti apa outputnya, jadi output ini cukup jelas artinya.

Ini mengasumsikan input dapat menjadi salah satu yang dapat ditangani oleh program seperti yang ditentukan oleh

Anda dapat mengasumsikan bahwa input yang dikirimkan akan menjadi salah satu yang dapat ditangani

Cobalah online!

Test Suite (Header dan footer mendandani output) Ini melakukan semua 48 resep dan memberikan nama mereka.

Bagaimana itu bekerja

Ini benar-benar hanya fungsi hash yang sangat buruk.

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.栮
fireflame241
sumber
@Downvoter Mengapa downvote? Ini sesuai dengan spesifikasi sejauh yang saya tahu.
fireflame241