İki Altı Taraflı Zarın 100 Rulo Toplamı


14

Altı taraflı iki zarınız olduğunu varsayalım. Her çiftin toplamını hesaplayarak çifti 100 kez yuvarlayın. Her bir toplamın gerçekleşme sayısını yazdırın. Bir toplam hiç yuvarlanmadıysa, o toplamın hiçbir zaman yuvarlanmadığını tanımlamak için sıfır veya bir yol eklemeniz gerekir.

Örnek Çıktı: [3, 3, 9, 11, 15, 15, 11, 15, 7, 8, 3]

Bir meblağın toplanma sayısı meblağlar endeksinde temsil edilir - 2

Bu örnekte, iki toplam 3 kez ([2-2]), toplam üç 3 kez ([3-2]), toplam dört 9 kez ([4-2]) toplandı ve bu şekilde üzerinde. Bireysel zarların bir miktara ulaşması önemli değil (5 ve 2, 6 ve 1 ile aynı sayı olarak sayılır)

Verilerin nasıl okunması gerektiğini açıkladığınız sürece, "çirkin" çıktılar gayet iyi (sondaki sıfırlar, ekstra çıktı, garip veri temsil yolları vb.).


2
"Her bir çiftin kaç kez yazdırıldığı" veya "her bir toplamın kaç kez yazdırıldığı " anlamına mı geliyor?
Esolanging Fruit

1
Belirli bir miktar hiç gelmezse 0, listede bir olması gerekir mi yoksa ihmal edilebilir mi?
Greg Martin

1
Farklı değerlerin tutarlı bir şekilde tanımlanması gerekiyor mu yoksa tek başına sayımlar yeterli mi?
Jonathan Allan

1
Çıktı, her bir çift kombinasyonunun kaç kez meydana geldiği ise, neden her bir rulonun değerini toplamalıyız? Bu toplamla ne yapmamız gerekiyor? "Çirkin" ile ne demek istiyorsun?
Shaggy

1
extra outputama yine de sonsuz sayıda rasgele sayı listesi çıkaramıyoruz ve rastgele orada bir yerlerde göründüğünü söyleyemeyiz, değil mi? Bu standart bir boşluk.
Stephen

Yanıtlar:


5

Jöle , 13 12 bayt

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

Bir niladik bağlantı. Çıktı biçimi listelerinin listesidir [value, count].

(Sıfır rulolar, çıktıda böyle bir girişin olmadığı anlamına gelir - örneğin bir çıktı, [[6, 12], [7, 74], [8, 14]]yalnızca altı, yedi ve sekizlerin toplamının yuvarlandığını tanımlar.)

Çevrimiçi deneyin!

Nasıl?

³Ḥ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 bayt

@Emigna sayesinde -2 bayt

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

Çevrimiçi deneyin!

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 bayt kaydeder.
Emigna

@Emigna, döngünün daha kısa olmasını beklemiyordum, teşekkürler!
kalsowerus

2

Mathematica, 50 bayt

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

Kolay uygulama. Herhangi bir toplam elde edilmezse 0, listeden çıkarılır.


2

MATL , 17 bayt

6H100I$Yrs!11:Q=s

Çıktı, her çift için 2'den 12'ye kadar kaç kez olduğunu belirten, boşluklarla ayrılmış 11 sayının (bazıları muhtemelen 0) listesidir.

Çevrimiçi deneyin!

Karşılaştırma için, her bir çiftin ortalama olarak kaç kez görüneceği teorik ortalama sayısı şu şekilde hesaplanabilir: 6:gtY+36/100* .

Silindir sayısı arttırılırsa, elde edilen değerler teorik değerlere yaklaşır . Örneğin 10000 rulo ile elde edilen ve teorik değerlere bakınız.



2

Perl 6 , 30 bayt

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

(^6).picksıfırdan beşe kadar rastgele bir sayıdır. xx 100bu sayıların yüz elemanlı bir listesini yapar. xx 2böyle iki liste üretir. [Z+]ekleyerek bu iki listeyi sıkıştırır, iki elemanlı ruloların yüz elemanlı bir listesini oluşturur. Son olarak, bagbu listeyi çokluk içeren bir koleksiyon olan bir torbaya koyar. Örnek REPL çıktısı:

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

Bu, 1, 9 ve 0'ın her biri dört kez, dördü on dört kez, vb. Meydana geldiği anlamına gelir. Bu koddaki "zar" 0-5 arasında bir sayı ürettiğinden, ruloları bir çift elde etmek için bu sayıların her birine iki tane ekleyin. standart 1-6 zar üretecektir.


Vay. Perl 6, hesaba katılması gereken bir kuvvettir.
Jakob

Ancak, "Bir toplam hiç yuvarlanmadıysa, o toplamın hiçbir zaman yuvarlanmadığını tanımlamak için sıfır veya bir yol eklemeniz gerekir." Torba çözümü bunu karşılamıyor gibi görünmüyor.
Jakob

Belirli bir sayı yuvarlanmadıysa, bu durum numaranın çantada bulunmamasıyla belirlenebilir.
Sean

2

R , 45 37 bayt

Jarko Dubbledam sayesinde -7 bayt

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

Öğelerin bir tablo nesnesini ve her birinin sayımını döndürür. Gerçekleşmeyen değerleri hariç tutar.

Çevrimiçi deneyin!

eski versiyon:

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

sample(6,200,T) 200 kez örnekleri 1:6değiştirme ile eşit olarak , daha sonra 2 sıralı bir matris yapar, sütunları toplar, sonra artan düzende sıralar ve çalışmaların uzunluklarını hesaplar. Ulaşılmayan zar toplamlarını atlar.

rleVarsayılan olarak aşağıdaki biçimde yazdırılan bir nesneyi döndürür :

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

lengthssayımlar nerede valuesve zar toplamları.

TIO Bağlantısı


1

PHP, 53 Bayt

ilişkilendirilebilir bir dizi yazdırır. anahtar iki dices sonucu ve değer bu sonuçların sayısı

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

Çevrimiçi deneyin!


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

JavaScript (ES6), 72 bayt

"Çirkin" çıktıya izin verildiğinde, aşağıdakiler 2-12 arasındaki her puanın kaç kez yuvarlandığını ve ek 89 elemanın 0'a ayarlandığı bir dizi çıkarır.

_=>(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 veya 20, hatta 12 yerine 100 öğe yapmak için bayt harcamıyor musunuz?
Rohan Jhunjhunwala

@RhanJhunjhunwala, meydan okuma iki zar 100 rulo gerektirir.
Shaggy

Oh, sadece ruloları saklamak için 100 element dizi başlatılması düşündüm.
Rohan Jhunjhunwala

1

SILOS , 99 bayt

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

Çevrimiçi deneyin!

Zarları yuvarlar ve yığının ilk 11 noktasında saklar, daha sonra her sayacı bastırarak yığın üzerinden tekrarlar. Bu, bir atama operatörü ile birlikte rand anahtar kelimesinin ilk kaydedilen kullanımlarından biridir.

Ruloların bir histogramını çıkarmak için birkaç değişiklik yapılabileceğini belirtmek gerekir. resim açıklamasını buraya girin

Maalesef, çevrimdışı yorumlayıcıdan çalıştırılmalıdır .

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

İksir, 157118 bayt

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

Jelly'den daha zor bir şey denedim.

Açıklama:

  1. 1 ile 6 (dahil) arasında rastgele bir sayı döndüren işlevi tanımlayın.
  2. İşlevi anonim olarak tanımlayın ve yrulo toplamıyla değişken olsun .
  3. 1 ekleyerek listedeki uygun yeri güncelleyin.
  4. eğer 100 rulo varsa, çıkın. Başka kendinize ve güncellenmiş listeye tekrar kendinizi arayın.
  5. güncellenmiş diziyi döndürür.

Gibi çağrılmalıdır p.(p,[0,0,0,0,0,0,0,0,0,0,0,0,0]). Bir uyarı verir, ancak istenen öğeyi 13 öğeyle döndürür, ilk 2 yoksayılmalıdır.


1

Java 8, 104 bayt

int[]Frekansları döndüren lambda . Atayın Supplier<int[]>.

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

Çevrimiçi Deneyin

Ungolfed 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 bayt

Çözüm:

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

Misal:

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

Açıklama:

Bir zar at 100?6, bir zar tekrar at ve vektörleri birlikte ekle. Ardından, her sonucun 0..10 aralığına eşleştiğini görün, ardından her listedeki tüm doğruları toplayın:

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

Notlar:

'Golf' çoğunlukla dışarı takas edilir qiçin anahtar kelimeler k, yani eş eachve til.


0

QBIC , 45 bayt

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

Açıklama:

[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 bayt

,∘≢⌸+/?100 2⍴6

Verileri, sol sütun toplamı, sağ ise olay sayısını temsil eden bir tablo olarak sunar.

Açıklaması

        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

Önceki yazı:

APL, 36 31 bayt

@ Adám sayesinde 5 bayt kaydedildi

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

açıklama

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

Nasıl 11⍴⍉⌽fçalışır?

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

İfadeleri birleştirerek ve işlenen (11⍴⍉⌽f)[⍋11⍴⍉f←,∘⍴⌸+/?100 2⍴6]
taciti

Maalesef, siz dahil ederken öneriyi düzenledim. Zımni işlenen dikkat edin.
Adám

Bununla birlikte, OP ,∘⍴⌸+/?100 2⍴6, ortaya çıkan toplamları listelediğinden (böylece hangilerinin orada olmadığını gösterir) ve sıklıklarını (bu nedenle sıralama gerekli değildir) listelediği için herhangi bir kesin çıktı formatına izin verir .
Adam

0

> <> , 93 bayt

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

Çevrimiçi deneyin veya balık oyun alanında izleyin !

Çirkin çıkış biçimi bir sayı dizisidir satırbaşıyla, ayrılmış olan n inci sayı kaç toplamı oldu kere diyor n buna sonsuza yazdırır çünkü tüm pozitif tamsayılar için, çirkin - n çizgilerin en 0 olacaktır rağmen, ( TIO bağlantısı n = 12'den sonra 5 bayt maliyetle duracak şekilde değiştirilir .)

Balık oyun alanı oldukça yavaştır - en yüksek hızda n = 12'ye kadar yazdırmak yaklaşık üç buçuk dakika sürer - bu yüzden aa*5. satırdaki 100 yerine 10 çift zar atarak a  (yani aardından iki boşluk).

Rastgele zar atışları bu bit ile yapılır:

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

xLer rastgele balığın yönünü değiştirmek. Eşit olasılıklarla uygulandığı varsayılarak, kalıp rulosu sonucunun simetri ile düzgün bir dağılım olduğu açıktır.

Balık 100 çift zar attığında, bu bitle toplamın kaç kez n olduğunu sayar (netlik için sarılmış ve sol üstte başlayarak):

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

Biz tutmak n yığının ön ve kaç kez saymak için kayıt kullanın n göründüğünü.


0

JavaScript 85 75 karakter

Teşekkürler Shaggy!

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

Tarih

85

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

Bunun için size birkaç tasarruf sağlamanın anlamı tuttu; Buraya çözümün çok çabuk golfed 75 bayt sürümü: a=[];for(i=100;i--;)a[o=(f=_=>Math.random()*6|0)()+f()]=(a[o]|0)+1;alert(a). (Not: Bu örnekte, IIFE hiçbir bayt tasarrufu yapmaz veya maliyeti yoktur, ancak size bir bayt veya 2 kaydedebileceği zamanlar vardır, bu nedenle "golf çantanızda" bulundurmak kullanışlıdır.)
Shaggy

Oh, harika, teşekkürler. Yararlı numaralar var! Çok ilginç bu |0"Math.floor ()" ve "tanımsız 0 dönüştürmek" için golfy çözümdür.
Steve Bennett

0

Perl 5 , 64 bayt

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

Çevrimiçi deneyin!

Çıkış formatı:

<sum> <# rolls>

Sıfır rulo içeren toplamlar için rulo sütunu boştur.


0

PHP, 65 bayt

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

0_önce bir satır aralığı ve ardından 2 ila 12 kez meydana gelen baskıları ve ardından her birini bir alt çizgi çizer.
Birlikte çalışın-nr veya çevrimiçi deneyin .


0

K (oK) , 24 22 bayt

Çözüm:

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

Çevrimiçi deneyin!

Açıklama:

kbenim qçözümümün 'limanı' . Değerlendirme sağdan sola gerçekleşir, bu nedenle til ( !) etrafındaki parantezler

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

Düzenlemeler:

  • Her biri için her sol için -2 bayt ve her sağ için her sol + flip

0

Pyth, 21 bayt

V100aY,O6O6)VTlfqsTNY

Ruloların oluşturulmasındaki her adımı çıktılar, sonra her bir toplamın frekansını 0 - 10 ayrı bir satıra çıkarır.


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 bayt

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

Çevrimiçi deneyin!

açıklamalar

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.