এলোমেলো পাশা টিপিং


14

একটি স্ট্যান্ডার্ড ডাইসে (ডাই) নম্বরগুলি এমনভাবে সাজানো হয় যাতে বিপরীত মুখগুলি সাতটিতে যুক্ত হয়। আপনার পছন্দের ভাষায় সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা 9 টি এলোমেলো টিপিংসের পরে একটি এলোমেলো নিক্ষেপ দেয়। একটি টিপিংটি পাশার এক চতুর্থাংশের পালা, যেমন যদি পাশাটি 5 এর মুখোমুখি হয় তবে সমস্ত সম্ভাব্য টিপিংস 1,3,4 এবং 6 হয়।

পছন্দসই আউটপুট উদাহরণ:

1532131356

উত্তর:


5

গল্ফস্ক্রিপ্ট, ২rs টি চর

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

এর সামান্য বেশি সংকুচিত সংস্করণ জোয়ি 'র, মূলত শূন্য ইন্ডেক্স সঙ্গে সমস্যা কাজ করছে।


9

রুবি, 44

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

আমি ভাগ্যবান পরীক্ষা-নিরীক্ষার মাধ্যমে [* ১..6] কৌশলটি পেয়েছি।


1
এখানে দুর্দান্ত কিছু কৌশল, দুর্দান্ত জিনিস। অ্যারে # নমুনা পদ্ধতিটি মিস করার জন্য নিজেকে মাথায় আঘাত করা।
লার্স হগসেট

4

জাভাস্ক্রিপ্ট (characters১ টি অক্ষর)

আপনি প্রতিস্থাপন করার প্রয়োজন হতে পারে printসঙ্গে alertবা অন্য কিছু, আপনার জাভাস্ক্রিপ্ট পরিবেশ উপর নির্ভর করে।

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

একটি মান পাওয়া গেলে শর্তসাপেক্ষে বাইরেরটিকে বাড়িয়ে শর্তগুলিতে মার্জ করুন: (বি = এন = 10; এন; অব && এ + বি -7 && মুদ্রণ (বি = এ, এন -)) a = ম্যাথআরন্ডম () * 6 + 1 | 0
ইমমা


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)) কিছু জায়গায় ব্যর্থ হয়ে পড়েছে (হ্যাঁ উদ্ভট: পি) যেহেতু আমি এই স্ক্রিপ্টটি শুরু করেছি, আমি কেবল কোনওভাবে শেষ করেছি। :)
আমান জেক ভার্মা

3

আর, 56 52

for(i in 0:9)cat(F<-sample(setdiff(1:6,c(F,7-F)),1))


@ জয়সি দুর্দান্ত ধারণা, নির্দেশ করার জন্য ধন্যবাদ!
সোভেন হোহেনস্টেইন

আমার আনন্দ - এবং প্রকৃতপক্ষে আপনি আরও 5 টি বাইট সংরক্ষণ করতে পারবেন
জয়সি

2

শুধুমাত্র একটি লুপ দিয়ে বাশ করুন: 100 99 98 96

জন্য ((i = 10, F = র্যান্ডম% 6 + 1 টি; I -;)) না
printf f f
((ঢ = র্যান্ডম% 4 + 1 টি, এম = চ <4 চ: 7-চ, চ = ঢ <মি || ++, এন <7-M N: এন + 1 টি))
সম্পন্ন

http://ideone.com/XrZO7

মূল ধারণাটি হ'ল [1, x] এ র্যান্ডম সংখ্যা বাছাই করা যা y এর সমান নয় আপনি [1, x-1] এ এলোমেলো সংখ্যা বেছে নিতে পারেন এবং তারপরে> = y হলে বর্ধনযোগ্য। এই সমস্যার জন্য আমরা [1,6] এ একটি এলোমেলো সংখ্যা চাই যা f বা 7-f এর সমান নয়। অর্ডার নূন্যতম (এফ, 7-এফ), সর্বাধিক (চ, 7-চ) দুটি পরীক্ষা করতে হবে।

প্রাথমিকভাবে খালি পরিবেশ ধরে নেওয়া 2 টি অক্ষর বাঁচাতে পারে i আরম্ভ না করে এবং লুপের অবস্থার পরিবর্তন করে i++<10


2

বাশ: 97 94 92 90 89 87

আমান জিক ভার্মার উত্তরটি থেকে ভারি গল্ফ হয়েছে:

(; আমি (i = 10, F = 0 -;)) জন্য কি
((n = f; n == f || n + f == 7; চ = র‌্যান্ডোম% 6 + 1)) এর জন্য:
সম্পন্ন
printf f f
সম্পন্ন

http://ideone.com/QiuTx

এনবি তর্কযোগ্যভাবে এটি প্রথম অক্ষরে পরিবর্তন করে 5 টি অক্ষর দ্বারা সঙ্কুচিত হতে পারে for((;i++<10;))তবে এটি অনুমানগুলি তৈরি করে যা সর্বদা বৈধ নয়। এটি আদর্শে ঠিক কাজ করবে তবে শেল থেকে যে কেউ এটি চালাচ্ছেন তা শূন্য-শূন্য থেকে এমন কিছুতে iবা fরফতানি করতে পারে।


আমি অভ্যন্তরীণ লুপটি ছাড়াই একটি সংস্করণ করতে চাই তবে আমি আশঙ্কা করি এটি আরও দীর্ঘ হবে।
পিটার টেলর

এটি অত্যন্ত ভয়ঙ্কর, আমার মনে হয়
বাশের

@ আমান, এর বেশিরভাগই বাশ-নির্দিষ্ট নয়। এটি প্রতি একের পর এক পরীক্ষার সাথে কয়েক ডজন পরিমার্জন এবং যখন আমি কিছু ভেঙে ফেলি। সত্যিই বাশ ট্রিকের একমাত্র বিটটি হ'ল নূপ, যা আমাকে সন্ধান করতে হয়েছিল। আপনার যদি পড়ার সময় থাকে man bashতবে আমি এটি সুপারিশ করি। আমি একবার এটি কভারটি পড়ার জন্য পড়েছিলাম, এবং কী কী সম্ভব এবং সন্ধান করার উপযুক্ত বিষয় সম্পর্কে অস্পষ্ট ধারণা থাকা আমাকে ভালভাবে পরিবেশন করেছে।
পিটার টেলর

2

উইন্ডোজ পাওয়ারশেল, 45

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

বেশ তুচ্ছ, আসলে। আমি সম্ভাব্য ডাইস রোলগুলির একটি তালিকা উত্পন্ন করি 1..6এবং তারপরে কেবলমাত্র শেষ রোলের সাত বিয়োগের সমান নয় এবং কেবলমাত্র শেষ রোলের সমান নয় select বাকী তালিকা থেকে আমি তারপরে একটি এলোমেলো আইটেমটি নির্বাচন করি এবং এটিকে বরাদ্দ করি $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.
পিটার টেলর

@ পিটার: পাওয়ারশেল ভি 2, দয়া করে। Get-RandomV1- তে সেমিডলেট উপস্থিত ছিল না।
জোয়ি

2

জে

এটি কাজ করা উচিত তবে দুর্ভাগ্যক্রমে জে র্যান্ডম জেনারেটর 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 বার ফল সংগ্রহ করে একটি ফাংশন 9 বার প্রয়োগ করে। ফাংশনটি হ'ল:
  • ?@4:{(i.6)-.],5&-
    • ] , 5&- ইনপুট সংখ্যার একটি অ্যারে প্রদান করে এবং এটি 5 এর পরিপূরক (আমরা বর্তমানে 0-ভিত্তিক সংখ্যাগুলি পরিচালনা করছি, সুতরাং বিপরীত মুখগুলির যোগফল 5)
    • (i. 6) -. পূর্ণসংখ্যার 0 থেকে 5 এর পুরো সেট থেকে এগুলি সরিয়ে দেয় input
    • ?@4: { এলোমেলোভাবে তাদের একটি বাছাই করে।
  • >: পরিসংখ্যানগুলি 1 থেকে 6 ব্যবধানে ফিরিয়ে আনতে পুরো ক্রমটি বাড়ায়।

তারপরে ">:" ভাল লাগলো।
এভেলেক্স

1
@ এলেভেক্স আমার বাস্তব ধারণা নেই যে কেন 1 থেকে 6 টি বাস্তব বিশ্বের ডাইস যখন তাদের সম্পর্কে সমস্ত বুদ্ধিমান যুক্তি 0 থেকে 5 ব্যবহার করে: ডি
জেবি

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

আমি মনে করি জিএস 2 এই চ্যালেঞ্জের চেয়ে নতুন।
lirtosiast

1

কিউব্যাসিক (characters১ টি অক্ষর)

দুটি নতুন লাইন প্রয়োজনীয় এবং প্রতিটি চরিত্র হিসাবে একটি চরিত্র গণনা অন্তর্ভুক্ত।

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 গণনা করছেন?
পুনরাবৃত্তি

এখানে প্রতিটি টোকেন মেমরির এক বাইট ; টিআই-বেসিকের পক্ষে এভাবে স্কোর করা মানক। আপনার যদি ক্যালকুলেটর থাকে তবে প্রোগ্রামটি টাইপ করুন, মেমরি পরিচালনা পর্দাটি দেখুন, তারপরে 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

1

0

> <> , 71 বাইট

আমি আনন্দিত যে আমি> <> এর xকোড-পয়েন্টার র্যান্ডমাইজেশন প্রদর্শন করতে পারলাম কারণ এখানে এটি দেখে মনে নেই।

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

আপনি এই অনলাইন দোভাষী এটিকে চেষ্টা করতে পারেন (পেস্ট কোড, জমা দিন, শুরু করুন)।


সমাধানটি ঠিক করার পরে আপনি আমার আপভোট পাবেন।
lirtosiast

@ থমাসকওয়া সম্পন্ন, আমি এটি কিছুটা গল্ফ করতে সক্ষম হতে পারি তবে কমপক্ষে এটি এখন কার্যকরী।
হারুন

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

05 এ বি 1 ই , 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.