En nyt keksinyt parempaakaan otsikkoa.. no, asiaan.
Miten sais toteutettua seyraavanlaisen systeemin, siis kysehän on nyt php:stä:
1. Arvotaan jokin luku väliltä 1-9 (se onnistuu rand() funktiolla)
2. Arvotaan toinen luku, mutta se ei saa olla sama kuin edellinen
3. Arvotaan kolmas luku, mutta se ei saa olla sama kuin kumpikaan edellisistä
php:sta en hirveästi tiedä mutta eikö se onnistu taulukolla, for silmukalla ja juurikin jollain rand funktiolla tyyliin
for i=0 to 2 taulukko[i]=rand()
Muuttujan taulukko luonnin, for silmukan ja rand funktion käytön saa varmasti äkkiä selville putkan php-oppaasta.
No ei paljon apua ollut, kyllä nyt nuo kaikki osaan tehdä mainiosti
eli jäynis ei sitten ollenkaan katsonut pulman määritelmiä.
Itse toteuttaisin laittamalla luvut (1-9) taulukkoon.
Sen jälkeen shufflella pistäisin taulukko sekaisin.
https://www.php.net/manual/en/function.shuffle.
$luvut = range(1,9); shuffle($luvut); echo $luvut[0]; // eka echo $luvut[1]; // toka echo $luvut[2]; // kolmas
jonka jälkeen otat tarvittavan määrän lukuja taulukon alusta.
edit:
i'm 1337 haxx0r
\o/
Tämä onnistuu helpoiten tekemällä taulukko, jossa on luvut 1-9 ja sitten sekoittamalla tätä taulukkoa n kappaleella taulukon alkioden vaihtoja. Sitten arvottaessa hae vain taulukon luvut vuorotellen.
Toinen vaihtoehto on pitää kirjaa kaikista arvotuista luvuista ja sitten lukua arvottaessa tarkistaa tuliko jo aikaisemmin arvottu luku. Jos tuli niin arvotaan uudestaan.
Kolmas vaihtoehto on pitää arvottavat luvut jonkinlaisessa listassa. Tässä tapauksessa arvotaan aina kuinka mones listan alkio valitaan ja poistetaan listasta. Tällöin joka kierroksella lista lyhenee ja arvottavina lukuina säilyvät vain ne joita ei ole vielä arvottu.
Muitakin vastaavia ratkaisuja löytyy.
Edit: kappas, PHP:ssa on näköjään shuffle-funktio, jolla tuo ensimmäinen tapaus hoituu erittäin helposti.
Joo tuo shuffle onkin kätevä, kiitos.
Aihe on jo aika vanha, joten et voi enää vastata siihen.