Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
PROGRAM UNBIAS
|
||||
|
||||
FUNCTION RANDN(N)
|
||||
RANDN=INT(1+N*RND(1))=1
|
||||
END FUNCTION
|
||||
|
||||
PROCEDURE UNBIASED(N->RIS)
|
||||
LOCAL A,B
|
||||
REPEAT
|
||||
A=RANDN(N)
|
||||
B=RANDN(N)
|
||||
UNTIL A<>B
|
||||
RIS=A
|
||||
END PROCEDURE
|
||||
|
||||
BEGIN
|
||||
PRINT(CHR$(12);) ! CLS
|
||||
RANDOMIZE(TIMER)
|
||||
|
||||
FOR N=3 TO 6 DO
|
||||
BIASED=0
|
||||
UNBIASED=0
|
||||
FOR I=1 TO 10000 DO
|
||||
IF RANDN(N) THEN biased+=1
|
||||
UNBIASED(N->RIS)
|
||||
IF RIS THEN unbiased+=+1
|
||||
END FOR
|
||||
PRINT("N =";N;" : biased =";biased/100;", unbiased =";unbiased/100)
|
||||
END FOR
|
||||
END PROGRAM
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
import math, strutils
|
||||
randomize()
|
||||
|
||||
template newSeqWith(len: int, init: expr): expr =
|
||||
var result {.gensym.} = newSeq[type(init)](len)
|
||||
for i in 0 .. <len:
|
||||
result[i] = init
|
||||
result
|
||||
|
||||
proc randN(n): (proc: range[0..1]) =
|
||||
result = proc(): range[0..1] =
|
||||
if random(n) == 0: 1 else: 0
|
||||
|
||||
proc unbiased(biased): range[0..1] =
|
||||
var (this, that) = (biased(), biased())
|
||||
while this == that:
|
||||
this = biased()
|
||||
that = biased()
|
||||
return this
|
||||
|
||||
for n in 3..6:
|
||||
var biased = randN(n)
|
||||
var v = newSeqWith(1_000_000, biased())
|
||||
var cnt0, cnt1 = 0
|
||||
for x in v:
|
||||
if x == 0: inc cnt0
|
||||
else: inc cnt1
|
||||
echo "Biased(",n,") = count1=",cnt1,", count0=",cnt0,", percent=",
|
||||
formatFloat(100 * float(cnt1)/float(cnt1+cnt0), ffDecimal, 3)
|
||||
|
||||
v = newSeqWith(1_000_000, unbiased(biased))
|
||||
cnt0 = 0
|
||||
cnt1 = 0
|
||||
for x in v:
|
||||
if x == 0: inc cnt0
|
||||
else: inc cnt1
|
||||
echo " Unbiased = count1=",cnt1,", count0=",cnt0,", percent=",
|
||||
formatFloat(100 * float(cnt1)/float(cnt1+cnt0), ffDecimal, 3)
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
function randN(integer N)
|
||||
return rand(N) = 1
|
||||
end function
|
||||
|
||||
function unbiased(integer N)
|
||||
integer a
|
||||
while 1 do
|
||||
a = randN(N)
|
||||
if a!=randN(N) then
|
||||
return a
|
||||
end if
|
||||
end while
|
||||
end function
|
||||
|
||||
constant n = 10000
|
||||
integer cb, cu
|
||||
for b=3 to 6 do
|
||||
cb = 0
|
||||
cu = 0
|
||||
for i=1 to n do
|
||||
cb += randN(b)
|
||||
cu += unbiased(b)
|
||||
end for
|
||||
printf(1, "%d: %5.2f%% %5.2f%%\n", {b, 100 * cb / n, 100 * cu / n})
|
||||
end for
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
for n = 3 to 6
|
||||
biased = 0
|
||||
unb = 0
|
||||
for i = 1 to 10000
|
||||
biased += randN(n)
|
||||
unb += unbiased(n)
|
||||
next
|
||||
see "N = " + n + " : biased = " + biased/100 + "%, unbiased = " + unb/100 + "%" + nl
|
||||
next
|
||||
|
||||
func unbiased nr
|
||||
while 1
|
||||
a = randN(nr)
|
||||
if a != randN(nr) return a ok
|
||||
end
|
||||
|
||||
func randN m
|
||||
m = (random(m) = 1)
|
||||
return m
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
func randN (n) {
|
||||
n.rand / (n-1) -> int
|
||||
}
|
||||
|
||||
func unbiased(n) {
|
||||
var n1 = nil
|
||||
do { n1 = randN(n) } while (n1 == randN(n))
|
||||
return n1
|
||||
}
|
||||
|
||||
var iterations = 1000
|
||||
|
||||
for n in (3..6) {
|
||||
var raw = []
|
||||
var fixed = []
|
||||
iterations.times {
|
||||
raw[ randN(n) ] := 0 ++
|
||||
fixed[ unbiased(n) ] := 0 ++
|
||||
}
|
||||
printf("N=%d randN: %s, %4.1f%% unbiased: %s, %4.1f%%\n",
|
||||
n, [raw, fixed].map {|a| (a.dump, a[1] * 100 / iterations) }...)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue