एक ASCII मर रोल


16

इस चुनौती में, आपको एक यादृच्छिक डाई रोल की एससी-आर्ट को आउटपुट करना होगा।

इस तरह:

   ________
  /\       \
 /  \   6   \
{ 4  }-------}
 \  /   5   /
  \/_______/

कृपया ध्यान दें कि:

   ________
  /\       \
 /  \   3   \
{ 4  }-------}
 \  /   5   /
  \/_______/

अमान्य आउटपुट है, क्योंकि यह मरने पर संभव परिणाम नहीं है

कर रहे हैं 6(faces that could be up)*4(faces that could be the left face after the top is determined)*1(faces that could be the right face after the other two are determined)= मरने रोल के 24 संभावनाओं।

आपके प्रोग्राम को इन डाई रोलों में से एक को आस्की आर्ट के रूप में आउटपुट करना चाहिए (ऊपर की तरह, नीचे दिए गए एक्स और ज़ी के साथ मॉडल की तरह), प्रत्येक आउटपुट के साथ> 0 होने की संभावना, लेकिन संभावना नहीं है भी होना चाहिए (उन्हें वास्तविक जीवन के विपरीत ट्रिक पासा होने दिया जाता है)। आपका प्रोग्राम अमान्य डाई रोल, या नॉन डाई रोल आउटपुट नहीं कर सकता है। आपके प्रोग्राम में वैध रोल के आउटपुट की 1 की संभावना होनी चाहिए

कृपया ध्यान दें कि आपके मरने के लिए जरूरी नहीं है कि वह दाएं हाथ का हो, जैसा कि पहले चित्र में दिखाया गया है। (दाएं-बाएं और बाएं हाथ से मरने का वर्णन करें)

right-handed die
   ________
  /\       \    net
 /  \   z   \     _|4|_ _
{ x  }-------}   |6|2|1|5|
 \  /   y   /      |3|
  \/_______/


left handed die
   ________
  /\       \    net
 /  \   y   \     _|3|_ _
{ x  }-------}   |6|2|1|5|
 \  /   z   /      |4|
  \/_______/

यदि आपकी मृत्यु को छोड़ दिया गया है, तो निम्न मान्य आउटपुट है, लेकिन यह नहीं कि आपकी मृत्यु सही है:

   ________
  /\       \
 /  \   2   \
{ 1  }-------}
 \  /   3   /
  \/_______/

जब आप बाएं हाथ या दाएं हाथ का चयन कर सकते हैं, तो आपकी मृत्यु सुसंगत होनी चाहिए: यह बाएं से दाएं या इसके विपरीत नहीं बदल सकती है

निम्नलिखित मरने के लिए वैध आउटपुट की एक सूची है। XYZ के पदों के लिए उपरोक्त चित्रों का संदर्भ लें:

X-Y-Z
-----
5-4-1
1-5-4
4-1-5

5-6-4
4-5-6
6-4-5

5-3-6
6-5-3
3-6-5

5-1-3
3-5-1
1-3-5

2-6-3
3-2-6
6-3-2

2-4-6
6-2-4
4-6-2

2-1-4
4-2-1
1-4-2

2-3-1
1-2-3
3-1-2

फिर से यह , इसलिए कम बाइट्स बेहतर है


4
सॉल्वर को तीसरे दो चेहरे के लिए एक सूत्र में दिलचस्पी हो सकती है जो अन्य दो दिए गए हैं।
xnor

@xnor और जैसा कि मुझे लगता है कि यह एक मजबूत तर्क है कि यह प्रश्न एक डुप्लिकेट है
डिजिटल ट्रामा

1
मैं इस प्रक्षेपण में घन निकालने के लिए किसी भी ASCII कला के बारे में नहीं जानता। हालांकि छोटे आकार के साथ, मुझे नहीं पता कि पायथन जैसी भाषाओं में हार्डकॉडिंग से बेहतर कोई कर सकता है या नहीं।
xnor


@xnor वास्तव में, यहां तक ​​कि कुछ 7 और 8 चार क्रमों के साथ।
जोनाथन एलन

जवाबों:


8

पायथन 3, 197 196 192 बाइट्स

from random import*;c=choice;r=range(1,7);u=c(r);l=c(list(set(r)-{u,u^7}));print(r'''   ________
  /\       \
 /  \%4d   \
{ %d  }-------}
 \  /%4d   /
  \/_______/'''%(u,l,3*u*l*(u*u-l*l)%7))

इसे आइडोन पर टेस्ट करें

दाएं हाथ (स्वैप करके एक लेफ्टी करने के लिए स्विच u*uके साथ l*lअंतिम पंक्ति पर)

हरा होने के लिए बाध्य - लेकिन चलो पासा रोलिंग मिल आह - विशेष रूप से मेरे सभी कच्चे जा रहा है और ओल्ड-स्कूल सभी बाइट्स सहेजने में विफल स्वरूपण का उपयोग कर को छोड़कर गोल्फ करने का प्रयास किया गया ASCII के बाद से;
- n00b के लिए किसी भी आगे गोल्फ युक्तियाँ खुशी से सराहना की।


1
आप का उपयोग करके 1 बाइट बचा सकते हैं from random import*और c=choice
एक्रोलिथ

@daHugLenny - अब मैं उस सफ़ेद स्थान को याद नहीं कर सकता था *; टा!
जोनाथन एलन

1
PPCG में आपका स्वागत है! अच्छी पहली पोस्ट!
GamrCorps

धन्यवाद @GamrCorps - मुझे कुछ समय के लिए कुछ करने का अर्थ है ... अब मेरे पास एक सुरक्षित प्रश्न पर एक सार्थक समाधान पोस्ट कर सकता है ...: D
जोनाथन एलन

2
3 जगह होने के बाद और फिर %d, %4dइसके बजाय का उपयोग करें और यह आपके लिए इसे ठीक से पैड देगा। आप इसे मरने के अन्य हिस्सों के लिए भी लाभ उठाने में सक्षम हो सकते हैं।
वैल्यू इंक

5

सी, 177

f(r){r=rand()%24;r=(5545>>r%4*3&63^256-(r*2&8))*513>>r/8*3;printf("   ________\n  /\\%9s /  \\%4d   \\\n{ %d  }-------}\n \\  /%4d   /\n  \\/_______/","\\\n",7&r,7&r/8,7&r/64);}

परीक्षण कार्यक्रम में

f(r){r=rand()%24;
r=(5545>>r%4*3&63^256-(r*2&8))*513>>r/8*3;
printf("   ________\n  /\\%9s /  \\%4d   \\\n{ %d  }-------}\n \\  /%4d   /\n  \\/_______/","\\\n",7&r,7&r/8,7&r/64);}

j;
main(){
    for(j=99;j--;puts(""))f();
}

व्याख्या

r=                    \\after calculation, assign to r (in order to use only one variable.)
(5545>>r%4*3&63       \\5545 is 12651 in octal. Select 2 digts for the equator
^256-(r*2&8))         \\if 4's bit of r is 0, prepend 4=256/64. Else prepend 3 and reverse one of the faces by xoring with 7. 256-8 = 248 = 3*64+7*8.
*513                  \\now we have a 3 digit octal number. duplicate all digits by multiplying by 1001 octal.
>>r/8*3               \\rightshift 0,1 or 2 digits to rotate. 

5

जावास्क्रिप्ट 238 232 232 207 बाइट्स

var r=24*Math.random()|0,o=r%3,b=r-o,v="123513653263154214624564";console.log(`   ________
  /\\       \\
 /  \\   %s   \\
{ %s  }-------}
 \\  /   %s   /
  \\/_______/`,v[r],v[b+(o+1)%3],v[b+(o+2)%3])

जो जब अपवित्र है:

var r = 24 * Math.random() | 0,
    o = r % 3,
    b = r - o,
    v = "123513653263154214624564";
console.log(
`   ________
  /\\       \\
 /  \\   %s   \\
{ %s  }-------}
 \\  /   %s   /
  \\/_______/`,

    v[r],
    v[b+(o+1)%3]
    ,v[b+(o+2)%3]
)

कलन विधि

इस बात पर विचार करें कि मरने के 8 कोने वाले चौराहों में से प्रत्येक में, प्रतिच्छेदन डाई फेस वैल्यू तय किए गए हैं, लेकिन 3 में से किसी में भी घूम सकते हैं। उदाहरण के लिए, "1", "2", "3" कोने को देखने के दौरान, मरने को कोने के माध्यम से एक अक्ष के बारे में घुमाया जा सकता है और विपरीत कोने से बाहर "1", "2" या "3" दिखाने के लिए ASCII कला के शीर्ष पर।

vहार्ड कोड डाई चेहरों के लिए जो प्रत्येक कोने पर प्रतिच्छेद करते हैं, bएक यादृच्छिक कोने की शुरुआत के लिए एक ऑफसेट है, और oकोने के डेटा के भीतर रोटेशन की शुरुआत है। ASCII कला एक console.logप्रारूप स्ट्रिंग का उपयोग करके कंसोल को लिखा जाता है ।


आप शायद `उद्धरण का उपयोग करके कुछ बाइट्स दाढ़ी कर सकते हैं जो \nहर समय लिखने के बजाय शाब्दिक न्यूलाइन वर्णों के उपयोग की अनुमति देते हैं ।
नील

@ नील को सबसे ज्यादा सराहना मिली, इसने अच्छा काम किया। इसके अलावा ट्रेलिंग';'
traktor53

4

TSQL 308 बाइट्स

DECLARE @ char(87)=(SELECT
REPLACE(REPLACE(REPLACE('   ________
  /\       \ 
 /  \   7   \ 
{ 8  }-------}
 \  /   9   /
  \/_______/',7,a),8,b),9,3*ABS(a*a*a*b-a*b*b*b)%7)
FROM(SELECT*,SUBSTRING(REPLACE(STUFF(123456,a,1,''),7-a,''),CAST(RAND()*4as int)+1,1)b
FROM(SELECT CAST(RAND()*6as int)+1a)x)x)PRINT @

280 बाइट्स (सर्वर प्रबंधन स्टूडियो में: प्रश्न - पाठ का परिणाम)

SELECT
REPLACE(REPLACE(REPLACE('   ________
  /\       \ 
 /  \   7   \ 
{ 8  }-------}
 \  /   9   /
  \/_______/',7,a),8,b),9,3*ABS(a*a*a*b-a*b*b*b)%7)
FROM(SELECT*,SUBSTRING(REPLACE(STUFF(123456,a,1,''),7-a,''),CAST(RAND()*4as int)+1,1)b
FROM(SELECT CAST(RAND()*6as int)+1a)x)x

नोट: प्रिंट और डिक्लेयर पार्ट को हटाकर - परिणाम को सीधे सेलेक्ट करें। हालांकि यह फिडल में काम नहीं करेगा

बेला


शायद आप ABS(a^3*b-a*b^3)4 बाइट्स को बचाने के लिए बदल सकते हैं ? (मुझे यकीन नहीं है - फिदेल में काम करने के लिए लगता है, लेकिन यह केवल मुझे ए, बी, सी = 5,1,3 का एक ही रोल दे रहा है, इसलिए मुझे गलत हो सकता है)
जोनाथन एलन

@JonathanAllan आपकी टिप्पणी के लिए धन्यवाद। घातीय को TSQL में POWER (a, 3) लिखा जाता है। ^ का एक अलग अर्थ है
t-clausen.dk

4

जावास्क्रिप्ट, 251 बाइट्स

r="replace";a=()=>(0|Math.random()*6)+1;b=(x,y)=>3*x*y*(x*x+6*y*y)%7;u=()=>{x=a(),y=a();z=b(x,y);if(z==0)u();return"   ________\r\n  \/\\       \\\r\n \/  \\   1   \\\r\n{ 2  }-------}\r\n \\  \/   3   \/\r\n  \\\/_______\/"[r](1,x)[r](2,y)[r](3,z);}

कॉल का उपयोग करके u();
यह लंबा है, लेकिन यह एक उत्तर है, और मैंने लंबे समय में उत्तर नहीं दिया है।


Ideone पर आउटपुट टेस्ट के ऊपरी-बाएँ एक स्थान गुम है ।
जोनाथन एलन

a=()=>(0|Math.random()*6)+1;
traktor53

3

रूबी, 150 बाइट्स

सभी स्ट्रिंग स्वरूपण दुरुपयोग !!!

अंतिम संख्या प्राप्त करने के फॉर्मूले का श्रेय यहां @xnor को जाता है

u=1+rand(6)
l=([*1..6]-[u,u^7]).sample
$><<'%11s
  /\%8s
 /  \%4d%4s
{ %d  }%s}
 \  /%4d%4s
  \/%s/'%[?_*8,?\\,u,?\\,l,?-*7,3*u*l*(u*u-l*l)%7,?/,?_*7]

फॉर्मूला के लिए कोई श्रेय xnor को नहीं जाता है
जोनाथन एलन

@JonathanAllan मुझे उचित क्रेडिट की ओर इशारा करने के लिए धन्यवाद। किसी भी दर पर, मैंने इस उत्तर को कैसे स्वरूपित किया, इससे अधिक मेरे मन में क्या था जब मैंने कहा कि आप शायद बाइट्स बचाने के लिए अपने लाभ के लिए स्ट्रिंग स्वरूपण का अधिक लाभ उठा सकते हैं।
वैल्यू इंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.