“İ” nin “i” olma şansı var


10

Tüm 0 <i <14 için i. Sayının% i olma şansına sahip olduğu rastgele bir sayı üreteci tasarlayın. 0 tam olarak% 9 olma şansına sahip olmalıdır. Jeneratörün çekirdeği sistem zamanı olmalıdır. Rastgele sayı üretimi için önceden tanımlanmış bir işlevi kullanamazsınız.

Temel olarak 1% 1 olma şansına sahiptir, 2% 2 şansa sahiptir ve 13'e kadar% 13 olma şansına sahiptir. Bu kod golf, bu yüzden en kısa kod kazanır.


7
Diğer% 9 şansı ne olacak?
LegionMammal978

@ LegionMammal978 Daha önce belirtmiştim. 0
yazmalıdır.

Evet, şimdi iyi. Daha önce sorun neydi?
ghosts_in_the_code

@ghosts_in_the_code <Eşitsizlikten ve >alıntı bloğundan gelen bir HTML etiketi oluşturuyordu.
Martin Ender

2
Saniyelerin çözünürlüğü iyi mi?
xnor

Yanıtlar:


13

CJam, 14 bayt

E,_T9t\]ze~es=

Burada test edin.

açıklama

E,   e# Push [0 1 2 ... 12 13].
_    e# Make a copy.
T9t\ e# Set the first element to 9. Swap with the original range.
]z   e# Wrap them in an array and transpose to get [[9 0] [1 1] [2 2] ... [13 13].
e~   e# Run-length decode to get `[0 0 0 0 0 0 0 0 0 1 2 2 3 3 3 ... 13 13 ... 13 13].
es=  e# Use the current timestamp as a cyclic index into this array.

Neden olmasın mR?
Doktor

1
@Optimizer "Jeneratörün çekirdeği sistem zamanı olmalıdır. Rasgele sayı üretimi için önceden tanımlanmış bir işlevi kullanamazsınız."
Martin Ender

Ah, o kısmı özledim.
Doktor

7

Python 2, 54

import time
print((time.time()*1e4%800+1)**.5+1)//2%14

İfade f(t) = ((8*t+1)**.5+1)//2, aralıkları eşleyerek tekdüze bir dağılımı üçgen tamsayı dağılımına dönüştürür

[0,1)  --> 1
[1,3)  --> 2
[3,6)  --> 3
[6,10) --> 4
...

Zamanın milisaniye basamaklarını 0'dan 100'e kadar tekdüze bir şamandıraya dönüştürüyoruz time.time()*1e4%100. Aslında, %800dönüşüm adımında 8 ile çarpmayı değiştiriyoruz. Sonunda, 14'ler yaparak 0'lara dönüştürülür %14.



4

Dyalog APL , 20 bayt

⊃(⌊.1×⊃⌽⎕TS)↓(/⍨⍳13)

⍳13tamsayılar 1 13 gerçi
(/⍨... )kendisi tarafından çoğaltmak, örneğin /⍨3olduğunu 3 3 3ve /⍨2 3bir 2 2 3 3 3
n ... damla n elemanlar (yapraklar ise boş liste n > listenin uzunluğu)
⎕TSsistem zaman damgası 2015 11 1 13 28 56 834 örneğin
⊃⌽son öğe, yani şimdiki milisaniye 0-999
⌊.1×çarpın 0.1 ve yuvarlatılmış
ilk eleman ile veri boşsa 0 verir


3

İşleme 3, 65 55 74 bayt

long i=0,c=8,r=System.nanoTime()%100;for(;r>c;i++,c+=i);print(i);

0'dan 99'a (dahil) rastgele bir sayı alın. Sayı 0-8 ise, 0 baskı, 9 baskı 1 ise, 10-11 baskı 2 ise, 12-14 baskı 3 ise, vb ...

Kimse bunu fark etmedi, ancak eski kodla ilgili sorun, millis () uygulamasının çalıştığı süreyi döndürmesi ve programın sonraki çalışmalarında çok benzer sayılar vermesidir. En azından şimdi nano hassasiyetimiz var!


2

PHP, 50 bayt

<?for($t=microtime()*100;0<=$t-=++$i;)?><?=$i%14;
  • microtimezamanı "0.04993000 1446409253" gibi bir dize olarak döndürür, bunu 100 ile çarptığımda, PHP dizeyi 0.04993000'e, sonuç 4.993000'e zorlar. Yani $t"rastgele" bir sayı ile başlatılır[0,100)
  • 1, 2, 3, ... 'den $t0' a ulaşıncaya kadar çıkarıyoruz
  • Sonuç, son çıkarılan sayıdır, modulo 14

Aynı bayt sayısı ;echoyerine aslında yazabilirsiniz ?><?=. Ama güzel bitti!
Ismael Miguel

1

Python3, 86 Bayt

basit:

import time;print(sum([[i]*i for i in range(1,14)],[0]*9)[int(str(time.time())[-2:])])

1

J - 28 karakter

Bu aptalca bir şeydi.

{:({:1e3*6!:0'')$100{.#~i.14

6!:0''Y M D h m smilisaniyenin saniye cinsinden kesir olarak gösterildiği 6 maddelik bir liste olarak geçerli saattir; onlara ulaşmak için saniyeleri ( {:) ile çarpmaktan başka seçeneğimiz yoktur 1e3. Bu arada, #~i.14sıfır 0'lar, bir 1, iki 2s ve onüç 13'e kadar bir liste ve bunu 100 öğeye kadar dolduruyoruz 100{..

J'nin döngüsel indekslemesi yoktur, bu nedenle büyük listeyi indekslemeden önce milisaniye modulo 100'ü almak cazip gelebilir. Ancak, kullanarak iki karakter kaydedebilirsiniz $yerine kadar döngüsel olarak uzatmak biz (her yerde 0'dan almak ancak birçok milisaniye için 100 maddelik liste 60999 ) ve daha sonra son girişini alır.

Bir 60000 eleman listesinin bir sürü bellek veya başka bir şey olduğunu değil, sadece aşırı doldurma gibi hissettiriyor: P


1

JavaScript (ES6) 116

Bu, tohumlanamayan (ve böylece tekrarlanamayan) standart javascript RNG yerine kullandığım basit bir tohumlanmış RNG'nin bir uyarlamasıdır.

R=(s=~new Date,p=[],i=0,j=9)=>{
while(p.push(i)<100)--j?0:j=++i;
return _=>(s=(1+Math.sin(s))*1e5,p[100*(s-~~s)|0])
};

// test

var rnd=R()

t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0];
rgb='000,444,666,888,aaa,ddd,f0f,ff0,0ff,0ff,0f0,00f,f00,fff'.split`,`
.map(v=>(v=parseInt(v,16),[(v&15)*17,(v>>4&15)*17,(v>>8)*17]))

cnt=400*300
//for (i=0;i<cnt;i++)t[rnd()]++;

ctx = C.getContext("2d");
img=ctx.getImageData(0, 0, 400, 300)
for(p=0,y=0;y<300;y++)for(x=0;x<400;x++)
  v=rnd(),t[v]++,
  img.data[p++]=rgb[v][0],img.data[p++]=rgb[v][1],
  img.data[p++]=rgb[v][2],img.data[p++]=255
ctx.putImageData(img, 0, 0)

o=''
for(i=0;i<14;i++)
  t[i]/=cnt, o+=`<p><i>${i}</i><b style="width:${t[i]*300}%">,</b>${(t[i]*100).toFixed(2)}%</p>`;
G.innerHTML=o
#G { width: 400px; font-size: 12px; border: 1px solid #000;  }
p { margin: 0}
b { display: inline-block; font-size:80%; background: #08c; margin: 2px }
i { display: inline-block; width: 20px; text-align: right; padding: 0 4px }
#C { width: 400px; height: 300px; }
<div id=G></div>
<canvas id=C></canvas>


Döndürülen değerin gereksinimlere gerçekten yakın olduğunu nasıl kanıtladığınızı gerçekten çok seviyorum. Güzel yapılmış! O tuvalde +10!
Ismael Miguel

0

TI-BASIC, 18 bayt

real(int(.5+2√(-4+50fPart(sub(getTime

100fPart(sub(getTimeRastgele tortu 0 ila 99 arasında olur. (n-1) inci sayı eşittir (N^2+N)/2, bu nedenle ters eşittir √(2y+1)-.5. 9'a kadar aşağıya doğru ayarladıktan sonra bunu katlayın ve sonuç var

Tek sorun, 8'den az kalıntılar için hayali bir kare kök elde etmemizdir. Bu yüzden programın çıktısının 0 olması için gerçek rolü üstleniyoruz.


0

Perl 5, 51 bayt

50 bayt + 1 -Eyerine -e:

@_=(0)x 9;push@_,($_)x$_ for 0..13;say$_[time%100]
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.