[Perl] Gra totolotek jak sprawdzić wylosowane liczby


(d4n_) #1

Witam! uczę się perla i mam za zadanie napisać program coś na wzór totolotka. Należy wybrać 5 liczb z zakresu od 1 do 50, następnie program wylosuje swoje pięć liczb i je porówna i tu zaczyna się problem nie mam pomysłu jak to zrobić. Zamieszczam kod:

#!usr/bin/perl -w

print \"\\UWitaj w programie TOTOLOTEK\\n\";

print \"Prosze podać pięc liczb z zakresu od 1 do 50\\n\";

$_l1=;

$_l2=;

$_l3=;

$_l4=;

$_l5=;

$_podane=\"$_l1,$_l2,$_l3,$_l4,$_l5\";

print \"Wybrane liczby to\\n $_podane\\n\";

$_numerek1=int rand 50;

$_numerek2=int rand 50;

$_numerek3=int rand 50;

$_numerek4=int rand 50;

$_numerek5=int rand 50;

$_wylosowane=\"$_numerek1,$_numerek2,$_numerek3,$_numerek4,$_numerek5\";

print \"Wylosowane numerki to\\n $_wylosowane\\n\";

foreach $_podane (qw($_wylosowane)){

if($_podane ne $_wylosowane){

print \"przykro ale nic nie wygrałes\\n\";

}

elsif($_podane eq $_wylosowane){ #tutaj nie wiem jak porównać

print \"Dwa trafienia wygrałeś 500zł\\n\"

}

elsif($_podane eq $_wylosowane){ #i tu

print \"Trzy trafienia Wygrałeś 1000zł\";

}

else{

print \"Wygrałeś 10000000zł\\n\";

}

}

(Sawyer47) #2

Formatuj kod, bo aktualnie jest ekstremalnie nieczytelny. Trzymaj liczby w tablicy i posortuj wartości, wtedy łatwo będziesz mógł je porównać.


(d4n_) #3

Wrzuciłem ten kod jeszcze raz żeby był czytelniejszy http://wklej.org/id/423390/. Jak porównać tablicę bo jak je chciałem porównać to był błąd podczas kompilacji?


(Sawyer47) #4

Samo kolorowanie poprawia czytelność, ale jeszcze jakbyś używał gdzieniegdzie tabulatorów i spacji...

Wrzuć więc ten kod, który dawał błąd, a wtedy się zobaczy.

Tak jak mówiłem, lepiej trzymać liczby w tablicy(ach) niż w luźnych zmiennych. Jeśli zależy Ci jedynie na liczbie identycznych wartości, możesz zrobić część wspólną dwóch tablic i na podstawie jej rozmiaru stwierdzić ile było trafień. Tak na marginesie w totolotku ma miejsce losowanie bez zwracania, nie uwzględniasz tego.


(d4n_) #5

Mógłbyś podać przykładowy kod jak to zrobić??


(Sawyer47) #6

Najprościej zrobić tak:

wylosowane - tablica unikalnych wylosowanych wartości

wytypowane - tablica unikalnych wytypowanych wartości

Dla każdej wartości z wytypowanych sprawdź czy znajduje się ona w tablicy wylosowane. Jeśli tak, t możesz tę liczbę np. dodać do trzeciej tablicy (o ile potrzebujesz), albo po prostu zwiększasz licznik trafionych wartości.


(floyd) #7

Nie znam Perla dlatego bardziej ogólnie:

o ile wiem to istnieje w Perlu funkcja sprawdzająca czy jakieś wyrażenie należy do danego zbioru.

chyba jest to funkcja:foreach

Jak w przykładzie:http://perlgtk.pl/modules/articles/article.php?id=78

Wprowadzasz nową zmienną np. o nazwie liczb_trafien i sprawdzasz:

Jeżeli $numerek1 należy do $podane to liczba_trafien=liczba_trafien+1

.....

Jeżeli $numerek6 należy do $podane to liczba_trafien=liczba_trafien+1

Mając liczbę trafień można odpowiedzieć na zadane pytanie.

Mając liczbę trafień można odpowiedzieć na zadane pytanie.

Wszystkie operacje robił bym na zbiorach tekstowych i aby uniknąć sytuacji, że liczba 7 będzie znaleziona w liczbie 27, to rozdzieliłbym poszczególne wartości jakimś znacznikiem np. kropką aby było coś takiego".26." i przeszukiwal tablice gdzie też poszczegółne wartości są otoczone znacznikami.

Żeby losowanie było bez zwracania, to też robiłem to swego czasu na zbiorze tekstowym. Tworzyłem zbiór tekstowy złożony z 49 wartości i po wylosowaniu jednego z nich usuwałem go ze zbioru i ponawiałem losowanie z tego zbioru o liczbie elementów mniejszej o jeden czyli tak jak to się dzieje w prawdziwym losowaniu.


(Sawyer47) #8

@floyd

Po co operować na tekście i robić jakieś kombinacje, skoro wystarczy tablica liczb?


(floyd) #9