두 개의 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

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

설명:

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

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