Jak wykonać wariacje, permutacje w PHP

Jak wykonać wariacje, permutacje w PHP

wzor-na-wariacje
wzor-na-wariacje

Kiedyś dawno temu pisałem sobie grę na telefon „Symulator gier liczbowych” i postanowiłem podzielić się kilkoma linijkami kodu, którego użyłem przy tworzeniu tej gry.

Co to ta Permutacja?

Chodzi dokładnie o użycie permutacji do obliczeń wystąpień danego przedziału liczb, a dokładniej o wypisanie wszystkich możliwych kombinacji z danego zbioru. Do tego właśnie służy permutacja i nie tylko. Ale może też posłużyć do stworzenia sobie takich małych ciekawych systemów skróconych do gry w totolotka.

Wyznacznikiem wszystkich możliwych kombinacji z danego zbioru liczb jest wzór

Wzór na permutacje:

 Pn = n!

P3 =1*2*3

gdzie n oznacza ilość elementów zbioru. Czyli jeżeli mamy 3 książki w trzech kolorach to możemy je ustawić przez 6 dni w różnych wariantach, ponieważ 3! = 1*2*3=6.

Permutacje książki
Permutacje książki

Ok , to mamy po części wytłumaczone co to jest Permutacja.

Co to zbiór wariacji?

 A teraz troszkę bardziej skomplikowane, żeby użyć system pełny do gry w totolotka trzeba rozszerzyć nasz system permutacji o system kombinacji, zastosujemy tutaj zbiór wariaci bez powtórzeń, gdzie

Wzór na wariacje:

wzór wariacje
wzór wariacje

Co to za niesamowita kombinacja i wariacja zawsze wychodzi liczba całkowita 😊

Zastosowanie w praktyce.

Jak takie obliczenie zastosować w praktyce do gry w lotto albo w innym przypadku np. do obliczenia, ile meczy zagra każda reprezentacja na mundialu, Polska Gola 😊

Zacznę od totolotka czemu podstawiłem we wcześniejszym wzorze takie liczby, odpowiedź jest banalna, ponieważ chcę uzyskać, ile wszystkich kombinacji par liczb będzie, kiedy wybiorę sobie siedem liczb z puli 49 i wypiszę po 6 z nich. Z naszych obliczeń wynika, że tylko 7, czyli muszę wysłać 7 kuponów, żeby osiągnąć swój cel jaki założyłem, a mianowicie, żeby w tych 7 liczbach trafić 6 to na pewno wygram 6 w lotka :).

Czemu to służy.

Tym oto sposobem zwiększam sobie szansę na wygraną, ponieważ zamiast 6 liczb skreślam teoretycznie 7, zobaczcie.

Zbiór = {1, 2, 3, 4, 5, 6, 7}

Teoretycznie wylosowane liczby = {1,2,3,4,5,6}

  1. 123456
  2. 123457
  3. 123467
  4. 123567
  5. 124567
  6. 134567
  7. 234567

Tak przygotowany zestaw przenosimy na kupony i wysyłamy.

Zastosowanie Piłkarskie

Wspomniałem wcześniej o meczach piłkarskich nie wnikajmy w szczegóły odpadania w różnych fazach rozgrywek „Polska Gola” ale załóżmy, że jest 5 drużyn i każdy ma zagrać z każdym tak jest przecież sprawiedliwie i mundial trwałby dłużej, co za widowisko by było, ile piwa by się przelało „ko,ko,ko euro spoko”. Wracając do naszych par to z wcześniejszego wzoru tego na zbiór wariacji wynika, że takich meczy było by 10.

obliczenie wariacji
obliczenie wariacji

Zbiór = {POL, GER, ANG, ITA, BRA}

  1. POL&GER
  2. POL&ANG
  3. POL&ITA
  4. POL&BRA
  5. BRA&ITA
  6. BRA&GER
  7. BRA&ANG
  8. ITA&GER
  9. ITA&ANG
  10. ANG&GER

Dobry kod PHP to podstawa

Dobrze teraz czas na najważniejsze, czyli kod PHP. Na potrzeby tego posta stworzyłem klasę, która jest łatwa i przyjemna do zastosowania w różnych zestawieniach. Można wprowadzać stringi, int, array i co tylko dusza zapragnie, powinna sobie poradzić z tym wszystkim o czym pisałem wcześniej. Do tej klasy stworzyłem powiedzmy klasy pomocnicze jedna abstrakcyjna i Trait. Można powiedzieć, że klasa główna „Permutation” jest jakby menagerem pozostałych klas i odpowiada za wykonanie całości z przerzuceniem wyświetlania widoku do pliku wykonywalnego owej klasy menagera. Pozostała część działa jakby w ukryciu, tak żeby cały sukces przypisać menagerowi „Permutation”, a o reszcie, żeby nie było słychać i widać tak jak to w życiu bywa, śmietankę spija menager. Ciekawym rozwiązaniem według mnie, jest użycie metody abstrakcyjnej w samej klasie „Permutation” dziedziczonej po właśnie klasie abstrakcyjnej. Po analizie zauważyłem, że dzięki temu skróciłem kod o jakieś 4 dodatkowe metody w klasie „Permutation”, które musiały by się pojawić, ażeby klasa była wykonywalna. Oczywiście klasy są już przygotowane tak aby w przyszłości szło dopisać kilka linijek kodu i można symulować grę w Multilotka na 80 liczb. Program sam losuje wygrywające liczby w sposób randomowy więc raczej będzie to dość prawdziwe odzwierciedlenie losowań.

Kiedyś swego czasu napisałem taki podobny program na androida tam jednak to wyglądało zgoła odmiennie, jeżeli cię to zainteresowało to zapraszam do artykułu symulator gier liczbowych u mnie na stronie wystarczy kliknąć 

symulator-gier-liczbowych Smartfon.

Do czego służy symulator

 Cały system ( Program ) posłuży do symulowania gry w lotto, na razie jeden plik wykonywalny pozwalający na symulację gry na 49 liczb, czyli ile wydajemy na kupony, ile wygrywamy, gra systemowa, skrócony, system pełny, gra normalna. Wybieramy odpowiedni system naciskamy button losuj, a liczby automatycznie zostaną wybrane i wklejone w odpowiednie pola, a nam pozostaje tylko nacisnąć buton sprawdź i tyle. Po tej operacji zostaniemy przeniesieni do wszystkich kombinacji jakie zostały stworzone przez system skrócony, który wybraliśmy i ukarze się tabelka wskazująca na wygraną albo i nie. Ponadto będziemy mieli wgląd we wszystkie koszty, które symulowaliśmy w programie, tak jakby były opłacone w prawdziwej grze.

Jakie możliwości daje program

Daję ci możliwość pooglądania co i jak działa w klasach i jakie to ma odzwierciedlenie potem dla usera korzystającego z takiego programu.

Sprawdź wykorzystanie pamięci „memory_get_usage()”

Zastosowałem także nową funkcję dodaną do  PHP 7 wyliczającą ilość kombinacji w celu zaoszczędzenia pamięci, ładnie to wyszło funkcja się sprawdza w praktyce, jeżeli będziesz miał podobny problem to zachęcam do skorzystania z tego dobrodziejstwa w PHP 7 i nowszych PHP 8, a dokładnie z „yield” tu link do opisu funkcji:  

Manual yield PHP

jest to nic innego jak generator, jeżeli programujesz w jakimś wyższym języku np. „Java” to wiesz o czy piszę.

Zrobiłem także do tych kilku powiedzmy klas dokumentację żebyś mógł pooglądać, jak to wygląda ze strony opisowej ( technicznej ), jest to o tyle fajne, że wszystkich  klas jest niewiele i będziesz mógł szybko załapać o co chodzi w takim stanie i porównać do istniejącego kodu. W końcu to na podstawie tego kodu powstała ta dokumentacja.

Dokumentacja Techniczna Symulator Gier Liczbowych

Testy jednostkowe są ważne

Może w przyszłości zrobię testy jednostkowe już tak do ukończenia w całości mojej pracy, ale teraz musisz się zadowolić tym co jest. Starałem się to przełożyć tak, aby było łatwe do przyswojenia i nie wymagało dużego główkowania co i dlaczego tu jest zapisane. Jeżeli będę poprawiał kod lub dopisywał testy jednostkowe, to wszystkie zmiany będą wprowadzone także na gitHubie więc kod z linku poniżej będzie aktualny.

Ułatw sobie pracę programowania, autoload

Jeszcze na sam koniec dodam, że dla ułatwienia pracy napisałem sobie taki prosty autoload.php dla plików klas, jeżeli chcesz z niego korzystać to w pierwszej kolejności uzupełnij konfigurację w samym pliku. Podaj folder gdzie znajduje się twój projekt, do tego ścieżka na pliki klas już w tym folderze, możesz zrobić osobny dla Trait i osobny dla klas. Autoload poradzi sobie nawet, jak dodasz jeszcze swój interfejs, wystarczy, że interfejsy leżą w osobnym folderze i sprawa załatwiona, a jeżeli lubisz mieć wszystko w jednym folderze np. /src to też nic nie stoi na przeszkodzie, ażeby to tak działało. Autoloada jest skonstruowany w sposób statyczny i dołączony dzięki „require_once” do pliku index.php. Reszta wczytywanych plików jest wykonywana automatycznie właśnie dzięki temu plikowi, jeżeli bawiłeś się composerem to wiesz o czym piszę.  

Ustawienia Folderów w Symulatorze
Ustawienia Folderów w Symulatorze

Tak więc przechodzimy do prezentacji samych klas.

Autoload.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php

interface auto{
    static public function wywolaj_autoload();
}

abstract class Autoload implements auto{
    /**
     * Stałym przypisujemy folder
     * ze zbiorem interfejsów "LIBINTERFACE", i trait
     * też osobny "LIBTRAIT" dla Template "LIBTEMPLATE"
     * dla plików klas "LIBCLASS" dla plików projektu
     * "LIBPLIKI" i cały folder dla wszystkich plików
     * "LIBFOLDERPROJECT"
     * nazwy folderów
     */

    const LIBFOLDERPROJECT = "Permut";
    const LIBTEMPLATE = "template";
    const LIBPLIKI = "pliki";
    const LIBCLASS = "src";
    const LIBINTERFACE = "src-interface";
    const LIBTRAIT     = "src-traid";
 
    public function __construct(){  }

    static private function autoload($className)
    {
        try {
            if (!empty($className))
            {
                ## czyścimy ze śmieci ##
              // preg_match('/^[a-zA-ZąęćłńóśźżĄĆĘŁŃÓŚŹŻ0-9\_\-\:\.\,\ \/]+$/', $className, $class_base);

               $class_base = $className;
                /**
                 * Liczymy ilość znaków w nazwie pliku
                 */

                if (strlen($class_base[0]) > 40) {
                    throw new Exception("Blad: Plik jest niewlasciwy: " . $class_base[0] . '<br>');
                }
                              $filess = [];
                $folders = [self::LIBCLASS, self::LIBTRAIT,  self::LIBINTERFACE, self::LIBTEMPLATE, self::LIBPLIKI];
                 foreach ($folders as $folder){   // |*.tpl          
                  $files1 = glob( dirname(__DIR__).'/'.self::LIBFOLDERPROJECT.'/'.$folder.'/*.php');
                            if(!empty($files1)){
                               //array_push($filess, $files1);
                       foreach ($files1 as $file){
                        if($folder == self::LIBCLASS){
                       //  $ff = example('.', $file);
                       //  print_r($ff);
                       //  if(!class_exists('Kombinacje/ClassAbstractRandomNumberList', false)){
                           // throw new Exception("Błąd Klasa Nie Istnieje: " . $file . '<br>');
                       //   }  
                        }
                        if($folder == self::LIBTRAIT){
                      //   if(!trait_exists($file)){
                           // throw new Exception("Błąd Trait Nie Istnieje: " . $file . '<br>');
                       //  }
                        }
                        if($folder == self::LIBINTERFACE){
                       //  if(!interface_exists($file)){
                            // throw new Exception("Błąd Interfejs Nie Istnieje: " . $file . '<br>');
                        //  }
                        }
                            if(file_exists($file)){
                             require_once( $file );
                            }
                      }
                               // $filess[]=$files1;
                    }
                 }
               } else {
                throw new Exception("Klasa nie wczytana:<br>");
            }
        }
        catch (Exception $e){
            self::unregisterAutoload();
            echo ($e->getMessage());
           // ## metoda do obsługi błędów i zapisie logów ##
           
        }
    }

    static private function unregisterAutoload(){
        foreach (spl_autoload_functions() as $class){
            spl_autoload_unregister($class);
        }
    }

    static public function showAutoload(){
        spl_autoload_register(array('Autoload', 'autoload'));
    }
}

Autoload::showAutoload();

Zwrócie także uwagę na przypisanie zmiennej do nazwy metody tak, że można sobie ją wybierać według potrzeb w ->getViewSystemAddIndex(), a dokładniej $ArrayAddSystem może wam się to przydać i ułatwi przyszłą pracę.

ClassPermutation.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
<?php
namespace Kombinacje;
// bez autoload.php
// require_once "src\ClassAbstractRandomNumberList.php";
// require_once "src\TraitSystemSkrocony80.php";
// require_once "src\TraitSystemSkrocony49.php";
/**
 *
 * Symulator Gier Liczbowych
 *
 * Program pozwala na obliczanie kombinacji
 * permutacji dla danego zestawu liczb bez powtórzeń
 * ponadto można wylosować zestaw liczb z danego przedziału np (6 z 49) lub 20 z 80
 * Do tego pobiera zestawy systemów skróconych i pełnych z dwóch Trait 49 i 80 liczb
 * które to wypełnia liczbami podanymi przez usera tworząc systemy skrócone dla
 * odpowiedniego przedziału liczb.
 * Można dzięki temu symulować grę w lotto podając ceny poszczególnych kuponów
 * i ilości gier
 *  
 * @package Permutation
 * @author Adam Berger
 * @license MIT Public License
 * @version 1.0.0
 * @copyright 2015-2021 Adam Berger
 */

class ClassPermutation extends ClassAbstractRandomNumberList {  
    /**
      * @trait TraitSystemSkrocony80 Systemy dla 80 liczb
      */

     use TraitSystemSkrocony80;
     /**
       * @trait TraitSystemSkrocony49 Systemy dla 49 liczb
       */

     use TraitSystemSkrocony49;
        /**
         * @access private
         * @var int $n Zakres liczb wybranych przez usera przekazywanych w klasie
         */

        private $n;
        /**
         * @access private
         * @var int $k Zakres Liczb wybranych przez usera przekazywanych w klasie
         */

        private $k;
        /**
         * @access private
         * @var int $index49 Zmienna pomocnicza do przekazywania indexu wybranego danego systemu z set() do get()
         */

        private $index;
        /**
         * @access private
         * @var int $index Zmienna pomocnicza do przekazywania indexu wybranego danego systemu z set() do get()
         */

  private $Tab=[];
        /**
         * @access private
         * @var int[] $temp Zmienna pomocnicza do wymieniania się danymi pomiędzy tablicami
         */

        private $temp=[];
        /**
         *@access public
         * @var float
         */

        public $cenaKuponu = 2.5;
        /**
         * pozwala na określenie wyboru systemu 80 lub 49
         * w celu przypisania odpowiedniego indexu  
         *
         * @var int
         */

        private $wybierzSystem=80;
       /**
        * @access public
        * @param int $n Zakres liczb wypranych przez usera
        * @param int $k Zakres liczb wypranych przez usera
        * @param int[] $Tab Zakres liczb wypranych przez usera zapisanych w tablicy
        * @throws Exception Jeżeli parametry wejścia do konstruktora
        * nie są mniejsze jak (int 21) wyświetlamy informacje o błędzie
        * ponieważ max ilość liczb w systemie skróconym wynosi 21 liczb
        */

    public function __construct(int $n, int $k, array $Tab) {
        try {
             $tabCount = count($Tab);
            if($n > 21 || $k > 21 ||
         $tabCount > 21 || $tabCount !== $n || $tabCount == 0 ) {
          throw new Exception("Podano za duży zakres w parametrze wejściowym");
        }
                  $this->n   = $n;
      $this->k   = $k;
      $this->Tab = $Tab;    
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
      /**
        * @access public
        *
        * @return int Zwraca Count wszystkich możliwych
        * wystąpień liczb z danego zakresu
        * Szybkie działanie nie tworzy tablicy dla przechowywania liczb
        */

    public function showCombinationCount() : int {
             $licznikLiczby = 1;
             $licznikIleSkreslen = 1;
             $licznikSuma = 1;
            if ($this->n > 0) {
                for ($i = 1; $i < $this->n + 1; $i++) {
                    $licznikLiczby *= $i;
                }
                for ($j = 1; $j < $this->k + 1; $j++) {
                    $licznikIleSkreslen *= $j;
                }
                for ($x = 1; $x < ($this->n - $this->k) + 1; $x++) {
                    $licznikSuma *= $x;
                }
                // Zaokrąglamy bo po wyżej 12 są problemy
                $SumaMnozenia = $licznikIleSkreslen * $licznikSuma;
                $SumaDzielenia = $licznikLiczby / $SumaMnozenia;
                 
                return (int) round($SumaDzielenia);
            } else {
                return 0;
            }
    }
    /**
     *
     * @throws Exception Jeżeli obiekty są niewłaściwe
     * @return iterable Zwraca wszystkie możliwe kombinacje z podanego zakresu
     * Generator iterator memory using ograniczenie zurzycia pamięci
     * w obliczeniach
     */

    private function Combination() : iterable {
        try {
             $tmp = [];
             if (1 > $this->n - $this->k || 2 > $this->k) {
           throw new Exception("Cos poszlo nie tak ( ->Combination() )");
             }
                for ($i = 0; $i < $this->k; $i++) {
                        $this->temp[$i] = $i;
          }
             $ii = 0;    
            while($this->temp[0] < count($this->Tab) - $this->k) {
                for ($j=0; $j < $this->k; $j++) {  
           // #### Jestem na szczycie wiec przeskakuje na nastepna liczbe #####
                    if ($this->temp[$j] >= ($this->n - $this->k) + $j) {
                                $this->temp[$j-1] += 1;
                                $this->temp[$j] = $this->temp[$j-1];  
                   }
                }  
                   if($ii != 0) {
                 $this->temp[$this->k-1] += 1;
                   }
                for ($j=0; $j<$this->k; $j++) {
                    //yield $tmp[$ii][$j] = $this->Tab[$this->temp[$j]];
                     yield $this->Tab[$this->temp[$j]];
                }    
                        $ii++;
            }        
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
    /**
     * @access public
     * @param int $countNamber Ilość losowanych liczb np. (6)
     * @param int $max Jaki zakres losowanych np. (49)
     * @return int[] zwraca z danego zakresu ($countNamber) wylosowanych liczb
     */

    public function showRandomNumberList($countNamber, $max) : array {
     return $this->randomNumberList($countNamber, $max);
    }  
      /**
       *
       * @access public
       * @return object Zwraca obiekt z iteratora $result = $this->Combination();
       */

    public function ShowToArrayCombination() : object {
            $result = $this->Combination();
            if(is_object($result)) {
               return $result;
            }else{
                echo "Brak obiektu ( ->Combination() ) w"
                   . " ( ->ShowToArrayCombination() )";
                return null;  
            }
    }
    /**
     * Dziediczona metoda abstrakcyjna do dodania do poszczególnych metod
     * z 3 różnymi systemami gry
     * @param float $cenaKuponu
     * @param int $wylosowane
     * @return float
     */

    protected function sumIloscKuponowSystemAll(float $cenaKuponu, int $wylosowane): float{
       return ($wylosowane * $cenaKuponu);  
   }
    /**
     *
     * @return int Cena do zapłaty za wszystkie kupony system pełny
     */

    public function getShowSumIloscKuponowSystemPelnyAll(): float{
      return $this->sumIloscKuponowSystemAll($this->cenaKuponu, $this->showCombinationCount());
    }
    /**
     *
     * @return int Cena do zapłaty za wszystkie kupony w systemach
     */
 
    public function getSumIloscKuponowSystemAll(): float{
        //czwarty index zwraca ilość kuponów
          $tab = $this->getViewSystemAddIndex();
         return $this->sumIloscKuponowSystemAll($this->cenaKuponu, $tab[3]);
    }
    /**
     * Przypisuje obiekt z indeksem danego Systemu można wyprać z dwóch
     * albo 80 lub 49 w drugim parametrze
     * @param int $indexSystem
     * @param int $system
     */

    public function setViewSystemAddIndex($indexSystem=0, $system=80) {
           $this->index = $indexSystem;
           $this->wybierzSystem = $system;
    }
     /**
     *
     * @return array Zwraca trzy parametry ($n) + ($k) + (nazwa wybranego systemu)
     * $this->ArrayAddSystem80($this->index49)
     */

    public function getViewSystemAddIndex() : array {  
       
            if(!empty($this->wybierzSystem) && $this->wybierzSystem == 80){
              $ArrayAddSystem = "ArrayAddSystem80";
            }else{
              $ArrayAddSystem = "ArrayAddSystem49";
            }
           $ex = explode("-", $this->$ArrayAddSystem($this->index));
           if(empty($ex)) {
               echo "Tablica jest pusta ( ->ArrayAddSystem80(->index80) )";
               return null;
           }
             return $ex;
    }
     /**
     *
     * @throws Exception Jeżeli tablica jest pusta
     * @return iterable Zwraca Generator iterator z podanego zakresu
     * $ex = $this->getViewSystem80AddIndex();
     */

    public function viewSystemArrayList() : iterable {
        try {
             $ex = $this->getViewSystemAddIndex();    
                     $nn           = $ex[0];
                     $kk           = $ex[1];
                     // Jaki system
                     $systemAdd    = $ex[2];
                     $TabArrayTemp = [];
           if(!empty($systemAdd) && count($this->Tab) == $nn &&
              $kk == $this->k) {
               sort($this->Tab);
    for ($i = 0; $i < count($this->$systemAdd()); $i++) {
        for ($j = 0; $j < $kk; $j++) {
      yield  $TabArrayTemp[$i][$j] = $this->Tab[$this->$systemAdd()[$i][$j]-1];
           }
       }
           }else{
           throw new Exception("Tablica jest pusta"
             . " ( ->getViewSystem80AddIndex() ) w viewSystem80ArrayList()");
           }  
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }      
}

ClassAbstractRandomNumberList.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
namespace Kombinacje;
/**
 *
 * Symulator Gier Liczbowych
 * @abstract ClassAbstractRandomNumberList
 * @author Adam Berger
 * @license MIT Public License
 * @version 1.0.0
 * @copyright 2015-2021 Adam Berger
 */

/**
 * Klasa abstrakcyjna ClassAbstractRandomNumberList jest odpowiedzialna
 * za losowanie liczb z zadanego zakresu
 */

abstract class ClassAbstractRandomNumberList {
    /**
     * @access protected
     * @throws Exception Jeżeli obiekty są niewłaściwe
     * @param int $countNamber Ilość losowanych liczb np. (6)
     * @param int $max Jaki zakres losowanych np. (49)
     * @return int[] zwraca z danego zakresu ($countNamber) wylosowanych liczb
     */

    public function randomNumberList(int $countNamber, int $max):array {
        try {
              $temp = [0];
              $i=0;        
           if($max < $countNamber){
         throw new Exception("Parametr (max) musi być większy od (countNamber)"
                 . " w ->randomNumberList(int countNamber, int max)");    
           }
         do
         {
           $rand = random_int($countNamber, $max);
                if(!in_array($rand, $temp)){
                    $temp[$i] = $rand;
                     ++$i;
                }
         }while(count($temp) <= ($countNamber-1));  
           sort($temp);
         return $temp;    
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
    /**
     * abstract protected Zlicza cene wszystkich kuponów
     * float return wywołanie w danej klasie.
     * Suma do zapłacenia za wszystkie kupony z wybranych liczb i systemu
     * @abstract
     * @param int $cenaKuponu
     * @param int $wylosowane
     */

    abstract protected function sumIloscKuponowSystemAll(float $cenaKuponu, int $wylosowane): float;
   
}

TraitSystemSkrocony49.php  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
<?php
namespace Kombinacje;
/**
 *
 * Symulator Gier Liczbowych
 * @trait TraitSystemSkrocony49
 * @author Adam Berger
 * @license MIT Public License
 * @version 1.0.0
 * @copyright 2015-2021 Adam Berger
 */

/**
 * Trait TraitSystemSkrocony49 odpowiada za Systemy skrócone na 49
 * liczb i ich wybór
 * przez podanie indexu przez usera
 */

trait TraitSystemSkrocony49
{
     #region ListIleLiczbWSystemie
      /**
        *
        * @param int $index User podaje index wyboru danego systemu
        * @throws Exception Jeżeli index jest z poza zakresu
        * @return string Zwracamy $n liczb + $k liczb + nazwe wybranego systemu
        * + ile kuponów
        */

   protected function ArrayAddSystem49($index) : string
        {
            try {  
            $tab = $this->ArrayListSystem49();
           if((count( $tab ) - 1) < $index || 0 > $index ){
      throw new Exception("index poza zakresem w( ->ArrayAddSystem49(index) )");  
           }                        
            $array = [
                0 => "Skrocony496_14_15",
                1 => "Skrocony496_8_5",
                2 => "Skrocony496_9_10",
                3 => "Skrocony496_10_11",
                4 => "Skrocony496_9_14",
                5 => "Skrocony496_18_25",
                6 => "Skrocony496_14_18"
                     ];
          $n = $tab[$array[$index]]["liczba_N"][$index];
          $k = $tab[$array[$index]]["liczba_K"][$index];
          $ileK = $tab[$array[$index]]["ile_KUP"][$index];
            return $n."-".$k."-".$array[$index]."-".$ileK;    
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        }
        #region ListIleLiczbWSystemie
       /**
         *
         * @return int[] zwraca wybrane parametry systemu w tablicy
         */

   private function ArrayListSystem49() : array
        {
            //#### 0 #####
        $array["Skrocony496_14_15"]["liczba_K"][0] = 6;
   $array["Skrocony496_14_15"]["liczba_N"][0] = 14;
        $array["Skrocony496_14_15"]["ile_KUP"][0]  = 15;
          //#### 1 #####
        $array["Skrocony496_8_5"]["liczba_K"][1] = 6;
   $array["Skrocony496_8_5"]["liczba_N"][1] = 8;
        $array["Skrocony496_8_5"]["ile_KUP"][1]  = 5;
        //#### 2 #####
        $array["Skrocony496_9_10"]["liczba_K"][2] = 6;
   $array["Skrocony496_9_10"]["liczba_N"][2] = 9;
        $array["Skrocony496_9_10"]["ile_KUP"][2]  = 10;
        //#### 3 #####
        $array["Skrocony496_10_11"]["liczba_K"][3] =  6;
   $array["Skrocony496_10_11"]["liczba_N"][3] = 10;
        $array["Skrocony496_10_11"]["ile_KUP"][3]  = 11;
        //#### 4 #####
        $array["Skrocony496_9_14"]["liczba_K"][4] =  6;
   $array["Skrocony496_9_14"]["liczba_N"][4] =  9;
        $array["Skrocony496_9_14"]["ile_KUP"][4]  = 14;
        //#### 5 #####
        $array["Skrocony496_18_25"]["liczba_K"][5] =  6;
   $array["Skrocony496_18_25"]["liczba_N"][5] = 18;
        $array["Skrocony496_18_25"]["ile_KUP"][5]  = 25;
        //#### 6 #####
        $array["Skrocony496_14_18"]["liczba_K"][6] = 6;
   $array["Skrocony496_14_18"]["liczba_N"][6] = 14;
        $array["Skrocony496_14_18"]["ile_KUP"][6]  = 18;

                 return $array;
   }
   #endregion

   #region  6 liczb z 14 liczb na 15 zakladów
   // 6 liczb z 14 liczb na 15 zakladów
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_14_15() : array
        {
      $array[0] = [1,2,3,5,6,9];
      $array[1] = [1,2,3,7,8,11];
      $array[2] = [1,2,4,6,8,10];
      $array[3] = [1,2,4,7,9,12];
      $array[4] = [1,2,5,10,13,14];
      $array[5] = [1,3,4,10,12,13];
      $array[6] = [1,3,4,6,7,14];
      $array[7] = [1,3,5,8,12,14];
      $array[8] = [1,4,5,9,11,13];
      $array[9] = [1,5,7,10,11,12];
      $array[10] = [1,6,7,8,9,13];
      $array[11] = [1,6,11,12,13,14];
      $array[12] = [1,8,9,10,11,14];
      $array[13] = [2,3,4,5,6,7];
      $array[14] = [8,9,10,11,12,13];
               
                return $array;

   }

   #endregion
       
        #region  6 liczb z 8 liczb na 5 zakladów
         // 6 liczb z 8 Liczbyna 5 kuponach
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_8_5() : array
        {
      $array[0] = [1,2,3,4,5,6];
      $array[1] = [3,4,5,6,7,8];
      $array[2] = [1,2,3,4,7,8];
      $array[3] = [1,2,5,6,7,8];
      $array[4] = [2,4,5,6,7,8];
                       
                        return $array;
   }
        #endregion
       
   // 6 liczb z 9 liczb na 10 kuponach
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_9_10() : array
        {
      $array[0] = [1,2,3,4,5,6];
      $array[1] = [2,3,5,6,8,9];
      $array[2] = [1,2,3,4,5,9];
      $array[3] = [1,2,3,4,6,8];
      $array[4] = [1,3,4,6,7,9];
      $array[5] = [1,2,3,5,6,7];
      $array[6] = [1,2,3,7,8,9];
      $array[7] = [4,5,6,7,8,9];
      $array[8] = [2,3,4,5,8,9];
               
                 return $array;
   }

   // 6 liczb z 10 liczb na 11 kuponach
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_10_11() : array
        {
      $array[0] = [1,2,3,4,5,6];
      $array[1] = [1,3,4,6,8,9];
      $array[2] = [2,3,4,8,9,10];
      $array[3] = [1,2,3,5,7,10];
      $array[4] = [1,3,4,6,7,10];
      $array[5] = [2,5,6,8,9,10];
      $array[6] = [1,5,6,7,8,9];
      $array[7] = [1,2,7,8,9,10];
      $array[8] = [3,4,5,7,8,9];
      $array[9] = [2,4,5,6,7,10];
      $array[10] = [4,5,6,7,8,9];
               
                 return $array;
   }

   // 6 liczb z 9 liczb na 14 kuponach
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_9_14() : array
        {
      $array[0] = [1,2,3,4,5,6];
      $array[1] = [1,2,4,6,7,9];
      $array[2] = [1,3,5,6,7,8];
      $array[3] = [1,2,3,5,6,7];
      $array[4] = [2,3,4,5,8,9];
      $array[5] = [2,3,4,6,7,8];
      $array[6] = [1,2,5,6,8,9];
      $array[7] = [1,3,4,5,7,9];
      $array[8] = [1,3,4,6,8,9];
      $array[9] = [1,2,6,7,8,9];
      $array[10] = [2,5,6,7,8,9];
      $array[11] = [1,2,3,7,8,9];
      $array[12] = [4,5,6,7,8,9];
      $array[13] = [2,3,5,6,7,9];
               
                 return $array;
   }
     
   // 6 liczb z 18 liczb na 25 kuponach
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_18_25() : array
        {
      $array[0] = [5,8,10,14,16,18];
      $array[1] = [1,2,3,9,10,17];
      $array[2] = [1,4,8,11,13,18];
      $array[3] = [1,6,8,11,12,17];
      $array[4] = [1,7,9,11,14,16];
      $array[5] = [3,4,11,12,14,17];
      $array[6] = [3,6,10,14,15,18];
      $array[7] = [3,8,13,15,16,17];
      $array[8] = [1,2,4,6,13,14];
      $array[9] = [1,2,12,15,16,18];
      $array[10] = [1,3,5,7,13,18];
      $array[11] = [1,4,5,8,10,15];
      $array[12] = [4,5,10,11,13,17];
      $array[13] = [4,9,10,12,15,18];
      $array[14] = [2,3,5,6,12,18];
      $array[15] = [2,3,7,11,13,15];
      $array[16] = [2,4,7,16,17,18];
      $array[17] = [2,5,8,9,12,13];
      $array[18] = [2,7,8,10,11,14];
      $array[19] = [3,4,6,7,8,9];
      $array[20] = [5,6,9,11,15,16];
      $array[21] = [5,7,12,14,15,17];
      $array[22] = [7,8,9,10,11,12];
      $array[23] = [1,2,3,4,5,6];
      $array[24] = [13,14,15,16,17,18];
               
                 return $array;
   }

   // 6 liczb z 14 liczb na 18 kuponach
        /**
         *
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony496_14_18() : array
        {
      $array[0] = [1,2,3,5,6,9];
      $array[1] = [1,2,3,7,8,11];
      $array[2] = [1,2,4,6,8,10];
      $array[3] = [1,2,4,7,9,12];
      $array[4] = [2,3,4,5,6,7];
      $array[5] = [9,10,11,12,13,14];
      $array[6] = [1,2,5,10,13,14];
      $array[7] = [1,3,4,10,12,13];
      $array[8] = [1,3,4,10,12,13];
      $array[9] = [1,6,7,8,9,13];
      $array[10] = [1,6,7,8,9,13];
      $array[11] = [1,6,11,12,13,14];
      $array[12] = [1,8,9,10,11,14];
      $array[13] = [1,3,4,6,7,14];
      $array[14] = [1,3,5,8,12,14];
      $array[15] = [1,4,5,9,11,13];
      $array[16] = [1,5,7,10,11,12];
      $array[17] = [1,2,3,4,5,6];
               
                 return $array;

   }
       
}

TraitSystemSkrocony80.php 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
<?php
namespace Kombinacje;
/**
 *
 * Symulator Gier Liczbowych
 *
 * @trait TraitSystemSkrocony80
 * @author Adam Berger
 * @license MIT Public License
 * @version 1.0.0
 * @copyright 2015-2021 Adam Berger
 */


/**
 * Trait TraitSystemSkrocony80 odpowiada za Systemy skrócone
 * na 80 liczb i ich wybór
 * przez podanie indexu przez usera
 */

trait TraitSystemSkrocony80
{
     #region ListIleLiczbWSystemie
      /**
        *
        * @param int $index User podaje index wyboru danego systemu
        * @throws Exception Jeżeli index jest z poza zakresu
        * @return string Zwracamy $n liczb + $k liczb + nazwe wybranego systemu
        * i ilość kuponów
        */

   protected function ArrayAddSystem80($index) : string {
            try {
                $tab = $this->ArrayListSystem80();          
           if((count( $tab ) - 1) < $index || 0 > $index ) {
           throw new Exception("index poza zakresem w"
                   . " ( ->ArrayAddSystem80(index) )");  
           }              
            $array = [
                0 => "Skrocony10_19_20",
                1 => "Skrocony10_16_6",
                2 => "Skrocony9_19_20",
                3 => "Skrocony9_15_6",
                4 => "Skrocony8_12_25",
                5 => "Skrocony7_18_10",
                6 => "Skrocony6_14_15",
                7 => "Skrocony5_12_43",
                8 => "Skrocony5_16_80",
                9 => "Skrocony5_21_25",
                10 => "Skrocony4_12_30",
                11 => "Skrocony3_7_8",
                12 => "Skrocony3_12_21",
                13 => "Skrocony2_8_13"
                      ];
          $n    = $tab[$array[$index]]["liczba_N"][$index];
          $k    = $tab[$array[$index]]["liczba_K"][$index];  
          $ileK = $tab[$array[$index]]["ile_KUP"][$index];
            return $n."-".$k."-".$array[$index]."-".$ileK;    
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        }
        #region ListIleLiczbWSystemie
       /**
         *
         * @return int[] zwraca wybrane parametry systemu w tablicy
         * takie jak liczba k, liczba n i ilość kuponów
         */

   private function ArrayListSystem80() : array {
            // #### 0 #####
        $array["Skrocony10_19_20"]["liczba_K"][0] =  10 ;
   $array["Skrocony10_19_20"]["liczba_N"][0] =  19 ;
        $array["Skrocony10_19_20"]["ile_KUP"][0]  =  20 ;
            // #### 1 #####  
        $array["Skrocony10_16_6"]["liczba_K"][1] =  10 ;
   $array["Skrocony10_16_6"]["liczba_N"][1] =  16 ;
        $array["Skrocony10_16_6"]["ile_KUP"][1]  =  6 ;
          // #### 2 #####
        $array["Skrocony9_19_20"]["liczba_K"][2] =  9 ;
   $array["Skrocony9_19_20"]["liczba_N"][2] =  19 ;
        $array["Skrocony9_19_20"]["ile_KUP"][2]  =  20 ;
           // #### 3 #####  
        $array["Skrocony9_15_6"]["liczba_K"][3] =  9 ;
   $array["Skrocony9_15_6"]["liczba_N"][3] =  15 ;
        $array["Skrocony9_15_6"]["ile_KUP"][3]  =  6 ;
         // #### 4 #####
        $array["Skrocony8_12_25"]["liczba_K"][4] =  8 ;
   $array["Skrocony8_12_25"]["liczba_N"][4] =  12 ;
        $array["Skrocony8_12_25"]["ile_KUP"][4]  =  25;
         // #### 5 #####
        $array["Skrocony7_18_10"]["liczba_K"][5] =  7 ;
   $array["Skrocony7_18_10"]["liczba_N"][5] =  18;
        $array["Skrocony7_18_10"]["ile_KUP"][5]  =  10;
         // #### 6 #####
        $array["Skrocony6_14_15"]["liczba_K"][6] =  6;
   $array["Skrocony6_14_15"]["liczba_N"][6] =  14;
        $array["Skrocony6_14_15"]["ile_KUP"][6]  =  15;
         // #### 7 #####
        $array["Skrocony5_12_43"]["liczba_K"][7] =  5;
   $array["Skrocony5_12_43"]["liczba_N"][7] =  12;
        $array["Skrocony5_12_43"]["ile_KUP"][7]  = 43;
         // #### 8 #####
        $array["Skrocony5_16_80"]["liczba_K"][8] = 5;
   $array["Skrocony5_16_80"]["liczba_N"][8] = 16;
        $array["Skrocony5_16_80"]["ile_KUP"][8]  = 80;
         // #### 9 #####
        $array["Skrocony5_21_25"]["liczba_K"][9] = 5;
   $array["Skrocony5_21_25"]["liczba_N"][9] = 21;
        $array["Skrocony5_21_25"]["ile_KUP"][9]  = 25;
         // #### 10 #####
        $array["Skrocony4_12_30"]["liczba_K"][10] = 4;
   $array["Skrocony4_12_30"]["liczba_N"][10] = 12;
        $array["Skrocony4_12_30"]["ile_KUP"][10]  = 30;
         // #### 11 #####
        $array["Skrocony3_7_8"]["liczba_K"][11] = 3;
   $array["Skrocony3_7_8"]["liczba_N"][11] = 7;
        $array["Skrocony3_7_8"]["ile_KUP"][11]  = 8;
         // #### 12 #####
        $array["Skrocony3_12_21"]["liczba_K"][12] =  3;
   $array["Skrocony3_12_21"]["liczba_N"][12] = 12;
        $array["Skrocony3_12_21"]["ile_KUP"][12]  = 21;
         // #### 13 #####
        $array["Skrocony2_8_13"]["liczba_K"][13] =  2;
   $array["Skrocony2_8_13"]["liczba_N"][13] =  8;
        $array["Skrocony2_8_13"]["ile_KUP"][13]  = 13;
                 return $array;
   }
   #endregion
       
        #region 10 liczb z 19 liczb na 20 kuponach
        /**
         * 10 liczb z 19 liczb na 20 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony10_19_20() : array {
      $array[0] = [10,11,12,13,14,15,16,17,18,19];
      $array[1] = [5,6,7,8,9,15,16,17,18,19];
      $array[2] = [4,6,7,8,9,11,12,13,14,19];
      $array[3] = [3,4,5,8,9,10,13,14,17,18];
      $array[4] = [2,4,5,7,9,10,11,14,15,16];
      $array[5] = [2,3,6,7,8,10,12,14,15,18];
      $array[6] = [2,3,5,6,7,10,11,13,17,19];
      $array[7] = [2,3,4,5,8,11,12,16,18,19];
      $array[8] = [2,3,4,6,9,12,13,15,16,17];
      $array[9] = [1,4,5,6,8,10,11,12,15,17];
      $array[10] = [1,3,5,7,9,11,12,13,15,18];
      $array[11] = [1,3,5,6,9,10,12,14,16,19];
      $array[12] = [1,3,4,6,7,11,14,16,17,18];
      $array[13] = [1,3,4,7,8,10,13,15,16,19];
      $array[14] = [1,2,5,7,8,12,13,14,16,17];
      $array[15] = [1,2,6,8,9,10,11,13,16,18];
      $array[16] = [1,2,4,7,9,10,12,17,18,19];
      $array[17] = [1,2,4,5,6,13,14,15,18,19];
      $array[18] = [1,2,3,8,9,11,14,15,17,19];
      $array[19] = [1,2,3,4,5,6,7,8,9,10];
                return $array;
   }
   #endregion
   
   #region 10 liczb z 16 liczb na 6 kuponach
        /**
         * 10 liczb z 16 liczb na 6 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private  function Skrocony10_16_6() : array {
      $array[0] = [1,2,3,9,10,11,12,13,14,16];
      $array[1] = [1,3,5,6,7,8,12,14,15,16];
      $array[2] = [1,4,5,6,9,10,11,13,15,16];
      $array[3] = [2,3,4,6,7,8,10,11,15,16];
      $array[4] = [2,4,5,7,8,9,12,13,14,15];
      $array[5] = [3,4,5,6,8,9,10,11,12,14];
             return $array;
   }
   #endregion

   #region 9 liczb z 19 liczb na 20 kuponach
        /**
         * 9 liczb z 19 liczb na 20 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony9_19_20() : array {
      $array[0] = [1,2,3,4,5,6,7,8,9];
      $array[1] = [1,2,3,4,10,11,12,13,14];
      $array[2] = [1,2,3,5,10,15,16,17,18];
      $array[3] = [1,2,6,7,11,12,15,16,19];
      $array[4] = [1,3,6,8,12,13,17,18,19];
      $array[5] = [1,4,5,9,11,13,16,17,19];
      $array[6] = [1,4,8,9,12,14,15,16,18];
      $array[7] = [1,6,7,9,10,13,14,15,17];
      $array[8] = [1,5,7,8,10,11,14,18,19];
      $array[9] = [2,3,7,9,13,14,16,18,19];
      $array[10] = [2,4,6,8,10,14,16,17,19];
      $array[11] = [2,4,7,8,11,13,15,17,18];
      $array[12] = [2,5,8,9,10,12,13,15,19];
      $array[13] = [2,5,6,9,11,12,14,17,18];
      $array[14] = [3,4,6,9,10,11,15,18,19];
      $array[15] = [3,4,5,7,12,14,15,17,19];
      $array[16] = [3,5,6,8,11,13,14,15,16];
      $array[17] = [3,7,8,9,10,11,12,16,17];
      $array[18] = [4,5,6,7,10,12,13,16,18];
      $array[19] = [10,11,12,13,14,15,16,17,18];            
                return $array;
   }
   #endregion

   #region 9 liczb z 15 liczb na 6 kuponach
        /**
         * 9 liczb z 15 liczb na 6 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony9_15_6() : array
        {  
      $array[0] = [1,2,3,9,10,11,12,13,14];
      $array[1] = [1,3,5,6,7,8,12,14,15];
      $array[2] = [1,4,5,6,9,10,11,13,15];
      $array[3] = [2,3,4,6,7,8,10,11,15];
      $array[4] = [2,4,5,7,8,9,12,13,14];
      $array[5] = [3,4,5,6,8,9,10,11,14];
               
                return $array;
   }
   #endregion

   #region 8 liczb z 12 liczb na 23 kuponach
        /**
         * 8 liczb z 12 liczb na 25 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony8_12_25() : array{
      $array[0] = [1,2,4,5,7,8,10,11];
      $array[1] = [1,3,4,6,7,8,10,11];
      $array[2] = [2,3,5,6,7,8,10,11];
      $array[3] = [1,3,4,5,7,9,10,11];
      $array[4] = [1,2,4,6,7,9,10,11];
      $array[5] = [2,3,4,5,8,9,10,11];
      $array[6] = [1,2,5,6,8,9,10,11];
      $array[7] = [1,3,4,5,7,8,10,12];
      $array[8] = [1,2,4,6,7,8,10,12];
      $array[9] = [1,2,4,5,7,9,10,12];
      $array[10] = [1,3,4,6,7,9,10,12];
      $array[11] = [2,3,5,6,7,9,10,12];
      $array[12] = [2,3,4,6,8,9,10,12];
      $array[13] = [1,3,5,6,8,9,10,12];
      $array[14] = [2,3,4,5,7,8,11,12];
      $array[15] = [1,2,5,6,7,8,11,12];
      $array[16] = [2,3,4,6,7,9,11,12];
      $array[17] = [3,4,5,6,8,9,10,12];
      $array[18] = [1,3,5,6,7,9,11,12];
      $array[19] = [1,2,4,5,8,9,11,12];
      $array[20] = [1,3,4,6,8,9,11,12];
      $array[21] = [2,3,5,6,7,8,10,12];
      $array[22] = [2,4,5,7,8,9,11,12];
      $array[23] = [1,2,3,4,5,6,7,8];
      $array[24] = [5,6,7,8,9,10,11,12];
                return $array;
   }
   #endregion

   #region 7 liczb z 18 liczb na 10 kuponach
        /**
         * 7 liczb z 18 liczb na 10 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony7_18_10() : array {
      $array[0] = [1,2,11,13,14,17,18];
      $array[1] = [1,3,6,9,12,15,16];
      $array[2] = [1,4,5,6,9,10,11];
      $array[3] = [1,4,5,7,8,10,14];
      $array[4] = [2,4,6,9,10,17,18];
      $array[5] = [2,4,7,10,15,17,18];
      $array[6] = [3,6,9,12,14,15,16];
      $array[7] = [5,6,7,8,9,11,13];
      $array[8] = [1,2,3,4,5,6,7];
      $array[9] = [8,9,10,11,12,13,14];
                return $array;
   }
   #endregion

   #region  6 liczb z 14 liczb na 15 zakladów
        /**
         * 6 liczb z 14 liczb na 15 zakladów
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony6_14_15() : array {
      $array[0] = [1,2,3,5,6,9];
      $array[1] = [1,2,3,7,8,11];
      $array[2] = [1,2,4,6,8,10];
      $array[3] = [1,2,4,7,9,12];
      $array[4] = [1,2,5,10,13,14];
      $array[5] = [1,3,4,10,12,13];
      $array[6] = [1,3,4,6,7,14];
      $array[7] = [1,3,5,8,12,14];
      $array[8] = [1,4,5,9,11,13];
      $array[9] = [1,5,7,10,11,12];
      $array[10] = [1,6,7,8,9,13];
      $array[11] = [1,6,11,12,13,14];
      $array[12] = [1,8,9,10,11,14];
      $array[13] = [2,3,4,5,6,7];
      $array[14] = [8,9,10,11,12,13];
                return $array;
   }

   #endregion
       #
   #region 5 liczb z 12 liczb na 43 kuponach
        /**
         * 5 liczb z 12 liczb na 43 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony5_12_43() : array {
      $array[0] = [1,2,3,4,5];
      $array[1] = [1,2,4,5,6];
      $array[2] = [1,2,4,7,9];
      $array[3] = [1,2,6,9,12];
      $array[4] = [1,2,7,8,11];
      $array[5] = [1,3,4,6,10];
      $array[6] = [1,2,8,9,10];
      $array[7] = [1,3,4,8,12];
      $array[8] = [1,3,4,9,11];
      $array[9] = [1,3,6,7,8];
      $array[10] = [1,3,7,10,12];
      $array[11] = [1,4,5,8,12];
      $array[12] = [1,4,6,10,11];
      $array[13] = [1,4,8,9,11];
      $array[14] = [1,5,6,7,9];
      $array[15] = [1,5,10,11,12];
      $array[16] = [1,6,8,10,12];
      $array[17] = [2,3,4,7,9];
      $array[18] = [2,3,6,11,12];
      $array[19] = [2,3,8,10,11];
      $array[20] = [2,3,9,10,12];
      $array[21] = [2,4,5,9,11];
      $array[22] = [2,4,6,8,9];
      $array[23] = [2,4,10,11,12];
      $array[24] = [2,5,6,7,10];
      $array[25] = [2,5,7,8,12];
      $array[26] = [3,4,5,7,11];
      $array[27] = [3,5,6,8,11];
      $array[28] = [3,5,8,9,10];
      $array[29] = [4,5,7,8,10];
      $array[30] = [7,8,10,11,12];
      $array[31] = [4,5,9,10,12];
      $array[32] = [4,6,7,11,12];
      $array[33] = [6,7,9,10,11];
      $array[34] = [7,8,9,11,12];
      $array[35] = [1,2,3,4,12];
      $array[36] = [2,3,4,5,6];
      $array[37] = [3,4,5,6,7];
      $array[38] = [4,5,6,7,8];
      $array[39] = [5,6,7,8,9];
      $array[40] = [6,7,8,9,10];
      $array[41] = [7,8,9,10,11];
      $array[42] = [8,9,10,11,12];              
                return $array;
   }
   #endregion

   #region 5 liczb z 16 liczb na 80 kuponach
        /**
         * 5 liczb z 16 liczb na 80 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony5_16_80() : array {
      $array[0] = [1,2,3,4,5];
      $array[1] = [2,3,4,5,6];
      $array[2] = [3,4,5,6,7];
      $array[3] = [4,5,6,7,8];
      $array[4] = [5,6,7,8,9];
      $array[5] = [6,7,8,9,10];
      $array[6] = [7,8,9,10,11];
      $array[7] = [8,9,10,11,12];
      $array[8] = [9,10,11,12,13];
      $array[9] = [10,11,12,13,14];
      $array[10] = [11,12,13,14,15];
      $array[11] = [12,13,14,15,16];
      $array[12] = [1,2,3,15,16];
      $array[13] = [1,2,14,15,16];
      $array[14] = [1,2,3,4,14];
      $array[15] = [1,13,14,15,16];
      $array[16] = [11,12,13,15,16];
      $array[17] = [1,2,3,4,16];
      $array[18] = [5,6,7,8,10];
      $array[19] = [9,10,11,12,16];
      $array[20] = [1,2,9,15,16];
      $array[21] = [1,2,8,15,16];
      $array[22] = [1,2,7,15,16];
      $array[23] = [1,2,6,15,16];
      $array[24] = [1,2,5,15,16];
      $array[25] = [1,2,4,15,16];
      $array[26] = [3,5,9,10,12];
      $array[27] = [3,6,1,13,14];
      $array[28] = [3,4,5,13,14];
      $array[29] = [3,4,6,13,14];
      $array[30] = [3,4,7,13,14];
      $array[31] = [3,4,8,13,14];
      $array[32] = [3,4,9,13,14];
      $array[33] = [3,4,10,13,14];
      $array[34] = [3,4,11,13,14];
      $array[35] = [3,4,12,13,14];
      $array[36] = [1,3,4,13,14];
      $array[37] = [2,3,4,13,14];
      $array[38] = [3,4,13,14,15];
      $array[39] = [3,4,13,14,16];
      $array[40] = [1,5,6,11,12];
      $array[41] = [5,6,10,11,12];
      $array[42] = [5,6,9,11,12];
      $array[43] = [5,6,8,11,12];
      $array[44] = [5,6,7,11,12];
      $array[45] = [2,5,6,11,12];
      $array[46] = [6,7,8,11,12];
      $array[46] = [7,8,9,11,12];
      $array[48] = [7,8,10,11,12];
      $array[49] = [3,4,5,6,8];
      $array[50] = [4,5,6,7,9];
      $array[51] = [5,6,7,8,10];
      $array[52] = [6,7,8,9,11];
      $array[53] = [7,8,9,10,12];
      $array[54] = [8,9,10,11,13];
      $array[55] = [9,10,11,12,14];
      $array[56] = [10,11,12,13,15];
      $array[57] = [11,12,13,14,16];
      $array[58] = [1,3,5,7,9];
      $array[59] = [2,4,6,8,10];
      $array[60] = [3,5,7,9,11];
      $array[61] = [4,6,8,10,12];
      $array[62] = [5,7,9,11,13];
      $array[63] = [7,9,11,13,15];
      $array[64] = [6,8,10,12,14];
      $array[65] = [8,10,12,14,16];
      $array[66] = [2,3,4,14,15];
      $array[67] = [3,4,5,13,14];
      $array[68] = [4,5,6,12,13];
      $array[69] = [6,7,8,11,12];
      $array[70] = [5,6,14,15,16];
      $array[71] = [2,3,13,14,15];
      $array[72] = [3,4,12,13,14];
      $array[73] = [4,5,11,12,13];
      $array[74] = [6,7,10,11,12];
      $array[75] = [6,7,9,10,11];
      $array[76] = [5,6,8,9,10];
      $array[77] = [4,5,7,8,9];
      $array[78] = [3,4,6,7,8];
      $array[79] = [2,3,5,6,7];    
         return $array;
   }
   #endregion

   #region 5 liczb z 21 liczb na 25 kuponach
        /**
         * 5 liczb z 21 liczb na 25 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony5_21_25() : array {
      $array[0] = [1,2,5,15,17];
      $array[1] = [2,3,6,16,18];
      $array[2] = [3,4,7,17,19];
      $array[3] = [4,5,8,18,20];
      $array[4] = [5,6,9,19,21];
      $array[5] = [1,6,7,10,20];
      $array[6] = [1,4,14,16,21];
      $array[7] = [3,13,15,20,21];
      $array[8] = [2,12,14,19,20];
      $array[9] = [1,11,13,18,19];
      $array[10] = [10,12,17,18,21];
      $array[11] = [2,4,9,10,13];
      $array[12] = [3,5,10,11,14];
      $array[13] = [4,6,11,12,15];
      $array[14] = [5,7,12,13,16];
      $array[15] = [6,8,13,14,17];
      $array[16] = [7,9,14,15,18];
      $array[17] = [8,10,15,16,19];
      $array[18] = [9,11,16,17,20];
      $array[19] = [2,7,8,11,21];
      $array[20] = [1,3,8,9,12];
      $array[21] = [1,2,3,4,5];
      $array[22] = [6,7,8,9,10];
      $array[23] = [11,12,13,14,15];
      $array[24] = [16,17,18,19,20];
          return $array;
   }
   #endregion

   #region 4 liczb z 12 liczb na 30 kuponach
        /**
         * 4 liczb z 12 liczb na 30 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony4_12_30() : array {
      $array[0] = [1,2,4,11];
      $array[1] = [1,2,6,8];
      $array[2] = [1,3,4,8];
      $array[3] = [1,3,6,11];
      $array[4] = [1,5,7,12];
    $array[5] = [2,3,7,10];
      $array[6] = [1,7,9,10];
      $array[7] = [1,9,10,12];
      $array[8] = [2,3,6,9];
      $array[9] = [4,5,6,10];
      $array[10] = [2,4,8,9];
      $array[11] = [2,5,7,11];
      $array[12] = [2,7,9,12];
      $array[13] = [2,10,11,12];
      $array[14] = [3,4,9,11];
      $array[15] = [3,5,7,8];
      $array[16] = [4,6,7,12];
      $array[17] = [5,8,11,12];
      $array[18] = [7,8,10,11];
      $array[19] = [6,8,9,11];
      $array[20] = [1,2,4,9];
      $array[21] = [2,3,5,11];
      $array[22] = [3,5,7,9];
      $array[23] = [4,5,6,12];
      $array[24] = [3,5,8,10];
      $array[25] = [3,7,8,11];
      $array[26] = [3,8,10,12];
      $array[27] = [4,5,6,9];
      $array[28] = [1,2,3,4];
      $array[29] = [5,6,7,8];
          return $array;
   }
   #endregion

   #region 3 liczb z 7 liczb na 8 kuponach

         /**
         * 3 liczb z 7 liczb na 8 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony3_7_8() : array {
      $array[0] = [1,2,3];
      $array[1] = [1,4,5];
      $array[2] = [1,6,7];
      $array[3] = [2,4,6];
      $array[4] = [2,5,7];
      $array[5] = [3,4,7];
      $array[6] = [3,5,6];
      $array[7] = [3,4,5];
           return $array;
   }
   #endregion
       
   #region 3 liczb z 12 liczb na 21 kuponach
        /**
         * 3 liczb z 12 liczb na 21 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony3_12_21() : array {      
      $array[0] = [1,6,7];
      $array[1] = [1,6,11];
      $array[2] = [2,8,9];
      $array[3] = [3,4,10];
      $array[4] = [3,5,12];
      $array[5] = [4,5,12];
      $array[6] = [5,10,12];
      $array[7] = [7,11,12];
      $array[8] = [1,2,3];
      $array[9] = [2,3,4];
      $array[10] = [3,4,5];
      $array[11] = [4,5,6];
      $array[12] = [5,6,7];
      $array[13] = [6,7,8];
      $array[14] = [7,8,9];
      $array[15] = [8,9,10];
      $array[16] = [9,10,11];
      $array[17] = [10,11,12];
      $array[18] = [2,3,7];
      $array[19] = [4,8,9];
      $array[20] = [5,8,10];
          return $array;
   }
   #endregion

   #region 2 liczby z 8 na 13 kuponach
        /**
         * 2 liczby z 8 na 13 kuponach
         * @return int[] Zwraca system skrócony o podanych
         * parametrach liczb i ilości kuponów
         */

   private function Skrocony2_8_13() : array {
      $array[0]  = [1,3];
      $array[1]  = [1,4];
      $array[2]  = [2,8];
      $array[3]  = [3,4];
      $array[4]  = [7,8];
      $array[5]  = [3,7];
      $array[6]  = [4,7];
      $array[7]  = [5,6];
      $array[8]  = [1,7];
      $array[9]  = [2,5];
      $array[10] = [2,6];
      $array[11] = [5,8];
      $array[12] = [6,8];
          return $array;
   }
   #endregion
}

Demo Symulator Gier Liczbowych:

Demo Symulator Gier Liczbowych

ikona-github GitHub Kod PHP:

Kod PHP Symulator

ikona-wikipedia Wikipedia Wariacje

Wariacja bez powtórzeń

Add a Comment