रैंडम पासा टिपिंग


14

एक मानक पासा (मरो) में संख्याओं को व्यवस्थित किया जाता है ताकि विपरीत चेहरे सात हो जाएं। अपनी पसंदीदा भाषा में सबसे कम संभव प्रोग्राम लिखें जो एक यादृच्छिक थ्रो का अनुसरण करता है और उसके बाद 9 यादृच्छिक टिपिंग। टिपिंग पासा का एक चौथाई मोड़ है, उदाहरण के लिए यदि पासा 5 का सामना कर रहा है, तो सभी संभावित टिपिंग 1,3,4 और 6 हैं।

वांछित उत्पादन का उदाहरण:

1532131356

जवाबों:


5

GolfScript, 26 वर्ण

0{(.6,5@--\-.,rand=).}10*;

जॉय का थोड़ा अधिक संकुचित संस्करण , मूल रूप से शून्य-अनुक्रमण के साथ इस मुद्दे के आसपास काम कर रहा है।


9

रूबी, ४४

c=0;10.times{$><<c=([*1..6]-[c,7-c]).sample}

मुझे भाग्यशाली प्रयोग से [* 1..6] छल मिला।


1
कुछ अच्छी चाल यहाँ, महान सामान। ऐरे # नमूना विधि को याद करने के लिए खुद को सिर पर मारना।
लार्स हग्सथ

4

जावास्क्रिप्ट (71 अक्षर)

आपको अपने जावास्क्रिप्ट वातावरण के आधार पर, कुछ और के printसाथ alertया कुछ और बदलने की आवश्यकता हो सकती है।

for(C=L=T=0;C++<10;print(L=T))while(!(T-L&&T+L-7))T=Math.random()*6+1|0

किसी मान के मिलने पर बाहरी रूप से वृद्धि करके मर्ज की छोरियाँ: (b = n = 10; n; ab && a + b-7 && प्रिंट (b = a, n -)) a = Math.random () * 6 + 1 | 0
imma


3

दे घुमा के

#/!bin/bash
f=`expr $RANDOM % 6` 
f=`expr $f + 1`
printf "$f"
for ((i=0; i<9; i++))
do
   ((bad=7-$f))
   next=`expr $RANDOM % 6`
   next=`expr $next + 1`
   while [ $next -eq $bad ] || [ $next -eq $f ]
   do
      next=`expr $RANDOM % 6`
      next=`expr $next + 1`
   done
printf "$next"
f=$next
done

नमूना कोड: http://ideone.com/CCfro


का उपयोग ((var=expression))बहुत अच्छा है - मैंने सोचा था कि सबसे छोटा रास्ता था, var=$((expression))लेकिन आप केवल एक बार बैकटिक्स में अक्षर के बेकार टन का उपयोग क्यों करते हैं?
पीटर टेलर

मैं शेल स्क्रिप्टिंग का ज़्यादा कुछ नहीं करता, लेकिन कुछ कारणों से ((var = expr)) कुछ जगहों पर असफल रहा (हाँ अजीब: P) जब से मैंने इस स्क्रिप्ट को शुरू किया है, मैंने अभी-अभी किसी तरह पूरा किया है। :)
अमन ZeeK वर्मा


2

केवल एक लूप के साथ बैश करें: 100 99 98 96

के लिए ((i = 10, च = यादृच्छिक% 6 + 1; मैं -;)) करना
प्रिंटफ $ च
((N = यादृच्छिक% 4 + 1, मी = च <4 च: 7-च, च = n <मीटर || ++ n <7 मीटर n: n + 1))
किया हुआ

http://ideone.com/XrZO7

मुख्य विचार यह है कि [1, x] में एक यादृच्छिक संख्या चुनने के लिए, जो y के बराबर नहीं है, आप [1, x-1] में एक यादृच्छिक संख्या चुन सकते हैं और फिर यह = = y होने पर वेतन वृद्धि कर सकते हैं। इस समस्या के लिए हम [1,6] में एक यादृच्छिक संख्या चाहते हैं जो f या 7-f के बराबर नहीं है। हमें दो टेस्ट ऑर्डर मिन (f, 7-f), मैक्स (f, 7-f) में करने होंगे।

शुरू में खाली वातावरण मानकर मैं इनिशियलाइज़ नहीं कर सकता और लूप की स्थिति को बदलकर 2 चार्ट बचा सकता था i++<10


2

बैश: 97 94 92 90 89 87

अमन ZeeK वर्मा के जवाब से भारी गोल्फ

(; मैं (मैं = 10, च = 0 -;)) के लिए करते हैं
((n = f; n == f = n + f == 7; f = RANDOM% 6 + 1)):
किया हुआ
प्रिंटफ $ च
किया हुआ

http://ideone.com/QiuTx

एनबी यकीनन यह पहली पंक्ति को बदलकर 5 वर्णों से सिकुड़ सकता है, for((;i++<10;))लेकिन यह ऐसी धारणाएं बनाता है जो हमेशा मान्य नहीं होती हैं। यह आइडोन में ठीक काम करेगा, लेकिन इसे शेल से चलाने वाला कोई व्यक्ति गैर-शून्य को निर्यात iया fनिर्यात कर सकता है ।


मैं आंतरिक लूप के बिना एक संस्करण करना चाहता हूं, लेकिन मुझे डर है कि यह अधिक लंबा होगा।
पीटर टेलर

यह बहुत ही भयानक है, मुझे लगता है कि मैं bash के लिए बहुत कच्चा हूँ :)
अमन ZeeK वर्मा

@Aman, इसमें से अधिकांश बैश-विशिष्ट नहीं है। यह सिर्फ एक के बाद परीक्षण के साथ कई दर्जन शोधन है और जब मैंने कुछ तोड़ दिया। एकमात्र बिट जो वास्तव में बैश ट्रिक है, वह नोप है, जिसे मुझे देखना था। यदि आपके पास पढ़ने का समय है man bash, हालांकि, मैं इसकी सलाह देता हूं। मैंने एक बार इसे कवर करने के लिए कवर किया था, और बस जो संभव हो और देखने लायक था, का एक अस्पष्ट विचार मुझे अच्छी तरह से परोसा गया है।
पीटर टेलर

2

विंडोज पॉवरशेल, 45

-join(0..9|%{($d=1..6-ne(7-$d)-ne$d|random)})

सुंदर तुच्छ, वास्तव में। मैं संभावित पासा रोल की एक सूची तैयार करता हूं 1..6और फिर अंतिम रोल के बराबर नहीं केवल सात शून्य के बराबर का चयन करता हूं । शेष सूची से मैं फिर एक यादृच्छिक आइटम का चयन करता हूं और इसे असाइन करता हूं $d। चूंकि $dशुरू में 0इसका इलाज किया जाता है, क्योंकि यह पहली बार एक सामान्य मर जाता है।

टेस्ट स्क्रिप्ट:

for($i=0;$i-lt20;$i++){
    $o=@(./tipping.ps1)
    if ($i-gt0-and$o-eq$o2) { throw "Must have random output" }
    if ($o.count-ne1) { throw "Must only have one line of output" }
    if ($o[0]-match'[^1-6]'){ throw "Invalid characters" }
    if($o[0].length-ne10){ throw "Wrong length: $($o[0].length)" }
    $r=[char[]]($o[0])|%{$_-48}
    for ($x=1;$x-lt$r.count;$x++){
        if ($r[$x-1]+$r[$x]-eq7) { throw "Not a tipping: $($r[$x-1]) and $($r[$x])" }
    }
    $o2=$o
}

इतिहास:

  • 2011-02-18 11:57 (61) पहला प्रयास।
  • 2011-02-18 11:58 (45) मुझे अलग से पहला नंबर जेनरेट करने की जरूरत नहीं है।

मुझे मिलता हैThe term 'random' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
पीटर टेलर

@ पेटर: पॉवरशेल वी २, कृपया। Get-RandomCmdlet v1 में मौजूद नहीं था।
जॉय

2

जे

यह काम करना चाहिए लेकिन दुर्भाग्य से J का यादृच्छिक जनरेटर 3 पुनरावृत्ति के बाद फंस गया:

a=:>:i.6
f=:a#~1-(+&(a=])7&-)
((,(?4)&{@f@(_1&{))^:9)>:?6

6 4 5 4 5 4 5 4 5 4


मैं जे विशेषज्ञ से नहीं मापता, लेकिन यह मुझे लगता है कि मैंने अपने जे को इस थ्रेड का उत्तर देने में क्या परेशानी महसूस की है जो (?4)एक बार लुढ़क जाता है और यदि आप इसके आस-पास सावधान नहीं होते हैं तो इसे बाद के पुनरावृत्तियों के लिए एक स्थिर माना जाता है। मैंने इसके चारों ओर एक समान (?@4:)निर्माण का उपयोग करके काम किया ।
जेबी


2

जे, 30 अक्षर

>:(?@4:{(i.6)-.],5&-)^:(<10)?6

6 2 3 5 4 2 4 1 3 6

स्पष्टीकरण (दाईं से बाईं ओर पढ़ें):

  • ?6 0 और 5 के बीच एक यादृच्छिक संख्या देता है
  • ^:(<10)एक समारोह को 9 बार लागू करता है, जिस तरह से परिणाम जमा करता है। समारोह है:
  • ?@4:{(i.6)-.],5&-
    • ] , 5&- इनपुट नंबर की एक सरणी देता है और इसके पूरक 5 (हम वर्तमान में 0-आधारित संख्या को संभाल रहे हैं, इसलिए विपरीत चेहरों का योग 5 है)
    • (i. 6) -. पूर्णांक 0 से 5 के पूर्ण सेट से उन्हें निकालता है। इनपुट स्थिति से एकल टैपिंग ऑपरेशन के बाद हम सभी वैध पदों से बचे हैं।
    • ?@4: { यादृच्छिक में से एक चुनता है।
  • >: 1 से 6 के अंतराल पर आंकड़े वापस लाने के लिए पूरे अनुक्रम को बढ़ाता है।

तब अंत में ">:" अच्छा लगा।
बारह

1
@ मुझे पता नहीं क्यों वास्तविक दुनिया का पासा 1 से 6 है जब उनके बारे में सभी समझदार तर्क 0 से 5 का उपयोग करते हैं: D
JB

2

जीएस 2, 16 बाइट्स

16 2f 25 08 41 20 17 30 16 2f 31 31 25 09 19 32

यहां देखिए यह कैसे काम करता है

16 2f 25     # make range from 1 to 6 and push random element
08           # start block
    41       # duplicate top of stack twice
    20 17 30 # negate top of stack and add 7
    16 2f    # push range from 1 to 6
    31 31    # do set-wise difference with each of the two previous numbers
    25       # push a random element from the list
09           # end block
19 32        # repeat block 9 times

मुझे लगता है कि gs2 इस चुनौती से नया है।
lirtosiast

1

QBasic (71 अक्षर)

दो नए समाचार आवश्यक हैं और प्रत्येक वर्ण के रूप में वर्ण गणना में शामिल हैं।

RANDOMIZE:FOR I=0TO 9
1N=INT(RND*6)+1:IF L=N OR L+N=7THEN 1
?N:L=N:NEXT

1

टीआई-बेसिक, 38 34

For(I,1,9
Ans→X
Repeat Ans≠X and Ans≠7-X
randInt(1,6
End
Disp Ans
End

बोरिंग समाधान, लेकिन यह पिछले संशोधन से छोटा है। मैं इस तथ्य का लाभ उठाता हूं कि एक ताजा कैलकुलेटर पर, Ansशून्य से आरंभ किया जाता है।


मुझे नहीं पता कि यह संभव है, लेकिन मैं 50 प्रतिनिधि किसी को भी दूंगा जो एक छोटा समाधान ढूंढ सकता है।
lirtosiast

आप 34 की गणना कैसे कर रहे हैं?
पुनरावर्ती

यहां प्रत्येक टोकन स्मृति में एक बाइट है ; इस तरह से TI-BASIC के लिए यह मानक है। यदि आपके पास कैलकुलेटर है, तो प्रोग्राम को टाइप करें, मेमोरी मैनेजमेंट स्क्रीन को देखें, फिर 9 को घटाएं और कोड का आकार प्राप्त करने के लिए प्रोग्राम के नाम की लंबाई को हटा दें।
lirtosiast

1

जावा 8, 130 बाइट्स

v->{int d=(int)(Math.random()*6+1),i=10,p;String r=""+d;for(;i-->0;r+=d)for(p=d;p==d|p+d==7;d=(int)(Math.random()*6+1));return r;}

इसे यहाँ आज़माएँ।

वर्बोज़ मेन-मेथड के साथ पूर्ण कार्यक्रम के बजाय यह 178 बाइट्स होगा:

interface M{static void main(String[]a){int d=(int)(Math.random()*6+1),i=10,p;String r=""+d;for(;i-->0;r+=d)for(p=d;p==d|p+d==7;d=(int)(Math.random()*6+1));System.out.print(r);}}

इसे यहाँ आज़माएँ।

@AmanZeeKVerma के बैश जवाब का सेमी-पोर्ट ।

स्पष्टीकरण:

 v->{              // Method with empty unused parameter and String return-type
   int d=(int)(Math.random()*6+1),
                   //  Random dice-roll 1-6
       i=10,       //  Counter-integer, starting at 10
       p;          //  Temp integer to store new side
   String r=""+d;  //  Result-String, starting at the first dice-roll
   for(;i-->0;     //  Loop (1) 10 times:
       r+=d)       //    After every iteration, append the result with a random side
     for(p=d;      //   Set the new side to the current side
         p==d      //   Loop (2) as long as the new side and current side are the same
         |p+d==7;  //   or as long as both combined are exactly 7:
       d=(int)(Math.random()*6+1)
                   //    Set the new side to a random side 1-6
     );            //   End of loop (2)
                   //  End of loop (1) (implicit / single-line body)
  return r;        //  Return the result-String
}                  // End of method


0

> <> , 71 बाइट्स

मुझे खुशी है कि मैं यह प्रदर्शित कर सकता हूं कि मैं xइसे यहां देखकर याद नहीं करता।

a&0 v
 /2v
1x3v 
>x< <<
6x4v
 \5v ~
:{:/ ^?=}
:{:/ ^?=7+}
:~$<^&;!?:-1&n

आप इसे इस ऑनलाइन दुभाषिया (पेस्ट कोड, सबमिट, स्टार्ट) पर आजमा सकते हैं ।


समाधान ठीक करते ही आपको मेरा उत्थान प्राप्त होगा।
lirtosiast

@ThomasKwa हो गया, मैं इसे थोड़ा कम करने में सक्षम हो सकता हूं, लेकिन कम से कम अब यह कार्यात्मक है।
एरोन

0

आर , 67 बाइट्स

c(3,5,1,4,2,6)[(sample(1:6,1)+cumsum(sample((-2:2)[-3],9,T)))%%6+1]

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

नहीं है एक golfier आर जवाब लेकिन यह मुझे लगता है कि अब तक प्रस्तुत जवाब से एक अलग दृष्टिकोण है।

c(3,5,1,4,2,6)                                                     #A dice and its facets
               (sample(1:6,1)                                      #Initial dice roll
                             +cumsum(sample((-2:2)[-3],9,T)))      #9 tippings in c(-2,-1,1,2)
                                                             %%6+1 #converts to values in [0,6]
              [                                                   ]#

0

05AB1E , 23 बाइट्स

6LΩUTFX?6LʒDXÊsX+7Ê*}ΩU

निश्चित रूप से गोल्फ हो सकता है, लेकिन मैं वर्तमान में इसे नहीं देख रहा हूं।

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

स्पष्टीकरण:

6LΩ              # Pick a random value from the range [1,6]
                 #  i.e. [1,2,3,4,5,6] → 3
   U             # Save this random value in variable `X`
TF               # Loop 10 times:
  X?             #  Print `X` without newline to STDOUT
  6Lʒ     }      #  Create a range [1,6] again, and filter it by:
     DXÊ         #   Check if the current value is not equal to `X`
                 #    i.e. 1 and 3 → 1 (truthy)
                 #    i.e. 3 and 3 → 0 (falsey)
     sX+         #   Sum the current value with `X`
                 #    i.e. 1 and 3 → 4
                 #    i.e. 3 and 3 → 6
        7Ê       #   And check if it's not equal to 7
                 #    i.e. 4 and 7 → 1 (truthy)
                 #    i.e. 6 and 7 → 1 (truthy)
     *           #   If both checks are truthy, keep it in the filtered list
                 #    i.e. 1 and 1 → 1 (truthy)
                 #    i.e. 0 and 1 → 0 (falsey)
           Ω     #  Pick a random value from the filtered list
                 #   i.e. [1,2,5,6] → 1
            U    #  And save it in variable `X` for the next iteration of the loop
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.