Mache einen Minecraft-Basteltisch

15

Hassen Sie es nicht, wenn Sie sich nicht erinnern können, wie man in Minecraft etwas herstellt? Nun, es ist Zeit, dem abzuhelfen!

Aufgabe

Deine Aufgabe ist es, eine Eingabe entweder als 1D- oder 2D-Liste zu machen und auszugeben, welcher Gegenstand das Ergebnis der Herstellungstabelle ist!

Eingang

Sie können Eingaben entweder als Zeichenfolge oder als Längenliste 9oder als 2D-verschachteltes Array vornehmen.

Wenn Sie Eingaben als ...

String

Jedes Element in der Tabelle ist 1 Zeichen im druckbaren ASCII-Zeichen ( 0x20bis 0x7E). Um einen leeren Raum darzustellen, verwenden Sie ein -Beispiel WWW-W-WWW, das einem Basteltisch ähnelt

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

Sie können Eingaben auch als mehrzeilige Zeichenfolge verwenden, sofern alle Leerzeichen erhalten bleiben, z

WWW
 W 
WWW

1D Array

Sie würden die Eingabe als Zeichen-Array annehmen, wobei leere Stellen auf der Herstellungstabelle ein leeres Zeichen wären, z. B. obige Tabelle ['W','W','W','','W','','W','W','W']

2D-Array

Diesmal stellt jede Liste eine Zeile auf dem Handwerkstisch dar, wobei ein leerer Raum ein leeres Zeichen ist, z [['W','W','W'],['','W',''],['W','W','W']]

Sie können davon ausgehen, dass die Eingabe immer einem herstellbaren Element entspricht. Wenn Sie eine Array-Eingabe verwenden, können Sie das leere Zeichen durch ein beliebiges Zeichen ersetzen, das nicht als abgekürzter Name verwendet wird.

Ausgabe

Die Ausgabe ist das Element, das aus der Eingabe in jeder gewünschten Form erstellt wird, sofern klar ist, was dies bedeutet. (Persönlich würde ich meine 1-Buchstaben-Abkürzungen der Artikel verwenden)

Zutaten

Für diese Herausforderung woodbedeutet Holzbohlen, nicht Holzstämme.

Sie müssen beim Herstellen nur mit den häufigsten Gegenständen umgehen. Dies sind die Zutaten für das Handwerk, können aber auch Handwerksprodukte sein. Das Herstellungsrezept folgt dem oben angegebenen Format xxxxxxxxx. Wenn ein Gegenstand nicht hergestellt werden kann, ---------wird er stattdessen platziert.

Einige Rezepte sind formlos , was bedeutet, dass der Gegenstand hergestellt wird, solange alle Gegenstände vorhanden sind. Diese werden mit a bezeichnet *. Ein Beispiel hierfür wäre pumpkin pie(nicht ein in dieser Herausforderung) , dass nur braucht pumpkin, sugarund egggemacht werden.

   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-

Produkte

Dies ist eine Liste aller Produkte, die Sie zum Herstellen verwenden können. Wenn der Gegenstand auch eine Zutat ist, wird er hier nicht aufgeführt, aber Sie müssen trotzdem damit umgehen können . Jedes kann nur mit den oben genannten Zutaten hergestellt werden und ist mit einem eindeutigen Kleinbuchstaben gekennzeichnet, um es zu identifizieren. In Armor ( +) können alle Zutaten verwendet werden [G, I, L, D]. Waffen ( $) können aus gemacht werden [W, C, I, G, D]. Da es sich jedoch um eine Site handelt, müssen diese Listen verkürzt werden. [G, I, L, D]wird mit a bezeichnet Qund [W, C, I, G, D]wird mit a bezeichnet 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

Wertung

Da es unvernünftig wäre, Sie zu bitten, alle diese Rezepte zu machen, müssen Sie nur die Rezepte machen, die Sie wollen! Aber natürlich, je mehr Sie tun, desto besser ist Ihre Punktzahl.

Punktzahl ist definiert als

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

Dies könnte beispielsweise eine Einreichung sein.

input()
print('S')

Da Sie davon ausgehen können, dass die übergebene Eingabe eine Eingabe ist, die sie verarbeiten kann ( ----W--W-), wird sie immer ausgegeben S, was äquivalent zu ist sticks. Dies würde 18/1 = 18 ergeben .

Sie müssen Eingaben vornehmen , um ein gültiges Programm zu sein, und Sie müssen in der Lage sein, mindestens 5 verschiedene Eingaben zu verarbeiten.

Die Person mit der niedrigsten Punktzahl gewinnt.

Regeln

  • Die niedrigste Punktzahl gewinnt
  • Sie können Eingaben mit jeder akzeptierten Methode (Funktionsparameter, STDIN usw.) vornehmen.
  • Sie können Eingaben nur in einer der oben genannten Formen vornehmen. Es ist nicht zu restriktiv und sollte praktikabel sein
  • Standardlücken sind nicht zulässig
  • Sie müssen Eingaben machen
  • Sie müssen mindestens 5korrekte Ergebnisse ausgeben, um sich als Teilnehmer zu qualifizieren.
  • Bei formlosen Rezepten, z. B. Goldnuggets, gelten unterschiedliche Kombinationen nicht als unterschiedliche Rezepte. ----W----ist das gleiche (rezeptweise) wie --W------und ist nur 1 Rezept.
  • Auf der Kehrseite dieses, für Rezepte , die mehr als ein Material, wie beispielsweise Materialblocks verwenden, die jeweils unterschiedliches Material zählt als anderes Rezept, was bedeutet , dass IIIIIIIIInicht das gleiche ist (Rezept-wise) als RRRRRRRRR.

Viel Glück, Minecrafters!

Caird Coinheringaahing
quelle
1
Sticks durch seine Handarbeit können W--W-----, -W--W----, --W--W---, ---W--W--, ----W--W-, oder -----W--W. Müssen wir nur eine oder alle behandeln?
Dienstag,
Darf ich Eingaben als ein Array von Zeichenfolgen annehmen? (zB ["WWW", "CIC", "CRC"])
dzaima
1
Antworten in Minecraft Code, 5 Bytes
Magic Octopus Urn
1
@MagicOctopusUrn Minecraft ist in Java geschrieben, das ist also auf keinen Fall möglich: p
dzaima
1
Minecraft-Code: Die Eingabe erfolgt als Konfiguration in einer Handwerkstabelle, und die Ausgabe ist die Ausgabe aus der Handwerkstabelle. Einfach. : p / s
HyperNeutrino

Antworten:

6

Python 2 , Score: 0,0636347

715 Bytes, alle 106 Rezepte

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]

Probieren Sie es online!

Behandelt alle angegebenen Rezepte, einschließlich Materialvarianten.

Erstellt ein Wörterbuch aller Arbeitsrezepte (Länge 9).

Die unförmigen Rezepte werden eingefügt, indem die Eingabezeichenfolge sortiert und mit dem Wörterbuch abgeglichen wird.

Bearbeiten: Auf String-Komprimierung umgestellt und dank notjagan 7 Bytes im Code gespeichert

TFeld
quelle
Ich zähle 110 Rezepte
dzaima
-7 Bytes .
Notjagan
@ Dzaima Armor hat nur 4 Händler (GILD), also zähle ich 106
TFeld
1
@TFeld oh yeah, Kohlenrüstung existiert nicht: |
Dzaima
3

Mathematica, Kerbe: 0.0482378 0,0540228 0,0543788

542 607 611 Bytes, alle 106 Rezepte

-4 Bytes zum Umordnen komprimierter Daten

-65 Byte für den Verlust der Fähigkeit, mit ungültigen Eingaben umzugehen

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

Eingabe als 1D-Liste übernehmen {"W", "W", "", "", ...}

Erweiterte und übersichtliche Version:

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

Der große Uncompress ist eine String-Tabelle aller Kombinationen, die zusammengefügt sind.

"        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 Sucht nach Übereinstimmungen in der Reihenfolge: Eingabe selbst, sortierte Eingabe (für formloses Rezept), Rüstung, Waffe, Druckplatte.

# & @@ Join @@ Gibt die Position des ersten Auftretens zurück.

/9+8/9berechnet den Index in der Ergebnistabelle und StringTakeübernimmt das Zeichen an dieser Position.

Keyu Gan
quelle
2

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

Erläuterung:

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

Probieren Sie es hier aus! oder testen Sie, indem Sie Folgendes ausführen (was sagt, was nicht stimmt):

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
quelle
0

Jelly , Punktzahl 0.00173611111

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

OṢḄỌ

Übernimmt die Eingabe als Zeichenfolge mit Bindestrichen für Leerzeichen, z -----WWWW.

Ich denke, das ist gültig, weil die Herausforderung sagt

Die Ausgabe ist das Element, das aus der Eingabe in jeder gewünschten Form erstellt wird , sofern klar ist, was dies bedeutet. (Persönlich würde ich meine 1-Buchstaben-Abkürzungen der Artikel verwenden)

Die 1-Buchstaben-Abkürzungen sind ungefähr so ​​verwirrend wie die Ausgabe, daher ist diese Ausgabe offensichtlich genug, was sie bedeutet.

Dies setzt voraus, dass es sich bei der Eingabe um eine Eingabe handeln kann, die das Programm wie von angegeben verarbeiten kann

Sie können davon ausgehen, dass es sich bei der übergebenen Eingabe um eine Eingabe handelt, die verarbeitet werden kann

Probieren Sie es online!

Test Suite (Kopf- und Fußzeile verschönern die Ausgabe) Dies erledigt alle 48 Rezepte und gibt deren Namen an.

Wie es funktioniert

Dies ist wirklich nur eine sehr schlechte Hash-Funktion.

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
quelle
@ Downvoter Warum die Downvote? Dies entspricht meines Wissens den Spezifikationen.
fireflame241