Minulla on koodi joka laskee x summan siten että se kertoo pelaajien määrän 200. Tämä on pokeri turnaukseni prizepool. Eli esim.
Pelaajien määrä: 200
200 * 200 = 40 000.
Tässä tapauksessa palkintohaarukka (prizepool) on 40k. Pelaajia jotka voittavat jotain on 10% eli äskeisestä esimerkistä 20. Minun pitäisi jakaa palkintohaarukka näiden kesken siten että kahdeskymmenes saa vähemmän kuin yhdeksästoista ja niin edelleen. Haluaisin keksiä tähän jonkun kaavan koska pelaajia on x määrä jolloin myös palkinohaarukka on x * 200.
No yksinkertaisin kaavahan lienee se, että otat perusyksiköksi pienimmän maksettavan palkintosumman ja jaat jokaiselle paremmin sijoittuneelle aina yhden yksikön enemmän. Jos 20 parasta palkitaan, niin 20. saa yhden yksikön verran rahaa, 19. kaksi yksikköä, 18. kolme yksikköä ja lopulta paras saa 20 yksikköä. (Yhteensä yksiköitä on (20 + 1) * 10 = 210.)
Kaavaa on myös todella helppoa viilata. Jos haluat antaa vaikkapa kolmelle parhaalle suhteellisesti enemmän rahaa -> kasvatat vain "yksiköiden" yhteismäärää ja saat siitä suoraan uudet maksettavat summat kaikille palkittaville.
Esimerkiksi: kolmanneksi paras saa 3 lisäyksikköä, toiseksi paras 5 lisäyksikköä ja paras 10 lisäyksikköä -> palkintopotti tulee jakaa yhteensä 210 + 3 + 5 + 10 = 228 osaan.
Itse laittaisin prosenttiosuudet potista taulukkoon ja koodissa hakisin vain oikean kertoimen taulukosta.
Esimerkki PL/I:llä:
Oletetaan, että turnauksessa maksimi pelaajamäärä on 200 ja pienin on 10.
Joltain nettipokerisivustolta voi käydä kopioimassa sopivat arvot taulukkoon:
dcl percentage(12, 10:200) fixed dec(9,2) init( (21)50.00, (20)40.00, (50)30.00, (100)27.50, (21)30.00, (20)24.00, (50)20.00, (100)17.50, (21)20.00, (20)16.00, (50)12.00, (100)11.50, (21)00.00, (20)12.00, (50)09.25, (100)08.50, (21)00.00, (20)08.00, (50)07.50, (100)07.25, (21)00.00, (20)00.00, (50)06.25, (100)05.75, (21)00.00, (20)00.00, (50)05.25, (100)04.50, (21)00.00, (20)00.00, (50)04.25, (100)03.00, (21)00.00, (20)00.00, (50)03.25, (100)02.00, (21)00.00, (20)00.00, (50)02.25, (100)01.50, (21)00.00, (20)00.00, (50)00.00, (100)01.20, (21)00.00, (20)00.00, (50)00.00, (100)01.00 ); dcl lookup(20,10:200) fixed dec(9,2) def percentage((1sub < 11)*1sub+(1sub >= 11 & 1sub <= 15)*11+(1sub >= 16 & 1sub <= 20)*12, 2sub);
Taulukon ensimmäinen indeksi on pelaajan sijoitus ja toinen indeksi on pelaajien määrä turnauksessa. Nyt lookup - taulukosta voi helposti hakea pelaajan prosenttiosuuden potista.
Tekisin Pythonilla jotenkin näin. Testata voi täällä
def laske_voitot(potti, voittajien_lkm): # luodaan lista jonka pituus on voittajien_lkm # elementin N arvo on voittajien_lkm / (N + 1) kertoimet = [voittajien_lkm / i for i in range(1, voittajien_lkm + 1)] # skaalataan edellä lasketut luvut niin että lukujen summaksi tulee 1 kertoimet = [1 / sum(kertoimet) * kerroin for kerroin in kertoimet] # palautetaan lista jonka ensimmäinen elementti on voittajan rahat, toinen on toiseksi tulleen rahat jne. return [kerroin * potti for kerroin in kertoimet]
Aihe on jo aika vanha, joten et voi enää vastata siihen.