Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Skrypt do losowania szczęśliwych numerków
irzyk09
post 25.02.2014, 08:01:38
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 25.02.2014

Ostrzeżenie: (0%)
-----


Witam mam następujacy skrypt:

  1. <?php
  2. $dzien=date('D');
  3.  
  4. if($dzien=="Sat" || $dzien=="Sun") {
  5. echo 'Dzisiaj nie są losowane szczęśliwe numerki.';
  6. exit; }
  7.  
  8. else {
  9. echo 'Dzisiejsze szczęśliwe numerki to: <b><font color="red">';
  10. if(file_exists('/wp-content/themes/szkola/numerek/numerek.txt')) {
  11. $liczby=file('/wp-content/themes/szkola/numerek/numerek.txt');
  12. if ($liczby[2]==$dzien) {
  13. echo intval($liczby[0]).', '.intval($liczby[1]); } }
  14. if($liczby[2]!=$dzien) {
  15. $liczba1=rand(1,30);
  16. $liczba2=rand(1,30);
  17. while($liczba2==$liczba1) {
  18. $liczba2=rand(1,30); }
  19. $plik=fopen('/wp-content/themes/szkola/numerek/numerek.txt', 'w');
  20. fwrite($plik, "$liczba1 - Pierwsza liczba
  21. $liczba2 - Druga liczba
  22. $dzien");
  23. fclose($plik);
  24. echo $liczba1.', '.$liczba2;}}
  25. ?>


Chciałbym aby liczby wylosowane z pewnego zakresu np 1-30 zapisywały się i żeby nie możliwa była sytuacja, że liczba się będzie powtarzać. Chodzi o to aby wszystkie liczby z podanego zakresu się pojawiły czyli jeżeli wyświetli się już 29 liczb w ciągu 29 dni to kolejnego dnia musi wylosować się 30. Chodzi o to żeby każdy miał równe szanse na wylosowanie i aby to każdego spotykało. Pozdrawiam i proszę o poradę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
SmokAnalog
post 25.02.2014, 09:06:57
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Są dwa popularne rozwiązania problemu losowych liczb bez powtórzeń:
  1. Pętla while, która działa tak długo, aż nie zostanie wylosowana liczba,a która jeszcze nie padła.
    Nie lubię tego rozwiązania. Jest mało eleganckie i teoretycznie (praktycznie nie) może zawiesić skrypt w nieskończoność.
  2. Działanie na puli dostępnych liczb
    To rozwiązanie jest o wiele lepsze. Masz tablicę z liczbami dostępnymi do wylosowania, na przykład od 1 do 30. Losujesz liczbę, na przykład 7 i w tym momencie wyrzucasz liczbę z tablicy. Teraz masz w tablicy 29 liczb i losujesz jedną z nich - szansy na powtórzenie nie ma, bo... liczby 7 nie ma już w puli.
Go to the top of the page
+Quote Post
KR2615
post 25.02.2014, 10:01:39
Post #3





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


Albo na MySQLu:
Każdej liczbie dodać polę last DATETIME gdzie będzie zapisywane kiedy ostatnio padła. Potem wybierać
  1. SELECT * FROM numbers ORDER BY last ASC LIMIT 10
i z tych dziesięciu losować dwie. Imo daje to większą losowość niż wywalanie z tablicy.


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post 25.02.2014, 19:49:56
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat(KR2615 @ 25.02.2014, 10:01:39 ) *
Imo daje to większą losowość niż wywalanie z tablicy.

facepalmxd.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:35