साइड व्यू से पासा मान निर्धारित करें


52

प्रोग्राम या फ़ंक्शन लिखें जो पूर्णांक के रूप में बाईं और दाईं ओर का मान लेगा (1-6) और शीर्ष पर वापसी मूल्य।

पासा लेआउट:

    +---+
    | 1 |
+---+---+---+---+
| 2 | 3 | 5 | 4 |
+---+---+---+---+
    | 6 |
    +---+

  ,^.
<´ 5 `>  <-- Top value
|`._,´|
.6 | 4,  <-- Side values
 `.|,´

इसलिए इनपुटिंग 6 4वापस आएगी 5

आदेश महत्वपूर्ण है:

2 3 -> 1
3 2 -> 6

प्रोग्राम को अमान्य इनपुट मानों के साथ काम नहीं करना है।

स्पष्ट दृष्टिकोण को हतोत्साहित करने के लिए (सभी संयोजनों के साथ तालिका का उपयोग करते हुए), किसी भी निर्मित पाठ एन्कोडिंग या डी / संपीड़न रूटीन या बेस एन्कोडिंग या आकार को कम करने के लिए इसी तरह के कुछ भी उपयोग करने की अनुमति नहीं है। ध्यान दें कि तालिका का उपयोग करना अभी भी अनुमत है और अपने स्वयं के अपघटन को रोल करने की भी अनुमति है, जब तक कि यह कुछ तैयार लाइब्रेरी फ़ंक्शन का उपयोग नहीं किया जाता है।

संदर्भ उद्देश्यों के लिए, यहां सभी संयोजनों की तालिका (यानी सभी संभावित इनपुट और आउटपुट) हैं:

23, 35, 42, 54 -> 1
14, 31, 46, 63 -> 2
12, 26, 51, 65 -> 3
15, 21, 56, 62 -> 4
13, 36, 41, 64 -> 5
24, 32, 45, 53 -> 6

सबसे छोटा कोड जीतता है, और मानक खामियां लागू होती हैं।


इसलिए मैं सभी संयोजन के साथ एक तालिका का उपयोग कर सकता हूं - 1 ^ ^?
dwana

हां, आप तालिका का उपयोग कर सकते हैं। लेकिन आप इसे छोटा करने के लिए बिल्टिन कंप्रेशन रूटीन का उपयोग नहीं कर सकते हैं।
user694733

जवाबों:


59

अजगर, ३०

lambda a,b:a^b^7*(2<a*a*b%7<5)

कोई लुकअप नहीं, बस थोड़ा कोसना।

विपरीत चेहरे जोड़े में आते हैं जो एक-दूसरे के तीन-बिट पूरक होते हैं, जिसका अर्थ है कि वे XOR से 7 हैं।

1,6
2,5
3,4

एक सेट से दो चेहरों को देखते हुए, हम दूसरे सेट से एक चेहरा प्राप्त करना चाहते हैं। इसके लिए (1,2,3), हम XOR ( ^) के साथ ऐसा कर सकते हैं । तो, ^तीन-बिट पूरक तक सही उत्तर देता है, अर्थ x^7। हम सशर्त रूप से पूरक हो सकते हैं x^7*_

पूरक लेने के लिए या नहीं (7 के साथ XOR) तय करने के लिए, हम जांचते हैं कि क्या ट्रिपल दाहिने हाथ के नियम का उल्लंघन करता है। इसका मतलब है, कि a,bरिवर्स चक्रीय क्रम में जाता है

1,6
2,5
3,4

प्रत्येक पंक्ति को तीन श्रेणियों में से एक के रूप में मानना। चूंकि प्रत्येक पंक्ति में तत्व नकारात्मक मॉड 7 हैं, इसलिए हम उन्हें करके "हैश" कर सकते हैं x*x%7

1,6 -> 1
2,5 -> 4
3,4 -> 2

प्रत्येक रेखा को चक्रीय रूप से पिछले 4 मोडुलो 7 से गुणा करके प्राप्त किया जाता है, इसलिए हम जांच सकते हैं कि क्या यह संबंध यह (b,a)तय करने के लिए है कि क्या पूरक है a*a%7==b*b*4%7:।

यह जाँचने के बराबर है कि क्या, मोडुलो 7, a**2 * b**(-2)बराबर है 4। चूंकि मॉडुलो 6 के b**6बराबर है 1, यह इसके बराबर है a**2 * b**4। चूंकि अन्य संभावित मूल्य 2 है (मामलों की जांच करके), हम जांच सकते हैं कि क्या यह 3 की तुलना में 4 है।


CJam - 26 -ri:Ari:B^7A7A-e<B7B-e<)=*^
ऑप्टिमाइज़र

मैं के बंद एक चार को बचा सकता है min(a,7-a)ऐसा करने से a^7*(a>3)है, लेकिन मुझे लगता है कि वहाँ एक अभी तक कम तरीका होना चाहिए। कोई विचार?
xnor

ऊह, वहाँ है a/4*7^a...
xnor

11
मुझे कभी भी एहसास नहीं हुआ कि पासा चेहरे बिट्स के पास यह संपत्ति थी। अच्छा है!
user694733

1
@ user694733 यह बहुत ही सौभाग्य से काम करता है कि 6 दो की शक्ति से नीचे है।
xnor

64

तीसरे पक्ष के लिए एक अच्छा बहुपद अभिव्यक्ति modulo 7 है, जिसमें दो पक्ष और बी दिए गए हैं ।

3(3-3)आधुनिक7

या तथ्यपूर्ण

3(2-2)आधुनिक7

मॉडुलो 7 नक्शे {0,1,2,3,4,5,6} में शेष हैं।

मैं समझाता हूं कि यह इस गणित एसई उत्तर में क्यों काम करता है , हालांकि मुझे लगता है कि शायद एक क्लीनर तर्क है जो मुझे याद आ रहा है। केवल अन्य दो-टर्म बहुपद काम करता है

(355-3)आधुनिक7

जिसे मैंने मूल रूप से अपने बिट-बैशिंग को अंकगणितीय संचालन में बदलकर पाया , फिर इस रूप के बहुरूपियों पर एक ब्रूट-फोर्स खोज किया जो कि अच्छे व्यक्ति को खोज सके।

कृपया अपनी पसंदीदा भाषा में इस के बंदरगाहों को जोड़ने के लिए स्वतंत्र महसूस करें; यह एक CW पद है।

जे, 9 सिंथेटिका द्वारा

7|3***+*-

मेरी पोस्ट देखें

Dyalog APL, ngn द्वारा 9 (टाइपो Adám द्वारा तय)

7|3×××+×-

J उत्तर के ऊपर से Blatantly चोरी हो गई।

टीआई-बेसिक, 14 टिमटेक द्वारा

7fPart((A³B-AB³)/21

पाइथ, 16 फ्रायअम द इगमैन द्वारा

M%*3-*H^G3*^H3G7

gदो मूल्यों के एक समारोह को परिभाषित करता है ।

गोल्फ टेलर, 18 पीटर पीटर द्वारा (पुराना बहुपद)

~1$*.5?3*@.*@*- 7%

CJam, मार्टिन ब्यूटनर द्वारा 18 (पीटर के गोल्फस्क्रिप्ट से चित्रित) (पुराना बहुपद)

l~1$*_5#3*@_*@*m7%

मार्टिन ब्युटनर द्वारा गणितज्ञ, 20

Mod[+##(#-#2)3##,7]&

हां, यह एक यूनीरी प्लस है, और नहीं, कोई छोटा तरीका नहीं है जो एक यूनीरी प्लस का उपयोग नहीं करता है।

टोसी स्पाइट द्वारा डीसी, 21

sb7+d3^lb*rlb3^*-3*7%

मुझे aयह सुनिश्चित करने के लिए 7 जोड़ना होगा कि अंतर हमेशा सकारात्मक हो (डीसी के पास एक हस्ताक्षरित %ऑपरेटर है)।

जूलिया, मार्टिन ब्यूटनर द्वारा 24 23

f(a,b)=3a*b*(a^2-b^2)%7

CoffeeScript, 28 26 rink.attenders.6 द्वारा

x=(a,b)->3*a*b*(a*a-b*b)%7

जावास्क्रिप्ट (ES6), 28 26 rink.attenders.6 द्वारा

x=(a,b)=>3*a*b*(a*a-b*b)%7

अनिवार्य रूप से कॉफीस्क्रिप्ट के समान ही।

पायथन 28, xnor द्वारा

lambda a,b:3*a*b*(a*a-b*b)%7

बाश, ३१

कुछ खास नहीं:

echo $[3*($1**3*$2-$1*$2**3)%7]

या वैकल्पिक रूप से:

echo $[3*$1*$2*($1*$1-$2*$2)%7]

एक और (लंबा लेकिन शायद दिलचस्प) दृष्टिकोण

निम, सिलेस्टा द्वारा 36

proc(x,y:int):int=3*x*y*(x*x-y*y)%%7

जावा 7, 46 44 रिंक.टेटेंडरी.6 द्वारा

int f(int a,int b){return(a*a-b*b)*a*b*3%7;}

केविन क्रूज़सेन द्वारा जावा 8, 25 23

a->b->(a*a-b*b)*a*b*3%7

PHP, 49 47 rink.attenders.6 द्वारा

function x($a,$b){echo($a*$a-$b*$b)*3*$a*$b%7;}

बैच, 52 अंकल

set/aa=(3*(%1*%1*%1*%2-%1*%2*%2*%2)%%7+7)%%7
echo %a%

सीएमडी मूल रूप से सही मापांक का समर्थन नहीं करता है (इसलिए नकारात्मक संख्या को संभाल नहीं सकता है) - इसलिए %%7+7)%%7

LESS ( पैरामीट्रिक मिक्सिन के रूप में ), 62 60 rink.attenders.6 द्वारा

.x(@a,@b){@r:mod(3*@a*@b*(@a*@a-@b*@b),7);content:~"'@{r}'"}

मेरी पोस्ट नीचे देखें

05AB1E, Emigna द्वारा 10 8 (केविन क्रूज़सेन द्वारा -2 बाइट्स)

nÆs`3P7%

इसे ऑनलाइन आज़माएं।

हास्केल, जेनेरिक डिस्प्ले नाम से 31 27 25

a#b=3*a*b*(a*a-b*b)`mod`7

इसे ऑनलाइन आज़माएं!

एक्सेल, 27 द्वारा वर्निस्क द्वारा

=MOD(3*(A1^3*B1-A1*B1^3),7)

एक्सेल VBA, 25 टेलर स्कॉट द्वारा

?3*[A1^3*B1-A1*B1^3]Mod 7

फोर्थ (gforth) 41 रेफ़ू द्वारा

: f 2>r 2r@ * 2r@ + 2r> - 3 * * * 7 mod ;

इसे ऑनलाइन आज़माएं!

केविन क्रूज़सेन द्वारा सी #, 23

a=>b=>(a*a-b*b)*a*b*3%7

1
Fwiw, (ab)**5 % 7 == (ab)**-1 % 7 == a^b^7सभी के लिए a, bमें 1..6ऐसा है कि a != bऔर a+b != 7
पीटर टेलर

@PeterTaylor वास्तव में, मैंने पाया कि **5मॉडुलो को
इन्वर्ट करने के

2
मैं इस अद्भुत बहुपद के "क्यों" पर नींद खो रहा हूं। शायद math.SE लोग मदद कर सकते हैं। math.stackexchange.com/questions/1101870/…
डिजिटल ट्रॉमा

1
मैंने गणित पर एक व्युत्पत्ति लिखी है। ईएस: math.stackexchange.com/a/1101984/24654
xnor

1
आप एपीएल ट्रेन को फिर से लिख सकते हैं 7|3×××+×-, जैसा कि उच्चारित किया गया है: 7-शेष 3 गुना उत्पाद समय योग बार अंतर (दो संख्याओं के बीच)।
ngn

9

सीजेएम, 43 28 बाइट्स

पूर्ण तालिका आधारित दृष्टिकोण छोटा होगा, लेकिन यहां कोई विचार नहीं है:

l_~^56213641532453s@S-#)g7*^

इनपुट की तरह

2 3

आउटपुट:

1

यह मेरे पिछले एल्गोरिथ्म का मिश्रण है जो 2 चेहरों में से सही चेहरे और एक्सर्स के एक्सनोर के दृष्टिकोण को निर्धारित करता है।

इसे यहाँ ऑनलाइन आज़माएँ


क्या आप बता सकते हैं कि यह कैसे काम करता है? एक ही विचार के रूप में ep1024 था?
user694733

@ user694733 बिल्कुल नहीं। स्पष्टीकरण जोड़ा गया।
ऑप्टिमाइज़र

हाँ, मैंने समय देखा। मैं बस सोच रहा था कि क्या यह समान है, क्योंकि उसके पास इस पर स्पष्टीकरण था, और मुझे नहीं पता कि सीजेएम कैसे काम करता है।
user694733

@ ऑप्टिमाइज़र मैं सीजेएम पर भी शुरू करना चाहता हूं, कोई भी सामान्य दिशा जो आप मुझे ट्यूटोरियल आदि के लिए इंगित कर सकते हैं? मैं कुछ उदाहरण देखता हूं, लेकिन उनका शायद ही कोई स्पष्टीकरण है :(
Teun Pronk

ऊपर दिए गए लिंक में कुछ उदाहरण हैं और मुख्य वेबसाइट के लिए एक लिंक है जिसमें भाषा खोजशब्दों की व्याख्या है। इसके अलावा, मौजूदा उत्तरों से सीखने के लिए cjam कीवर्ड के साथ यहां खोजें।
ऑप्टिमाइज़र

5

कम, 62 बाइट्स

इस पोस्ट में एल्गोरिथ्म का उपयोग करता है :

.x(@a,@b){@r:mod(3*@a*@b*(@a*@a+6*@b*@b),7);content:~"'@{r}'"}

यदि पूर्णांक मान का उपयोग किया गया था, तो यह कम हो सकता है, लेकिन इसे प्रदर्शित करने के लिए मुझे सीएसएस contentसंपत्ति का उपयोग करने की आवश्यकता है जो कि चर प्रक्षेप की आवश्यकता है

फिर भी, यह अक्सर नहीं होता है कि कोड गोल्फ के लिए सीएसएस प्रीप्रोसेसर भाषा का उपयोग किया जाता है!

कुछ HTML के साथ उपयोग करने के लिए, आप यह करेंगे:

p::after { .x(1, 3); }
<p>Number on top: </p>

4

पायथ, 30 बाइट्स

K"23542 31463 12651 "h/x+K_Kz6

इनपुट के रूप में दो अंकों की आवश्यकता होती है, जिसके बीच में कोई स्थान नहीं है (पूर्व 23नहीं 2 3)।

स्पष्टीकरण:

कोई भी दो अंकों का क्रम जो भीतर निहित है, 23542दो पक्षों का प्रतिनिधित्व करता है 1जो शीर्ष पर है। इसी तरह, 314632 के लिए, आदि इस स्ट्रिंग को उलटने के 4माध्यम से अनुक्रम देता है 6

यह कोड केवल स्ट्रिंग में एक लुकअप "23542 31463 12651 15621 36413 24532"करता है, सूचकांक को 6 से विभाजित करता है, और यह निर्धारित करने के लिए वेतन वृद्धि करता है कि शीर्ष पक्ष क्या होना चाहिए।

यहां ऑनलाइन टेस्ट करें।

इस गोल्फिंग पर सुझाव के लिए @FryAmTheEggman को धन्यवाद।


कुछ पाइथ-संबंधी गोल्फ: J"23542 31463 12651 "h/x+J_Jscz)6मुझे पिंग करें अगर इसमें से कुछ भ्रामक है। पसंद करते हैं Kऔर Jबताए मूल्यों के लिए, hएकल है +1, sस्ट्रिंग की एक सूची है पर jk। (इसके अलावा, अगर अनुमति हो, 23तो इनपुट की तरह एक स्ट्रिंग का उपयोग करना सबसे अच्छा होगा)
FryAmTheEggman

3

एक अलग लुकअप स्ट्रिंग के साथ es1024 के समान दृष्टिकोण लेता है:

जावास्क्रिप्ट (ईएस 6), 73 72 61 बाइट्स

t=(l,r)=>-~('354233146312651215623641332453'.search([l]+r)/5)

जावास्क्रिप्ट (ईएस 5), 88 87 77 बाइट्स

function t(l,r){return -~('354233146312651215623641332453'.indexOf([l]+r)/5)}

कॉफीस्क्रिप्ट, 71 62 बाइट्स

और इसके मज़े के लिए, कोड 1 बाइट्स में कॉफीस्क्रिप्ट में ईएस 6 के रूप में छोटा है, क्योंकि इसे कोष्ठक की अनुमति नहीं है

-~चाल के उपयोग के कारण , यह ES6 के समान वर्ण निकला।

t=(l,r)->-~('354233146312651215623641332453'.indexOf([l]+r)/5)

1
1 बाइट बचाएं: ''+l+r=>[l]+r
edc65

@ edc65 धन्यवाद! ओह, विभिन्न प्रकारों को जोड़ते समय जावास्क्रिप्ट कैसे व्यवहार करती है
rink.attenders.6

1
हां, ऑपरेटर + अजीब है। लेकिन ऑपरेटर के बारे में क्या ~? 1+Math.floor=> -~। इसके अलावा, indexOf के बजाय खोजें।
edc65

दिलचस्प। और मैं इसके बारे में जानता था searchलेकिन यह केवल ES6 के लिए है।
रिंक.टेंटडेंट .६

वास्तव में, String.prototype.searchECMAScript 3 संस्करण के बाद से जावास्क्रिप्ट का हिस्सा रहा है, ताकि आप अपना उत्तर बदल सकें। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
kamoroso94

3

जे (9)

इस पोस्ट से एल्गोरिथ्म का उपयोग करता है ।

7|3***+*-

समारोह का ट्री ग्राफ (कुछ चीजें साफ कर सकता है):

    f=:7|3***+*-
    f
7 | 3 * * * + * -
   5 !: 4 < 'f'
  ┌─ 7            
  ├─ |            
──┤   ┌─ 3        
  │   ├─ *        
  └───┤   ┌─ *    
      │   ├─ *    
      └───┤   ┌─ +
          └───┼─ *
              └─ -

प्रदर्शन:

   3 f 5
1
   4 f 6
2
   2 f 6
3
   2 f 1
4
   1 f 2
3
   4 f 5
6

0

PHP, 81 बाइट्स

मेरे जावास्क्रिप्ट समाधान के रूप में भी:

function t($l,$r){echo(int)(1+strpos('354233146312651215623641332453',$l.$r)/5);}

0

लुआ 118

बग के कारण पिछले संस्करण को पुनर्स्थापित करना पड़ा, जो मुझे नहीं मिला, और न ही इसे देखने का समय मिला।

z=io.read;o={"","","34","5 2","2165","46 13",""," 31064","  5612","   2 5","    43"}a=z();b=z();print(o[a+b]:sub(a,a))

हालांकि अभी भी इस पर काम कर रहे हैं।


मैंने यहां इसका परीक्षण किया , और इसके 4साथ वापस लौटा 2 3
user694733

वास्तव में .. अजीब। मैं इस पर गौर करूंगा।
त्यूं प्रैंक Te

@ user694733 फिक्स्ड यह :)
टुन PRONK

0

जावास्क्रिप्ट (ईएस 6), 79 बाइट्स

सबसे छोटा नहीं है, लेकिन मैंने जवाबों में वर्तमान की तुलना में एक अलग दृष्टिकोण की कोशिश की।

f=(a,b)=>[a,b,7-a,7-b].reduce((p,v,i,r)=>p?p:'2312132'.indexOf([v]+r[i+1])+1,0)

0

लूआ, 89 बाइट्स

Xnor के पायथन समाधान का एक सीधा बंदरगाह।

x=require('bit32').bxor
function(a,b)c=a*a*b%7;return x(a,x(b,2<c and c<5 and 7 or 0))end

0

बाश, ,५

यह @ xnor के जादू बहुपद के साथ गोल्फ वार का मुकाबला नहीं करता है। लेकिन मुझे लगता है कि यह उत्तर की गणना करने का एक और दिलचस्प तरीका है:

g(){
((d[$1$2]))||{
d[$1$2]=$3
g $2 $1 $[7-$3]
g $2 $3 $1
}
}
g 1 2 3
echo ${d[$1$2]}

विशेष रूप से हम पासा के बारे में निम्नलिखित जानते हैं:

  • यदि बायां चेहरा 1 और दाहिना चेहरा 2 है, तो शीर्ष चेहरा 3 है
  • 120 ° से विपरीत चक्करों के आसपास घूमने से चेहरे के मूल्यों के कुछ और त्रिगुण मिलते हैं। जैसे हम {l = 1, r = 2, t = 3} को घुमाते हैं, एक बार जब हम {l = 2, r = 3, t = 1} प्राप्त करते हैं और फिर से घूमते हैं तो हम {l = 3, r = 1, t = 2} प्राप्त करते हैं
  • विपरीत चेहरों का योग हमेशा 7 होता है

उपरोक्त पुनरावर्ती को मिलाकर ({1,2,3} हार्डकोड को एक प्रारंभिक बिंदु के रूप में उपयोग करके), हम सभी संभावित मूल्यों के लिए {l, r} -> टी की पूरी मैपिंग उत्पन्न कर सकते हैं। यह उत्तर एक पुनरावर्ती फ़ंक्शन g () को परिभाषित करता है जो एक पूर्ण सरणी को पॉप्युलेट करता है जैसे कि d [lr] = t। पुनरावर्ती फ़ंक्शन को प्रारंभ में {1,2,3} के साथ बुलाया जाता है और पूरे क्यूब पर पुनरावृत्ति करता है जब तक कि अधिक सरणी तत्व नहीं होते हैं जो सेट नहीं किए गए हैं। फ़ंक्शन दो तरीकों से खुद को पुन: बनाता है:

  • एल और आर स्वैप के साथ और टी 7 (विपरीत चेहरों) से घटाया गया
  • {l, r, t} के साथ {r, t, l} पर घुमाया गया

यह तब आवश्यक मानों का एक साधारण सरणी लुकअप करता है।


0

दलयोग एपीएल , 9 बाइट्स

ʎıʇǝɥʇu'ss J समाधान का स्पष्ट चरित्र प्रतिस्थापन :

7|3×××+×-

संपादित करें: मैंने बाद में देखा कि यह सटीक समाधान 17 जनवरी 15 को ngn द्वारा सुझाया गया था।

  the division remainder when divided by seven of
  |        three times
  |        | the product of the arguments
  |        |   times   \┌───┐
  |        |     \  ┌───┤ × 
┌────┐   ┌────┐   ┌─┴─┐ └───┘ ┌───┐
 7| ├───┤ 3× ├───┤ ×    ┌───┤ +  - the sum of the arguments
└────┘   └────┘   └─┬─┘ ┌─┴─┐ └───┘      
                    └───┤ ×  ---- times
                        └─┬─┘ ┌───┐
                          └───┤ -  - the difference between the arguments
                              └───┘

TryAPL ऑनलाइन!


0

जूलिया, 26 बाइट्स

f(a,b)=a$b$7*(2<a^2*b%7<5)

या

f(a,b)=(3*a^5*b^5-a^3*b)%7

या

f(a,b)=3*a*b*(a+b)*(a-b)%7


0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 49 बाइट्स

x=>1+("3542331463126512156236413"+x).IndexOf(x)/5

इसे ऑनलाइन आज़माएं!

@ बाइट के लिए -1 बाइट धन्यवाद!

इनपुट एक 2 वर्ण स्ट्रिंग है जिसमें दृश्यमान बाएँ और दाएँ अंक हैं।

नीचे समाधान है कि मैं स्वतंत्र रूप से आया हूं। Rink.attenders.6 के जावास्क्रिप्ट जवाब से लुकअप स्ट्रिंग का लाभ उठाते हुए , मैं 5 बाइट्स से दाढ़ी बनाने में सक्षम था (लेकिन अब हमारे जवाब बहुत समान हैं;)

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 55 बाइट्स

x=>1+"42354 31463 51265 21562 41364 24532".IndexOf(x)/6

इसे ऑनलाइन आज़माएं!


1
का उपयोग करके 49 बाइट्स ( "3542331463126512156236413" + x) पूर्ण स्ट्रिंग के बजाय
जीबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.