Mozna by bylo casove rychlejsi porovnat, zda je znak>max a az pak vyhodnocovat, zda je to pismenko.
Nebo dat jako vychozi max='a' a pak porovnat znak>max and znak<'z'. Bude tam o jedno if mene.
Příspěvky odeslané z IP adresy 2001:718:2601:26c:598:3b6...–
Zkus tam pak tohle. Tez to neudela vyvazene promichani, ale aspon se ty cisla meni.
/*
for (b=0; b<n; b++)
{
a = rnd(n-b);
tmp = pozice[a];
pozice[a] = pozice[b];
pozice[b] = tmp;
}
*/
pozice = pozice.sort(function(){return 0.6 - Math.random();});
No, kdyz myslis... Staci jednoduchy test souctu cisel v danem intervalu. Melo by vyjit vsude stejne cislo, pokud je to dobre rovnomerne promichane i po 100x zmacknuti F5. Jaka nahodicka, ze zrovna od kraju je soucet nejvetsi a klesa do stredu. Cim by to tak mohlo byt? :)
<script>
function rnd(n) {return Math.floor(Math.random()*n);}
function mytest(pozice)
{
var m,n,a,arr, i,j, str;
n = 1000;
a = 10;
m = Math.floor(n/a);
arr = [];
str = '';
for (j=0; j<a; j++)
{
arr[j] = 0;
}
for (i=0; i<n; i++)
{
for (j=a-1; j>=0; j--)
{
if (i>m*j) {arr[j] += pozice[i]; break;}
}
}
str += '<hr>';
str += arr.join(' | ');
return str;
}
var i, a, b, n, tmp, pozice;
str = '';
pozice = [];
n = 1000;
for (i=0; i<n; i++)
{
pozice[i] = i;
// pozice[a] = rnd(n);
}
str = pozice.join(', ') + str;
str = '<hr>' + str;
for (b=0; b<n; b++)
{
a = rnd(n-b);
tmp = pozice[a];
pozice[a] = pozice[b];
pozice[b] = tmp;
}
str = pozice.join(', ') + str;
str = '<hr>' + str;
str = mytest(pozice) + str;
document.write(str);
</script>
A v cem je problem? Nevis, jak se micha?
(Dale, to neni to pascal kod, ale ten snadno najdes googlem)
- Udelas cyklus, treba, do 250, nahodne vyberes dve cisla, prohodis.
cyklus (i<250)
{
a = random(17)
b = random(17)
tmp = pozice[a]
pozice[a] = pozice[b]
pozice[b] = tmp
}
- Nebo. Udelas nove pole a do nej budes skladat nahodna cisla, ktera v tom poli jeste nejsou. Coz ale muze bezet do nekonecna.
pole = [ ]
cyklus (i<17)
{
a = random(17)
cyklus (i<17) je a v poli? ano {nic}, ne {pridej do pole; i++}
}
- A nebo, treba, dnes velice moderni, nahodne serazeni, pokud algoritmus provadi konecny pocet cyklu
function sortfunc (a,b) {return random()>random() ? a : b;}
array.sort(sortfunc);
Cili, udelas funkci, ktera rozhodne, ktere ze dvou nahodnych cisel je vetsi a podle toho se prehodi radky tabulky (pole). A protoze algoritmus serazeni obvykle pouziva konecny pocet kroku, tak to nebude delat do nekonecna.
- A nebo udelas pole, kde das jako prvni cislo 0 az 17 a jako druhe cislo nahodne cislo. Seradis to podle druheho cisla
pole = []
pole[] = [0, random()]; // [0, 0.754821]
pole[] = [1, random()]; // [1, 0.257211]
pole[] = [2, random()]; ... cyklem
function sortfunc (a,b) {return a[1]>b[1] ? a : b;}
pole.sort(sortfunc);
alert(pole[0][0])
alert(pole[1][0])
alert(pole[2][0])
http://programujte.com/forum/vlakno/30814-php-funkcia-vykonana-az-za-urcity-cas/