Równomierne rozłożenie danych w tablicy

0

Czy istnieje funkcja sortująca, która pozwoli mi rozłożyć powtarzające się elementy tablicy w sposób równomierny?
Np. w tablicy przechowuję identyfikatory graczy danej rundy.
Id 1: wchodzi do rundy z 60 elementami. (zapisany w tablicy od 1 do 60)
Id 2: wchodzi do rundy z 40 elementami. (zapisany w tablicy od 61 do 100)
Teraz potrzebuję wymieszać tablicę tak aby id1 oraz id2 równo się w niej rozłożyły.
Potem losuję liczbę z przedziału 1-100 i mamy zwycięzcę.

PS. Czy jest do dobre rozwiązanie w przypadku wyboru zwycięzcy na podstawie wkładu tj. % udziału w puli?

0

Tylko po co sobie komplikować życie? O ile założenie, że będziesz miał tylko 2 graczy dla jednego losowania, jest poprawne. Zrób sobie zwykłego mt_rand z max równym sumie wartości. Później od maxa odejmij wartość wkładu pierwszego gracza. I jesli wylosowana liczba jest większa od tej z wyniku odejmowania, to user pierwszy wygrał, w innym wypadku wygrał user drugi. Proste, szybkie i bez kombinowania.

0

Nie ma sensu sortować czegokolwiek, skoro i tak wybierasz potem losowy element :)

0

No niby tak, tylko chodzi o to żeby była możliwość łatwego "sprawdzenia" uczciwości gry.
Tzn. zwycięski numer zostaje wylosowany na początku rundy i wyświetlony.
Potem jakbym już miał posortowaną tablicę tak jak chcę to mógłbym wyświetlić jakiś zakres tej tablicy (+-50 od wylosowanej liczby) tak aby można było przedstawić graczom jak "blisko" wygranej byli.
Przedstawiając graczom sposób sortowania tablicy mogli by sprawdzić, policzyć które bilety należały do nich i do kogo należał zwycięski bilet. (numer podany na początku rundy)
Graczy może być więcej niż 2. W zasadzie dowolna liczba graczy.

Wydaje mi się, że takie rozwiązanie byłoby jasne dla graczy i nie baliby się, że administrator ich oszukuje. Co sądzicie?

(ktoś mógłby sobie policzyć ile biletów potrzebuje na wejście tak aby ten podany na początku numer wypadł na nich, ale to nie będzie problem bo rundy będą szybkie i ni będzie się wchodziło stałą liczbą biletów tylko kartami które będą miały różne wartości, trochę zajmie więc dopasowanie kart z odpowiadającą liczbą biletów)

0

To zamiast bawić się w równomierne rozkładanie po prostu pomieszaj losowo wyniki i potem przedstaw x poprzednich i x kolejnych.

To i tak przecież nie pokazuje czegoś takiego jak blisko byli wygranej, bo przecież gdyby komputer nie wylosował np. 36 to nie oznacza, że największa szansa była na wylosowanie 35 albo 37.

A teraz skojarzyłem - pewnie robisz tysięcznego klona CS Jackpot? Takich skryptów za free było parę - podpatrz sobie jak oni to robią ;)

0
dzek69 napisał(a):

To i tak przecież nie pokazuje czegoś takiego jak blisko byli wygranej, bo przecież gdyby komputer nie wylosował np. 36 to nie oznacza, że największa szansa była na wylosowanie 35 albo 37.

Tak, ja to wiem, ale gracze (często dzieci) nie. A tu chodzi o to, żeby symulować fair play.
Jeśli ułożę elementy po kolei (tzn. gracz1 - 50 biletów od początku tablicy, 50-ciu graczy po 1 bilecie do końca tablicy) i wylosuję np liczbę 70 to gracz 1 który miał najwięcej % nawet nie zobaczy się na liście co nie będzie wyglądało naturalnie.

dzek69 napisał(a):

To zamiast bawić się w równomierne rozkładanie po prostu pomieszaj losowo wyniki i potem przedstaw x poprzednich i x kolejnych.

Losowe pomieszanie nie wpłynie pozytywnie na poczucie sprawiedliwości (bo "mogli tak posortować listę, żeby ustawić danego zwycięzcę")

dzek69 napisał(a):

A teraz skojarzyłem - pewnie robisz tysięcznego klona CS Jackpot? Takich skryptów za free było parę - podpatrz sobie jak oni to robią ;)

Zasada działania ma być niemal identyczna, z tym że grac będzie się kartami Steam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1