45 lines
1.3 KiB
Text
45 lines
1.3 KiB
Text
$ include "seed7_05.s7i";
|
|
include "float.s7i";
|
|
|
|
const type: letter is new enum
|
|
aleph, beth, gimel, daleth, he, waw, zayin, heth
|
|
end enum;
|
|
|
|
const func string: str (in letter: aLetter) is
|
|
return [] ("aleph", "beth", "gimel", "daleth", "he", "waw", "zayin", "heth") [succ(ord(aLetter))];
|
|
|
|
enable_output(letter);
|
|
|
|
const array [letter] integer: table is [letter] (
|
|
5544, 4620, 3960, 3465, 3080, 2772, 2520, 1759);
|
|
|
|
const func letter: randomLetter is func
|
|
result
|
|
var letter: resultLetter is aleph;
|
|
local
|
|
var integer: number is 0;
|
|
begin
|
|
number := rand(1, 27720);
|
|
while number > table[resultLetter] do
|
|
number -:= table[resultLetter];
|
|
incr(resultLetter);
|
|
end while;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
local
|
|
var integer: count is 0;
|
|
var letter: aLetter is aleph;
|
|
var array [letter] integer: occurrence is letter times 0;
|
|
begin
|
|
for count range 1 to 1000000 do
|
|
aLetter := randomLetter;
|
|
incr(occurrence[aLetter]);
|
|
end for;
|
|
writeln("Name Count Ratio Expected");
|
|
for aLetter range letter.first to letter.last do
|
|
writeln(aLetter rpad 7 <& occurrence[aLetter] lpad 6 <&
|
|
flt(occurrence[aLetter]) / 10000.9 digits 4 lpad 8 <& "%" <&
|
|
100.0 * flt(table[aLetter]) / 27720.0 digits 4 lpad 8 <& "%");
|
|
end for;
|
|
end func;
|