Tổng số 100 cuộn xúc xắc hai mặt


14

Giả sử bạn có hai con xúc xắc sáu mặt. Cuộn cặp 100 lần, tính tổng của từng cặp. In ra số lần mỗi tổng xảy ra. Nếu một khoản tiền không bao giờ được cuộn, bạn phải bao gồm số không hoặc một số cách để xác định rằng số tiền cụ thể đó không bao giờ được cuộn.

Kết quả ví dụ: [3, 3, 9, 11, 15, 15, 11, 15, 7, 8, 3]

Số lần tổng số được cuộn được biểu thị trong chỉ số tổng - 2

Trong ví dụ này, tổng hai lần được cuộn 3 lần ([2-2]), tổng ba lần 3 ([3-2]), tổng bốn bốn lần ([4-2]), và như vậy trên. Việc cuộn xúc xắc riêng lẻ đến một khoản tiền không thành vấn đề (5 và 2 sẽ được tính bằng tổng số 6 và 1)

Đầu ra "Xấu xí" là tốt (tải các số 0 ở cuối, đầu ra thêm, cách biểu thị dữ liệu lạ, v.v.) miễn là bạn giải thích cách đọc dữ liệu.


2
Bạn có nghĩa là "in ra số lần mỗi cặp xảy ra" hay "in ra số lần mỗi số tiền xảy ra"?
Trái cây Esolanging

1
Nếu một khoản tiền cụ thể không bao giờ xuất hiện, có cần phải có một 0danh sách, hoặc nó có thể được bỏ qua không?
Greg Martin

1
Do các giá trị khác nhau cần phải được xác định một cách nhất quán hoặc làm một mình đếm đủ?
Jonathan Allan

1
Nếu đầu ra chỉ là số lần mỗi sự kết hợp của các cặp xảy ra, tại sao chúng ta cần tính tổng giá trị của mỗi cuộn? Chúng ta phải làm gì với tổng số đó? "Xấu xí" nghĩa là gì?
Xù xì

1
extra outputnhưng chúng ta vẫn không thể đưa ra một danh sách vô số các số ngẫu nhiên và nói rằng nó ngẫu nhiên xuất hiện ở đâu đó trong đó, phải không? Đó là một lỗ hổng tiêu chuẩn iirc.
Stephen

Câu trả lời:


5

Thạch , 13 12 byte

³Ḥ6ẋX€+2/ṢŒr

Một liên kết niladic. Định dạng đầu ra là một danh sách các danh sách [value, count].

(Cuộn không có nghĩa là không có mục nào như vậy xuất hiện trong đầu ra - ví dụ: đầu ra [[6, 12], [7, 74], [8, 14]]sẽ xác định rằng chỉ có tổng của sáu, bảy và tám được cuộn.)

Hãy thử trực tuyến!

Làm sao?

³Ḥ6ẋX€+2/ṢŒr - Main link: no arguments
³            - 100
 Ḥ           - double = 200
  6          - 6
   ẋ         - repeat -> [6,6,6...,6], length 200
    X€       - random integer from [1,z] for €ach (where z=6 every time)
       2/    - pairwise reduce with:
      +      -   addition (i.e. add up each two)
         Ṣ   - sort
          Œr - run-length encode (list of [value, length] for each run of equal values)


3

05AB1E , 21 19 byte

-2 byte nhờ @Emigna

TÝÌтF6Lã.RO¸ì}{γ€g<

Hãy thử trực tuyến!

TÝÌтF6Lã.RO¸ì}{γ€g<
TÝÌ                   Range from 2 to 12
   тF                 100 times do:
     6L                 Range from 1 to 6
       ã                Cartesian product (creates all possible pairs of 1 and 6)
        .RO             Choose random pair and sum
           ¸ì           Prepend result to initial list
             }        end loop
              {γ€g<   Sort, split on consecutive elements, count and decrement

TÝÌтF6Lã.RO¸ì}{γ€g<tiết kiệm 2 byte.
Emigna

@Emigna, không mong đợi vòng lặp sẽ ngắn hơn, cảm ơn!
kalsowerus

2

Toán học, 50 byte

r:=RandomInteger@5
Last/@Tally@Sort@Table[r+r,100]

Thực hiện đơn giản. Nếu bất kỳ số tiền nào không bao giờ đạt được, thì 0được bỏ qua khỏi danh sách.


2

MATL , 17 byte

6H100I$Yrs!11:Q=s

Đầu ra là một danh sách gồm 11 số (một số trong số chúng có thể bằng 0) được phân tách bằng dấu cách, cho biết số lần cho mỗi cặp từ 2 đến 12.

Hãy thử trực tuyến!

Để so sánh, số lần trung bình trên lý thuyết của mỗi cặp sẽ xuất hiện trung bình có thể được tính là 6:gtY+36/100* .

Nếu số lượng cuộn được tăng lên, các giá trị thu được sẽ tiếp cận với giá trị cuộn . Xem ví dụ các giá trị thu đượclý thuyết với 10000 cuộn.



2

Perl 6 , 30 byte

bag [Z+] (^6).pick xx 100 xx 2

(^6).picklà một số ngẫu nhiên từ 0 đến 5. xx 100làm cho một danh sách hàng trăm yếu tố của những con số như vậy. xx 2tạo ra hai danh sách như vậy. [Z+]bổ sung hai danh sách đó cùng với việc tạo ra một danh sách hàng trăm phần tử của hai cuộn chết. Cuối cùng, bagđặt danh sách đó vào một cái túi, đó là một bộ sưu tập với tính đa dạng. Ví dụ đầu ra REPL:

bag(1(4), 9(4), 0(4), 4(14), 5(18), 3(9), 10(2), 6(19), 7(13), 2(3), 8(10))

Điều đó có nghĩa là 1, 9 và 0 xảy ra bốn lần mỗi lần, bốn lần xảy ra mười bốn lần, v.v. Vì "súc sắc" trong mã này tạo ra một số từ 0-5, hãy thêm hai vào mỗi số này để có được một cuộn xúc xắc 1-6 tiêu chuẩn sẽ sản xuất.


Ồ Perl 6 là một lực lượng được tính toán.
Jakob

Tuy nhiên, "Nếu một khoản tiền không bao giờ được cuộn, bạn phải bao gồm số 0 hoặc một cách nào đó để xác định rằng số tiền cụ thể đó không bao giờ được cuộn." Không giống như giải pháp túi đáp ứng điều đó.
Jakob

Nếu một số cụ thể không được cuộn, tình huống đó có thể được xác định bằng sự vắng mặt của số đó trong túi.
Sean

2

R , 45 37 byte

-7 byte nhờ Jarko Dubbledam

s=sample;table(s(6,100,T)+s(6,100,T))

Trả về một đối tượng bảng của các phần tử và số lượng của mỗi. Không bao gồm bất kỳ giá trị nào đã không xảy ra.

Hãy thử trực tuyến!

phiên bản cũ:

rle(sort(colSums(matrix(sample(6,200,T),2))))

sample(6,200,T) mẫu 200 lần từ 1:6 đồng nhất với thay thế, sau đó nó tạo ra một ma trận có 2 hàng, tính tổng các cột, sau đó sắp xếp chúng theo thứ tự tăng dần và tính toán độ dài của các lần chạy. Bỏ qua bất kỳ khoản tiền xúc xắc nào không đạt được.

Trả về một rleđối tượng, được in theo mặc định theo định dạng sau:

Run Length Encoding
  lengths: int [1:11] 5 6 8 12 12 20 12 11 4 7 ...
  values : num [1:11] 2 3 4 5 6 7 8 9 10 11 ...

nơi lengthslà đếm vàvalues là những con xúc xắc tiền.

Liên kết TIO


1

PHP, 53 byte

in một mảng kết hợp. khóa là kết quả của hai con xúc xắc và giá trị là số đếm của những kết quả này

for(;$i++<100;)$r[rand(1,6)+rand(1,6)]++;print_r($r);

Hãy thử trực tuyến!


If a sum was never rolled, you must include a zero or some way to identify that that particular sum was never rolled.
Tít

1

JavaScript (ES6), 72 byte

Được xem là đầu ra "xấu xí" được cho phép, phần sau đây sẽ xuất ra một mảng chứa số lần mỗi điểm từ 2-12 được cuộn, với 89 phần tử bổ sung được đặt thành 0.

_=>(a=Array(100).fill(0)).map(_=>a[g()+g()]++,g=_=>Math.random()*6|0)&&a

f=
_=>(a=Array(100).fill(0)).map(_=>a[g()+g()]++,g=_=>Math.random()*6|0)&&a
o.innerText=f()
<pre id=o>


Bạn không lãng phí một byte để biến nó thành 100 phần tử thay vì 99 hay 20 hay thậm chí là 12?
Rohan Jhunjhunwala

@RohanJhunjhunwala, thử thách kêu gọi 100 cuộn xúc xắc.
Xù xì

Ồ, tôi nghĩ rằng chỉ cần khởi tạo một mảng 100 phần tử để lưu trữ các cuộn.
Rohan Jhunjhunwala

1

Silos , 99 byte

i=100
lbla
x=rand*6+rand*6
a=get x
a+1
set x a
i-1
if i a
lblb
c=get b
printInt c
b+1
d=11-b
if d b

Hãy thử trực tuyến!

Tung xúc xắc, và lưu trữ chúng trong 11 vị trí đầu tiên của heap, sau đó chỉ lặp đi lặp lại qua heap in mỗi quầy. Đây là một trong những lần sử dụng đầu tiên được ghi lại của từ khóa rand kết hợp với toán tử gán.

Điều đáng chú ý là một vài sửa đổi có thể được thực hiện để đưa ra biểu đồ của các cuộn. nhập mô tả hình ảnh ở đây

Thật không may, nó phải được chạy từ trình thông dịch ngoại tuyến .

i=4000
lbla
x=rand*6+rand*6
a=get x
a+1
set x a
i-1
if i a
canvas 1100 1000 Output
lblb
c=get b
printInt c
d=c*1
y=1000-d
x=b*100
newObj 0 100 d
moveObj b x y
b+1
d=11-b
if d b
wait 10000

1

Thuốc tiên, 157 118 byte

l=&Enum.random(1..&1)
p=fn(o,s)->y=l.(6)+l.(6)
s=List.update_at(s,y,&(&1+1))
if Enum.sum(s)<100 do s=o.(o,s) end
s end

Đã thử một cái gì đó khó hơn Jelly.

Giải trình:

  1. Xác định hàm trả về một số ngẫu nhiên trong khoảng từ 1 đến 6.
  2. Xác định hàm ẩn danh và để y là biến với tổng cuộn.
  3. cập nhật vị trí thích hợp trong danh sách bằng cách thêm 1.
  4. nếu chúng tôi là 100 cuộn trong, bỏ. Khác gọi cho mình một lần nữa đi qua trong chính mình và danh sách cập nhật.
  5. trả về mảng đã cập nhật.

Nên gọi là thích p.(p,[0,0,0,0,0,0,0,0,0,0,0,0,0]). Nó sẽ đưa ra một cảnh báo, nhưng nó sẽ trả về mảng mong muốn với 13 phần tử, 2 phần đầu tiên sẽ bị bỏ qua.


1

Java 8, 104 byte

Một lambda trả lại một int[]tần số. Chỉ định cho Supplier<int[]>.

()->{int o[]=new int[11],i=0;while(i++<100)o[(int)(Math.random()*6)+(int)(Math.random()*6)]++;return o;}

Dùng thử trực tuyến

Lambda

() -> {
    int
        o[] = new int[11],
        i = 0
    ;
    while (i++ < 100)
        o[(int) (Math.random() * 6) + (int) (Math.random() * 6)]++;
    return o;
}

1

q / kdb +, 31 28 25 byte

Giải pháp:

sum!:[11]=/:sum(2#100)?'6

Thí dụ:

q)sum!:[11]=/:sum(2#100)?'6
1 3 5 11 16 21 16 9 8 9 1i

Giải trình:

Lăn xúc xắc 100?6, cuộn xúc xắc một lần nữa và thêm các vectơ lại với nhau. Sau đó xem nơi mỗi kết quả khớp với phạm vi 0..10, sau đó tổng hợp tất cả các dấu vết trong mỗi danh sách:

sum til[11]=/:sum(2#100)?'6 / ungolfed solution
                 (2#100)    / 2 take 100, gives list (100;100)
                        ?'6 / performs rand on each left-each right, so 100 & 6, 100 & 6
              sum           / add the lists together
    til[11]                 / the range 0..10
           =/:              / apply 'equals?' to each right on left list
sum                         / sum up the results, e.g. how many 1s, 2s, 3s.. 12s

Ghi chú:

"Chơi gôn" chủ yếu là hoán đổi qcác từ khóa cho các từ ktương đương, cụ thể là eachtil.


0

QBIC , 45 byte

[100|h=_r1,6|+_r1,6|-2┘g(h)=g(h)+1][0,z|?g(b)

Giải trình:

[100|         FOR a = 1 to 100
h=_r1,6|       set h to a random value between 1-6
 +_r1,6|       + another rnd(1,6) (2, 3 ... 11, 12)
 -2            - 2 (index: 0 ... 10
┘             Syntactic linebreak
g(h)          When using array parenthesis on an undefined array,
              it is interpreted as an array with 10 indexes of all zeroes.           
    =         Of array g, set the value of index h (0 ... 11)
      g(h)+1  to one higher (all indices start out as 0)
              Note that we need to track 11 values. Fortunately, QBasic'set
              empty, 10-sized array has 11 indices, because of base 0 / base 1 ambiguity.
]             NEXT set of dice
[0,z|         FOR b = 0 to 10
?g(b)           PRINT the tracker array

0

APL, 14 byte

,∘≢⌸+/?100 2⍴6

Trình bày dữ liệu dưới dạng bảng với cột bên trái biểu thị tổng và bên phải biểu thị số lần xuất hiện.

Giải thích

        100 2⍴6  ⍝ create an 2×100 array of 6
       ?         ⍝ roll for each cell from 1 to 6
     +/          ⍝ sum every row
   ⌸            ⍝ for every unique sum
,∘≢              ⍝ get the sum and the number of indexes

Bài trước:

APL, 36 31 byte

5 byte được lưu nhờ vào @ Adám

(11⍴⍉⌽f)[⍋11⍴⍉f←,∘≢⌸+/?100 2⍴6]

Giải trình

f←,∘≢⌸+/?100 2⍴6
          100 2⍴6    ⍝ create an 2×100 array of 6
         ?           ⍝ roll for each cell from 1 to 6
       +/            ⍝ sum every row
     ⌸              ⍝ for every unique sum
  ,∘≢                ⍝ get the sum and the number of indexes

(11⍴⍉⌽f)[⍋11⍴⍉f]  ⍝ ⍋x returns the indexes of the sorted x in the current x  
                     ⍝ x[y] find the yth elements of x
                     ⍝ x[⍋y] reorders x the same way that would be required to sort y

            11⍴⍉f   ⍝ the column of sums - see below
 11⍴⍉⌽f            ⍝ the column of counts - see below

Làm thế nào để 11⍴⍉⌽flàm việc?

⍝ ⌽ - Reverses the array
⍝ ⍉ - Transposes the array

  ⍝   f
 9 14   ⍝ Sum - Occurences
 4  9
 7 17
 8 18
 6 15
 5  7
10  3
11  5
 3  6
 2  2
12  4

  ⍝   ⍉f
 9 4  7  8  6 5 10 11 3 2 12  ⍝ Sum
14 9 17 18 15 7  3  5 6 2  4  ⍝ Occurences

  ⍝   ⍉⌽f
14 9 17 18 15 7  3  5 6 2  4  ⍝ Occurences
 9 4  7  8  6 5 10 11 3 2 12  ⍝ Sum

Lưu một vài byte bằng cách kết hợp các câu lệnh và tạo toán hạng ngầm:(11⍴⍉⌽f)[⍋11⍴⍉f←,∘⍴⌸+/?100 2⍴6]
Adám

Xin lỗi, tôi đã chỉnh sửa đề xuất của tôi trong khi bạn kết hợp nó. Chú ý toán hạng ngầm.
Adám

Tuy nhiên, OP cho phép bất kỳ định dạng đầu ra rõ ràng nào, do đó, ,∘⍴⌸+/?100 2⍴6là đủ, vì nó liệt kê các khoản tiền xảy ra (do đó chỉ ra những cái nào không có ở đó) và tần số của chúng (vì vậy không cần sắp xếp).
Adám

0

> <> , 93 byte

00[0[v
v 1\v/4
v 2xxx5
v 3/^\6
>l2(?^+]laa*=?v0[
  /&1+&\ v1&0]<
=?/ :?!\}>:@@:@
oa&0n&}< ^+1

Dùng thử trực tuyến hoặc xem tại sân chơi cá !

Định dạng đầu ra xấu xí là một chuỗi các số được phân tách bằng các dòng mới, trong đó số thứ n nói tổng số n là bao nhiêu lần - nó xấu vì nó in mãi mãi, đối với tất cả các số nguyên dương n , mặc dù hầu hết các dòng sẽ là 0. ( Liên kết TIO được sửa đổi để dừng sau n = 12, với chi phí là 5 byte.)

Sân chơi cá khá chậm - mất khoảng ba phút rưỡi để in tới n = 12 ở tốc độ cao nhất - vì vậy bạn có thể muốn sửa đổi nó để tung 10 cặp xúc xắc thay vì 100 bằng cách thay đổi aa*dòng thứ 5 thành a  (đó là, atheo sau là hai khoảng trắng).

Các cuộn xúc xắc ngẫu nhiên được thực hiện bởi bit này:

1\v/4
2xxx5
3/^\6

Các x s thay đổi hướng cá ngẫu nhiên. Giả sử điều đó được thực hiện với xác suất bằng nhau, rõ ràng kết quả cuộn chết là phân phối đồng đều theo đối xứng.

Khi cá đã cán được 100 cặp xúc xắc, nó sẽ tính tổng số lần n với số bit này (không được mở cho rõ ràng và bắt đầu ở trên cùng bên trái):

v       /&1+&\
>:@@:@=?/ :?!\}
^   +1oa&0n&}<

Chúng tôi giữ n ở phía trước của ngăn xếp và sử dụng thanh ghi để đếm số lần n xuất hiện.


0

Javascript 85 75 ký tự

Cảm ơn Shaggy!

a=[]
for(i=100;i--;)a[o=(f=_=>Math.random()*6|0)()+f()]=(a[o‌​]|0)+1
alert(a)

Lịch sử

85

a={}
f=_=>Math.random()*6
for(i=0;i++<100;)a[o=-~f()-~f()]=(a[o]||0)+1
console.log(a)

Giữ ý nghĩa để cung cấp cho bạn một vài khoản tiết kiệm cho việc này; đây là một phiên bản 75 byte được đánh golf rất nhanh của giải pháp của bạn : a=[];for(i=100;i--;)a[o=(f=_=>Math.random()*6|0)()+f()]=(a[o]|0)+1;alert(a). (Lưu ý: trong trường hợp này, IIFE không tiết kiệm cũng không tốn bất kỳ byte nào nhưng có những lúc nó có thể giúp bạn tiết kiệm một byte hoặc 2, vì vậy thật tiện lợi khi có nó trong "túi golf" của bạn.)
Shaggy

Ồ, tuyệt vời, cảm ơn. Thủ thuật hữu ích đấy! Thật thú vị, đó |0là giải pháp chơi gôn cho "Math.floor ()" và cũng là "chuyển đổi không xác định thành 0".
Steve Bennett

0

Perl 5 , 64 byte

map$s{2+int(rand 6)+int rand 6}++,1..100;say"$_ $s{$_}"for 2..12

Hãy thử trực tuyến!

Định dạng đầu ra:

<sum> <# rolls>

Đối với các khoản tiền có cuộn không, cột cuộn trống.


0

PHP, 65 byte

while($i++<100)${rand(1,6)+rand(1,6)}++;for(;++$k<13;)echo+$$k,_;

in một hàng đầu 0_và sau đó xuất hiện từ 2 đến 12, sau đó là một dấu gạch dưới.
Chạy với -nrhoặc thử trực tuyến .


0

K (oK) , 24 22 byte

Giải pháp:

+/(!11)=/:+/(2#100)?'6

Hãy thử trực tuyến!

Giải trình:

k'Cổng' qgiải pháp của tôi . Đánh giá xảy ra từ phải sang trái, do đó dấu ngoặc quanh til ( !)

+/(!11)=/:+/(2#100)?'6 / the solution
            (2#100)    / the list (100;100)
                   ?'6 / take 6 from each left/each right (roll the dice twice)
           +/          / sum rolls together
  (!11)                / til, performs range of 0..n-1, thus 0..10
       =/:             / equals each right (bucket the sum of the rolls)
+/                     / sum up to get counts per result

Chỉnh sửa:

  • -2 byte chuyển đổi mỗi bên trái cho mỗi bên cả hai và mỗi bên trái + lật cho mỗi bên phải

0

Bình thường, 21 byte

V100aY,O6O6)VTlfqsTNY

Xuất ra từng bước trong quá trình tạo cuộn, sau đó xuất tần số của mỗi tổng 0 - 10 trên một dòng riêng biệt.


V100aY,O6O6)VTlfqsTNY Full program, no input, outputs to stdout
V100                  For N from 0 to 100
    a ,O6O6           Append a pair of random ints below 6
     Y                To a list Y, initialized to the empty list
           )          Then
            VT        For N from 0 to 10
              f     Y Print Y filtered to only include pairs
                q  N  For which N is equal to
                 sT   The sum of the pair

0

Java (OpenJDK 8) , 95 byte

a->{int r[]=new int[11],i=0,d=0;for(;i++<200;)r[d+=Math.random()*6]+=i%2<1?1-(d=0):0;return r;}

Hãy thử trực tuyến!

Giải thích

a->{
  int r[] = new int[11],     // Rolls or result
      i   = 0,               // Iteration
      d   = 0;               // Dice accumulator
  for (;i++<200;)
    r[d+=Math.random()*6] += // Accumulate a new die and start an addition
     i % 2 < 1               // Accumulate up to two dice
       ? 1 - (d = 0)         // If we're at 2 dice, reset the accumulator and add 1
       : 0;                  // If we only have one die, add 0
  return r;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.