두 개의 6면 주사위 100 롤의 합


14

6면 주사위가 2 개 있다고 가정합니다. 각 쌍의 합을 계산하여 쌍을 100 번 굴립니다. 각 합계가 발생한 횟수를 인쇄하십시오. 합이 롤링되지 않은 경우 특정 합이 롤링되지 않았 음을 식별 할 수있는 방법을 0 또는 포함해야합니다.

출력 예 : [3, 3, 9, 11, 15, 15, 11, 15, 7, 8, 3]

합이 롤된 횟수는 합 인덱스-2로 표시됩니다.

이 예에서는 2의 합이 3 번 ([2-2]), 3 개의 3 번 ([3-2])의 합, 4 개의 9 번 ([4-2])의 합으로 진행되었습니다. 의 위에. 개별 주사위 롤이 합에 도달하는 것은 중요하지 않습니다 (5와 2는 6과 1과 같은 합계로 계산됩니다)

데이터를 읽는 방법을 설명하는 한 "추악한"출력은 괜찮습니다 (후행 0로드, 추가 출력, 데이터를 나타내는 이상한 방법 등).


2
"각 쌍이 발생한 횟수를 인쇄합니다"또는 "각 합이 발생한 횟수를 인쇄합니다 "를 의미합니까?
Esolanging 과일

1
특정 합계가 나타나지 않으면 0목록에가 있어야합니까 아니면 생략 할 수 있습니까?
Greg Martin

1
다른 값을 일관되게 식별 할 수 있어야합니까, 아니면 카운트만으로도 충분합니까?
Jonathan Allan

1
출력이 각 쌍의 조합이 발생하는 횟수 인 경우 각 롤의 값을 합산해야하는 이유는 무엇입니까? 우리는 그 총계와 무엇을해야합니까? "못생긴"은 무슨 뜻입니까?
얽히고 설킨 Shaggy

1
extra output그러나 우리는 여전히 무작위 숫자의 무한 목록을 출력 할 수 없으며 무작위로 어딘가에 나타납니다. 그것은 표준 허점 iirc입니다.
Stephen

답변:


5

젤리 , 13 12 바이트

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

닐라 딕 링크. 출력 형식은의 목록 목록입니다 [value, count].

(제로 롤은 출력에 해당 항목이 없음을 의미합니다. 예를 들어 출력 [[6, 12], [7, 74], [8, 14]]은 6, 7, 8의 합만 롤되었음을 식별합니다.)

온라인으로 사용해보십시오!

어떻게?

³Ḥ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 바이트

@Emigna 덕분에 -2 바이트

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

온라인으로 사용해보십시오!

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<2 바이트를 절약합니다.
Emigna

@Emigna, 루핑이 더 짧을 것으로 기대하지 않았습니다. 감사합니다!
kalsowerus

2

Mathematica, 50 바이트

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

간단한 구현. 합이 달성되지 않으면 0목록에서 생략됩니다.


2

MATL , 17 바이트

6H100I$Yrs!11:Q=s

출력은 공백으로 구분 된 11 개의 숫자 (일부는 0 일 수 있음)의 목록이며, 각 쌍의 횟수는 2에서 12 사이입니다.

온라인으로 사용해보십시오!

비교를 위해 각 쌍이 평균적으로 나타나는 이론적 평균 횟수는 다음과 같이 계산할 수 있습니다. 6:gtY+36/100* .

롤 수가 증가하면 획득 한 값 이 이론적 인 값에 근접 합니다. 예를 들어, 참조 획득이론적 10000 롤에 값을.



2

펄 6 , 30 바이트

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

(^6).pick0에서 5까지의 난수입니다. xx 100그런 숫자의 백 요소 목록을 만듭니다. xx 2이러한 두 가지 목록을 생성합니다. [Z+]이 두리스트를 추가하여 100 개의 요소로 구성된 다이 다이 롤을 생성합니다. 마지막으로 bag그 목록을 가방에 넣습니다. REPL 출력 예 :

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

즉, 1, 9 및 0은 각각 4 번, 4 번은 14 번 등을 의미합니다.이 코드의 "주사위"는 0-5의 숫자를 생성하므로이 숫자 각각에 2를 더하여 롤 쌍을 얻습니다. 표준 1-6 주사위가 생성됩니다.


와. Perl 6은 고려할 힘입니다.
Jakob

그러나 "합이 롤링되지 않은 경우 특정 합이 롤링되지 않았 음을 식별하는 방법을 포함하지 않아야합니다." 가방 솔루션이 그것을 만족시키는 것처럼 보이지 않습니다.
Jakob

특정 번호가 롤링되지 않은 경우 해당 상황은 가방에 번호가없는 것으로 식별 될 수 있습니다.
Sean

2

R , 45 37 바이트

Jarko Dubbledam 덕분에 -7 바이트

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

요소의 테이블 개체와 각 개체의 개수를 반환합니다. 발생하지 않은 값을 제외합니다.

온라인으로 사용해보십시오!

구 버전:

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

sample(6,200,T) 에서 200 회 샘플 1:6대체로 균일하게 한 다음 2 행의 행렬을 만들고 열을 합한 다음 오름차순으로 정렬하고 런의 길이를 계산합니다. 달성되지 않은 주사위 합계를 생략합니다.

rle기본적으로 다음 형식으로 인쇄되는 객체를 반환 합니다.

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 ...

lengths카운트는 어디에 있고 values주사위는 합입니다.

TIO 링크


1

PHP, 53 바이트

연관 배열을 인쇄합니다. 키는 두 오지의 결과이고 값은이 결과의 개수입니다

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

온라인으로 사용해보십시오!


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

1

자바 스크립트 (ES6), 72 바이트

"추악한"출력이 허용되면 다음은 2-12의 각 점수가 롤링 된 횟수를 포함하는 배열을 출력하며 추가 89 개의 요소는 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>


99 또는 20 대신 12 개의 요소로 100 개의 요소를 만들기 위해 바이트를 낭비하지 않습니까?
Rohan Jhunjhunwala

@RohanJhunjhunwala, 도전은 두 주사위의 100 롤을 요구합니다.
얽히고 설킨

아, 롤을 저장하기 위해 100 개의 요소 배열을 초기화하고 있다고 생각했습니다.
Rohan Jhunjhunwala

1

SILOS , 99 바이트

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

온라인으로 사용해보십시오!

주사위를 굴려 더미의 처음 11 개 지점에 저장 한 다음 각 카운터를 인쇄하는 힙을 반복합니다. 이는 할당 연산자와 결합 된 rand 키워드의 첫 번째 기록 된 용도 중 하나입니다.

롤의 히스토그램을 출력하기 위해 약간의 수정이 이루어질 수 있다는 점은 주목할 가치가 있습니다. enter image description here

불행히도 오프라인 인터프리터 에서 실행해야합니다 .

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

엘릭서, 157118 바이트

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

젤리보다 더 어려운 일을 했어요.

설명:

  1. 1에서 6 사이의 난수를 반환하는 함수를 정의하십시오.
  2. 익명으로 함수를 정의하고 y롤 합계를 사용하여 변수로 둡니다 .
  3. 1을 추가하여 목록에서 적절한 위치를 업데이트하십시오.
  4. 우리가 100 롤인 경우 종료하십시오. 그렇지 않으면 자신과 업데이트 된 목록을 다시 전달하십시오.
  5. 업데이트 된 배열을 반환합니다.

처럼 호출해야합니다 p.(p,[0,0,0,0,0,0,0,0,0,0,0,0,0]). 경고가 발생하지만 13 개의 요소가있는 원하는 배열을 반환하므로 처음 2 개는 무시해야합니다.


1

자바 8, 104 바이트

int[]의 주파수를 반환하는 람다 . 에 할당하십시오 Supplier<int[]>.

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

온라인 시도

언 골프 람다

() -> {
    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 바이트

해결책:

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

예:

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

설명:

주사위를 굴려 100?6, 다시 주사위와 함께 벡터를 추가합니다. 그런 다음 각 결과가 0..10 범위와 일치하는 위치를 확인한 다음 각 목록의 모든 사실을 요약하십시오.

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

노트:

'골프'는 대부분 스와핑되어 q키워드를 k즉, 균등 each하고 til.


0

QBIC , 45 바이트

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

설명:

[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 바이트

,∘≢⌸+/?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

이전 게시물 :

APL, 36 31 바이트

@ Adám 덕분에 5 바이트 절약

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

설명

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

어떻게 11⍴⍉⌽f작동합니까?

⍝ ⌽ - 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

명령문을 결합하고 피연산자를 암묵적으로 만들어 몇 바이트를 절약하십시오.(11⍴⍉⌽f)[⍋11⍴⍉f←,∘⍴⌸+/?100 2⍴6]
Adám

제안을 통합하는 동안 제안을 수정했습니다. 암묵적인 피연산자에 주목하십시오.
Adám

그러나 OP는 모호하지 않은 출력 형식을 허용하므로 ,∘⍴⌸+/?100 2⍴6발생하는 합계 (따라서 어떤 것이 존재하지 않는지를 나타냄)와 주파수 (따라서 정렬이 필요하지 않음)를 나열하면 충분합니다.
Adám

0

> <> , 93 바이트

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

온라인으로 시도 하거나 물고기 놀이터 에서 시청하십시오. !

못생긴 출력 형식은 줄 바꿈으로 구분 된 일련의 숫자입니다. 여기서 n 번째 숫자는 합계가 n의 횟수를 나타 냅니다. 모든 양의 정수 n에 대해 영원히 인쇄되기 때문에 추악합니다. 대부분의 줄은 0입니다. TIO 링크는 n 후에 중지되도록 수정되었습니다. 5 바이트의 비용으로 = 12 .)

어류 운동장은 속도가 매우 느립니다 . 최고 속도로 최대 n = 12 까지 인쇄하는 데 약 3 분 30 초가 소요 되므로 aa*5 번째 줄을 다음 과 같이 변경하여 100 대신 10 쌍의 주사위를 굴 리도록 수정하고 싶을 수 있습니다. a  (그건,a 두 공백이 뒤 따릅니다).

랜덤 주사위 롤은이 비트에 의해 수행됩니다.

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

그만큼 x의 무작위 물고기의 방향을 변경합니다. 그것이 동일한 확률로 구현되었다고 가정하면, 다이 롤 결과는 대칭에 의한 균일 한 분포라는 것이 분명합니다.

물고기가 100 쌍의 주사위를 굴리면 이 비트로 합이 n 을 몇 배나 세는지 (명확하게하기 위해 왼쪽 상단에서 시작) 계산합니다.

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

스택의 맨 앞에 n 을 유지 하고 레지스터를 사용하여 n이 나타나는 횟수를 계산합니다 .


0

자바 스크립트 85 75 자

감사합니다 얽히고 설킨!

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

역사

85

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

이를 위해 약간의 비용 절감을 의미합니다. 다음은 매우 빠른 75 바이트 버전의 솔루션 a=[];for(i=100;i--;)a[o=(f=_=>Math.random()*6|0)()+f()]=(a[o]|0)+1;alert(a)입니다. (참고 :이 경우, IIFE는 바이트를 절약하거나 비용을 지불하지 않지만 1 바이트 또는 2 바이트를 절약 할 수있는 시간이 있으므로 "golfbag"에 보관하는 것이 편리합니다.
Shaggy

오, 고마워 유용한 트릭! |0"Math.floor ()"에 대한 골치 아픈 해결책이며 "undefined를 0으로 변환"하는 것도 흥미 롭습니다 .
Steve Bennett


0

PHP, 65 바이트

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

행간을 인쇄 한 0_다음 2-12의 어커런스를 인쇄 하고 그 뒤에 밑줄을 표시합니다. 온라인으로
실행 -nr하거나 사용해보십시오 .


0

K (oK) , 24 22 바이트

해결책:

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

온라인으로 사용해보십시오!

설명:

kq솔루션 의 '포트' . 평가는 오른쪽에서 왼쪽으로 이루어 지므로 틸트 ( !) 주변의 괄호

+/(!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

편집 :

  • -2 바이트마다 각각 왼쪽으로 전환하고 왼쪽에서 + 오른쪽으로 뒤집기

0

Pyth, 21 바이트

V100aY,O6O6)VTlfqsTNY

롤 생성의 각 단계를 출력 한 다음 각 합계의 빈도 0-10을 별도의 라인에 출력합니다.


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

자바 (OpenJDK 8) , 95 바이트

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;}

온라인으로 사용해보십시오!

설명

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;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.