मैं कैसे शिल्प करूँ?


21

Minecraft में 21 आइटम हैं जो आप केवल लकड़ी का उपयोग करके शिल्प कर सकते हैं और लकड़ी से तैयार की गई वस्तुएं:

कुल्हाड़ी की
नाव
कटोरा
बटन
छाती
crafting टेबल
दरवाजा
बाड़
गेट
हो
सीढ़ी
पिकैक्स
पट्टिका
दबाव प्लेट
फावड़ा
साइन
स्लैब
सीढ़ियों
छड़ी
तलवार
जाल

यह सूची मानती है कि 6 विभिन्न प्रकार के लकड़ी के तख्तों / स्लैब / दरवाजों / आदि। सभी एक ही आइटम के रूप में गिनते हैं। इसके बारे में सोचने का एक और तरीका यह है कि आप केवल एक प्रकार की लकड़ी तक पहुंच प्राप्त करें।

इन 21 वस्तुओं में से प्रत्येक में एक अलग क्राफ्टिंग नुस्खा है । हम इन व्यंजनों में से प्रत्येक का प्रतिनिधित्व वर्णों के 2 × 2 या 3 × 3 ग्रिड के रूप में करेंगे .WPS., एक खाली क्राफ्टिंग स्लॉट है Wके लिए है लकड़ी , Pके लिए है लकड़ी के तख्तों , और Sके लिए है चिपक जाता है । इन विशेष वस्तुओं के लिए किसी अन्य वर्ण की आवश्यकता नहीं होती है।

उदाहरण के लिए, यह एक छाती के लिए नुस्खा है :

PPP
P.P
PPP

चुनौती

एक कार्यक्रम लिखें जो हमारे 21 आइटमों में से एक के नाम पर होता है, ठीक जैसा कि यह ऊपर दिखाई देता है, और उस आइटम के लिए एक मान्य क्राफ्टिंग नुस्खा प्रिंट करता है।

क्राफ्टिंग रेसिपी ट्रांसलेशन इन्वारिएंट हैं, इसलिए यदि इनपुट है fence, तो ये दोनों मान्य हैं:

PSP
PSP
...
...
PSP
PSP

यदि एक नुस्खा 2 × 2 ग्रिड में फिट बैठता है, तो आप इसे 2 × 2 या 3 × 3 ग्रिड में आउटपुट कर सकते हैं। जैसे stick:

.P
.P
...
.P.
.P.

व्यंजनों को क्षैतिज रूप से (समरूपता की एक ऊर्ध्वाधर रेखा के आसपास) भी प्रतिबिंबित किया जा सकता है, हालांकि यह केवल कुल्हाड़ी, कुदाल और सीढ़ियों के लिए एक अंतर बनाता है। जैसे hoe:

.PP
.S.
.S.
PP.
.S.
.S.

तो ग्रिड में फिट होने वाले किसी भी रेसिपी को आउटपुट करना और सही आकार (अनुवाद और मिररिंग को नजरअंदाज करना) आपके प्रोग्राम को करने की जरूरत है। ये सभी रेसिपी हैं जिन्हें आधिकारिक गेम मान्यता देगा। (ध्यान दें कि व्यंजनों को घुमाया नहीं जा सकता है या लंबवत रूप से प्रतिबिंबित नहीं किया जा सकता है।)

विवरण

  • स्टड या कमांड लाइन से इनपुट लें। आप मान सकते हैं कि इनपुट हमेशा मान्य है। इनपुट (जैसे "chest") के आसपास आवश्यक उद्धरण ठीक है।
  • वैकल्पिक अनुरेखण न्यूलाइन के साथ stdout (या निकटतम वैकल्पिक) के लिए आउटपुट।
  • बाइट्स में सबसे कम सबमिशन जीतता है।

उदाहरण

यहां सभी इनपुट और नमूना आउटपुट की सूची दी गई है:

axe
PP.
SP.
S..

boat
P.P
PPP
...

bowl
P.P
.P.
...

button
P.
..

chest
PPP
P.P
PPP

crafting table
PP
PP

door
PP.
PP.
PP.

fence
PSP
PSP
...

gate
SPS
SPS
...

hoe
PP.
S..
S..

ladder
S.S
SSS
S.S

pickaxe
PPP
.S.
.S.

planks
W.
..

pressure plate
PP
..

shovel
P..
S..
S..

sign
PPP
PPP
.S.

slab
PPP
...
...

stairs
P..
PP.
PPP

stick
P.
P.

sword
P..
P..
S..

trapdoor
PPP
PPP
...

1
आपके आउटपुट नमूनों को देखते हुए, मुझे कोई अपवाद नहीं दिखता है। सभी को प्रतिबिंबित किया जा सकता है, लेकिन अधिकांश सममित हैं।
edc65

चूंकि "बाइट में" UTF-8 काउंटर के लिंक होते हैं मतलब हम करता है UTF-8 में बाइट्स गिनती करने के लिए?
मार्टिन एंडर

केवल पूर्ण कार्यक्रम? कोई कार्य नहीं?
एलेक्स ए।

@ एलेक्स ए राइट।
केल्विन के शौक

@ मार्टिनबटनर बनाओ कि नहीं। (आप जानते हैं कि, हालांकि यह अब कोई मायने नहीं रखता ।: पी)
केल्विन के शौक

जवाबों:


15

CJam, 100 96 94 91 बाइट्स

"+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/l72b970%={Z"O>HVa=4a"98bZb+"P.SW"f=3/=}%N*

StackExchange मैंगप्रिंट्स को unprintables करता है, इसलिए यहां कॉपी और पेस्ट करने के बजाय पर्मलिंक है । इसके अतिरिक्त, यहाँ परीक्षण कार्यक्रम है

(मेरे बारे में बताने के लिए @Optimizer का धन्यवाद fऔर CJam की मॉडो इंडेक्सिंग के बारे में बताने के लिए @ मार्टिनबरनटर।)

साइगविन का hexdump:

0000000 0122 2b1e 571a 6308 621f 4b05 2046 5141
0000010 1608 1848 5f3b 1115 1d7b 4d47 4c38 6679
0000020 5f3d 6d74 0c54 226e 3431 6231 6244 2f33
0000030 376c 6232 3739 2530 7b3d 225a 1b4f 483e
0000040 6156 343d 2261 3839 5a62 2b62 5022 532e
0000050 2257 3d66 2f33 7d3d 4e25 002a          
000005b

व्याख्या

व्यंजनों के निर्माण के लिए, हम 13 अलग-अलग पंक्तियों का उपयोग करते हैं (यह भी सूचीबद्ध है कि यह स्पष्टीकरण क्यों है कि यह न्यूनतम है):

0    W..    (required by planks)
1    ...    (required by many)
2    .PP    (required by many)
3    PPP    (required by chest)
4    .P.    (required by bowl)
5    ..P    (required by stairs)
6    S.S    (required by ladder)
7    SSS    (required by ladder)
8    .S.    (required by sign)
9    .SP    (required by axe)
10   P.P    (required by bowl)
11   PSP    (required by fence)
12   SPS    (required by gate)

हम पंक्तियों के माध्यम से सांकेतिक शब्दों में बदलना Z"O>HVa=4a"98bZb+"P.SW"f=3/, जो देता है

["W.." "..." ".PP" "PPP" ".P." "..P" "S.S" "SSS" ".S." ".SP" "P.P" "PSP" "SPS"]

पहला बिट "+WcbKF AQH;_{GM8Lyf=_tmTn"141bDb3/व्यंजनों को एनकोड करता है, दे रहा है

[[3 3 8] [1 0 0] [1 0 0] [3 8 8] [1 3 3] [2 8 8] [6 7 6] [1 0 0] [1 10 3] [1 1 2] [2 2 2] [1 11 11] [1 1 4] [1 0 1] [1 10 4] [2 9 8] [3 10 3] [1 2 2] [4 8 8] [1 4 4] [1 1 3] [1 12 12] [4 4 8] [5 2 3]]

ध्यान दें कि पहली प्रविष्टि कैसी है [3 3 8], जिसके लिए नुस्खा है sign

l72b970%=इनपुट में पढ़ता है, फिर काम करने के लिए कुछ जादू लागू करता है जो सूची से लेने के लिए नुस्खा है। भले ही हमारे पास केवल 21 व्यंजनों की सूची में 24 हैं - अतिरिक्त कुछ स्पॉट एस के अनुरूप हैं [1 0 0]

इनपुट को पढ़ने के बाद, नुस्खा उठाकर और व्यंजनों को पंक्तियों में परिवर्तित करके, हमने कुछ नए अंक N*और ऑटो-प्रिंट में डाल दिया ।


सीजेएम, 89 86 83 बाइट्स

'W"9=!%)S@*m:@DQzk?V$%qyR55AmVEpPNW}"132b3b"P.S"f=+3/3/l57b5342%24%(=N*

... यह पता चला है कि सभी आउटपुट हार्डकोडिंग CJam में थोड़ा बेहतर है। मैं बहुत निराश हूं।

एक बार फिर हम कुछ unprintables तो यहाँ है स्थायी लिंक और परीक्षण कार्यक्रम

साइगविन का hexdump:

0000000 5727 0222 3d39 1021 2925 531e 2a40 6d0b
0000010 403a 1844 7a51 3f6b 2456 7125 5279 3506
0000020 4135 046d 1a56 7045 1550 164e 1057 7d01
0000030 3122 3233 3362 2262 2e50 2253 3d66 332b
0000040 332f 6c2f 3735 3562 3433 2532 3432 2825
0000050 4e3d 002a                              
0000053

व्याख्या

आउटपुट बेस 3 का उपयोग करके एन्कोड Wकिया गया है, पंक्तियों को देने के लिए स्ट्रिंग 3s में विभाजित होने से पहले लोन से जुड़ा हुआ है, और व्यंजनों को देने के लिए पंक्तियों को 3s के समूहों में विभाजित किया गया है।

ऊपर की तरह, नुस्खा चुनने के लिए बेस कंवर्टिंग और मोडुलो मैजिक का उपयोग किया जाता है। 22 व्यंजनों (एक अप्रयुक्त) हैं, लेकिन हमें मॉडुलो 24 लेने की आवश्यकता है, इसलिए हमें वास्तव में 24%मॉडुलो इंडेक्सिंग पर भरोसा करने के बजाय इस समय को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है ।


क्या आप एक हेक्सडंप के साथ पोस्ट कर सकते हैं xxd? पर्मलिंक फ़ायरफ़ॉक्स पर काम नहीं करता है।
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ n @h ona̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ दुर्भाग्य से मैं विंडोज पर हूं, इसलिए मैंने अगली सबसे अच्छी बात रखी है जिसे मैं अभी के लिए प्रबंधित कर सकता हूं।
Sp3000

6

जावास्क्रिप्ट (ईएस 6), 235 241 262

उस नियम का और भी अधिक संपादन करें कि इनपुट हमेशा मान्य होता है: केवल 1 आइटम है जिसमें डब्ल्यू की आवश्यकता होती है, और जो विशेष आवरण हो सकता है। इसलिए आउटपुट ग्रिड को 9 अंकों के आधार 3 नंबर के रूप में एन्कोड किया गया है।

पॉपअप के माध्यम से I / O के साथ 235 बाइट्स।

w=prompt();
"926a722boa182bo2b19520ch224c6056d644f448g764h7651l2294pi8pr758sh2915si26sl19172sta56st785s728t"
.replace(/(\d+)(\D+)/g,(c,p,m)=>w.search(m+z)||[for(c of'11\n11\n111')z+='.SP'[~~p%3]+(p/=3,-c?'':c)],z='');
alert(&&z||'W.\n..')

एक परीक्षण योग्य फ़ंक्शन के रूप में 221 बाइट्स।

F=w=>"926a722boa182bo2b19520ch224c6056d644f448g764h7651l2294pi8pr758sh2915si26sl19172sta56st785s728t"
.replace(/(\d+)(\D+)/g,(c,p,m)=>w.search(m+z)||[for(c of'11\n11\n111')z+='.SP'[~~p%3]+(p/=3,-c?'':c)],z='')&&z||'W.\n..'

आउटपुट हमेशा 3x3 ग्रिड के रूप में। 4 उपलब्ध आउटपुट सिम्बोल के साथ, ग्रिड को 3x3x2 (18) बिट संख्या के रूप में एन्कोड किया गया है। और जैसा कि इनपुट को हमेशा मान्य होना चाहिए, स्ट्रिंग को नंगे न्यूनतम पर संग्रहीत किया जाता है।

फ़ायरफ़ॉक्स / फायरबग कंसोल में टेस्ट करें

;["axe", "boat", "bowl", "button", "chest", "crafting table", "door", 
 "fence", "gate", "hoe", "ladder", "pickaxe", "planks", "pressure plate", 
 "shovel", "sign", "slab", "stairs", "stick", "sword", "trapdoor"]
.forEach(v=>console.log(v+'\n'+F(v)))

उत्पादन

axe
PP.
SP.
S..

boat
P.P
PPP
...

bowl
P.P
.P.
...

button
P..
...
...

chest
PPP
P.P
PPP

crafting table
PP.
PP.
...

door
PP.
PP.
PP.

fence
PSP
PSP
...

gate
SPS
SPS
...

hoe
PP.
S..
S..

ladder
S.S
SSS
S.S

pickaxe
PPP
.S.
.S.

planks
W.
..

pressure plate
PP.
...
...

shovel
P..
S..
S..

sign
PPP
PPP
.S.

slab
PPP
...
...

stairs
P..
PP.
PPP

stick
P..
P..
...

sword
P..
P..
S..

trapdoor
PPP
PPP
...

2

पायथन, 305 बाइट्स

n=2**(23-hash(raw_input())/535366%24);print "W..\n...\n..." if n==1024 else "\n".join(["".join(['P' if [16706041,9740732,7635081,7399784,5267501,7372808,57344,57344,49152][j+i*3]&n==n else 'S' if [6,2097152,6,131078,10748162,6,131138,9699584,2][j+i*3]&n==n else '.' for j in range(3)]) for i in range(3)])

व्याख्या

# Compute a unique number for each item.
# 535366 and 24 are precalculated values that were bruteforced.
n = 23 - hash(raw_input()) / 535366 % 24

# Use precalculated tables that represent which ingredient in this recipe of
# an item. The nth bit of p[0] will be set if the first ingredient of the item
# associated with the unique number n is some planks. It works the same for s.
p = [16706041,9740732,7635081,7399784,5267501,7372808,57344,57344,49152]
s = [6,2097152,6,131078,10748162,6,131138,9699584,2]

# Handle planks differently, as it is the only one using wood.
if n == 10:
    print "W..\n...\n..."
else:
    for i in xrange(3):
        line = ""
        for j in xrange(3):
            # Now we can check if the ingredient is some planks...
            if p[j + i * 3] & 1 << n == 1 << n:
                line += 'P'
            # ...or if it is some sticks...
            elif s[j + i * 3] & 1 << n == 1 << n:
                line += 'S'
            # ...or if it is simply empty.
            else:
                line += '.'
        print line

टिप्पणी

यह कोड निश्चित रूप से सबसे कठिन नहीं है, लेकिन यह ठीक काम करता है। मैं संतुष्ट हूं। :)

पायथन, 282 बाइट्स

n=hash(raw_input())/808789215%21;print "\n".join(["P.PPPP...P..S..S..PP.......PP.PP....P........SPSSPS...PPPPPP.S.PP.PS..S.W........PPPPPP...PP..S..S.P..PP.PPPS.SSSSS.SPPP.S..S.PPP......P..P..S..PPPP.PPPPPSPPSP...PP.PP.PP.P..P.....P.P.P...."[9*n+i*3:9*n+(i+1)*3] for i in range(3)])

एक अद्वितीय पहचानकर्ता उत्पन्न करने के लिए एक ही तकनीक का उपयोग करना लेकिन एक सरणी में नुस्खा को सीधे देखना। यह मेरे पहले कोड की तुलना में बहुत सरल और थोड़ा अधिक कॉम्पैक्ट है।


'तख्तों' के लिए एक विशेष मामला होने से आप स्ट्रिंग को छोटा कर सकते हैंW.\n..
edc65
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.