Gå till innehåll

PROGRAMMERING: Hur blanda en kortlek?


Recommended Posts

Postad
...text...

 

ja det har jag också tänkt på :)

 

Men jag kom fram till att det spelar ingen roll. Du initierar slumpfunktionen med ett tal, tex tiden.

Sen utgår man ifrån denna initiering hela tiden, om man initierade om slumpfunktionen varje gång skulle det inte vara slump längre.

 

Sen tror jag inte det är någon större säkerhetsrisk att kortleken är färdigslumpad. Kortinformationen skickas ju knappast ut till klienterna förren den ska visas. Så för att komma åt den måste du in på servern och rota efter den vilket inte lär vara det lättaste om det är vettigt designat.

Postad

Kan också vara så att man plockar bort dom korten som är delade och slumpar mellan dom som är kvar vid varje gata.

 

Har inte läst på Pradise länken, men det kanske står där?

 

- QoS

Postad

Man kan väl börja med att konstatera några saker:

 

Slumpgenererade tal i programmeringssammanhang är inte alls slumpmässiga tal i egentlig mening. Slumpgeneratorn är snarare en avancerad formel som kastar ur sig till synes slumpmässiga tal som ter sig komma utan något inbördes beroende eller skönjbart system. Det som egentligen styr slumpmässigheten i utfallet från slumpgeneratorn är det frö (utgångsvärde) som ges. Samma frö ger alltid samma följdvärden.

Det är granulariteten (bitnogrannheten) på fröet och sättet det ändras på som egentligen ger det slumpmässiga utfallet.

Den inbyggda slumpgeneratorfunktionen i windows hanterar enbart ett frö med ett fåtal bitar vilket ger att endast en liten bråkdel av alla möjliga konstellationer av sättet en kortlek kan blandas på representeras. Detta har gjort att många siter har antingen utvecklat en egen slumpgenerator eller köpt in en 3:e parts dito.

Många siter använder också en del av klientprogramvaran för att hämta upp slumpmässig information, såsom musrörelser, interna klockor etc, vilka sedan används för att generera nya fröer. Med andra ord är tiden. som en linjär funktion sett, inte allenarådande i påverkan av utfallet och att försöka "tima" flushen kan således inte fungera.

Inte för att jag är något proffs just i den här frågan, men jag skulle ändå bedöma att slumpmässigheten på de siter jag har läst om är ganska så fullgod.

 

/M

Postad
...text...

Tycker hela kortleken ska blandas vid ett tillfälle och läggas i en vektor innan korten delas ut. Detta för att göra nätpokerns tillvägagångssätt så likt livepokerns som möjligt. Tänk er själv hur det skulle se ut om man sitter på ett kasino och dealern blandar om kortleken efter floppen.

Postad

Det är egentligen egalt hur eller på vilket sätt korten ges från kortleken och hur leken blandas mellan nya kort. Att man inte blandar mellan giv och flopp på casinon är ju för att traditionen inte påbjuder det men också för att det givetvis skulle initiera heta debatter t.ex när spelare inte får de kort de drar efter eller dylika scenarion. Ur spelsynpunkt är det dock helt oväsentligt. Man kan väl helt enkelt säga som så att allt som bidrar till att nästföljande kort är så slumpmässigt som möjligt är positivt. Strävan efter statistisk utjämning av fördelningen av kort är det all solid procentuell poker handlar om. Faktum är att spelarna skulle kunna tjäna på att dealern blandar kortleken konstant tills dess att han ger ut kort. Det finns indikationer på att normala dealerblandningar (dock individuellt) inte är statistiskt fördelaktiga, vilket har föranlett att man i vissa sammanhang börjat använda avancerade blandningsmaskiner (e.g ShuffleMaster på Poker Superstars Invitational) för att slippa diskussioner om detta.

 

/M

  • 3 months later...
  • 2 weeks later...
Postad
Varför blanda kortleken? :)

 

Borde väl gå bra att bara slumpa ut vilket kort som delas ut? (Och kolla då så att det inte redan är utdelat förstås)

 

Funderar själv på vad jag ska göra för något... riktigt sugen på att fräscha upp mina programmeringsskills samtidigt som det vore kul att göra något program som kan beräkna sannolikheter eller nåt sånt (sen är det nog väldigt nyttigt att bara göra programmet, får man nog rätt bra insikt i sannolikheter och sånt)

 

Det tar tid när många kort delats ut. Om du bara har två kort kvar som inte har delats ut, kan man ju slumpa i evigheter inann ett av de två kommer.

 

Har själv nyligen skrivit en procedur för att blanda kort. Och jag gjorde som så att jag har en vektor med en kortlek oblandad, och sen slumpar jag mella 1 och så många som finns kvar i den oblandade kortleken. Sedan flyttar jag upp alla korten i vektorn. De korten som kommer ur den oblandade lägger jag in sist i den blandade kotleken.

 

Har testat koden 100-tals gånger och det funkar superbra, och är snabbt. Själv använder jag visual basic, och kan bara lägga in att innan jag stoppade in "Randomize" i koden så upptäkte jag att korten ofta kom på samma plats två blandningar i följd, eller nästan på samma plats i den blandade kortleken. Efter att jag inledde blandningen med Randomize, så blev det verkligen slumpmässigt.. :-)

Postad
Den inbyggda slumpgeneratorfunktionen i windows hanterar enbart ett frö med ett fåtal bitar vilket ger att endast en liten bråkdel av alla möjliga konstellationer av sättet en kortlek kan blandas på representeras.

 

Förutom den här detaljen, som var mycket intressant, spelar det väl ingen roll om man faktiskt blandar en lek eller helt enkelt initierar en vektor, som QoS föreslog? Eller t o m om man har en vektor med korten i "nummerordning", som en nyöppnad lek, och slumpar vid given istället?

 

Kommentera gärna det, någon, för jag håller på och kodar en givgenerator och vill gärna att den ska vara slumpmässig.

 

Kan man använda sig av systemklockan som frö till slumpgeneratorn?

Postad

När jag funderat lite på saken har jag tänkt mig en vektor med 52 kort-objekt eller liknande. Man slumpar sedan ett index (dvs. "drar ett kort") och utför något med det, tar sista objektet i vektorn och flyttar det till det nyss dragna kortets position. Vektorn är nu 51 objekt lång.

 

Om man bara har en tillräckligt bra seed borde väl detta funka fint? Själva vektorn är ju inte blandad, men det är, för att citera ett tidigare inlägg, egalt.

 

Här är förresten lite intressant läsning från PokerChamps.com:

 

Q: How do you guarantee random cards?

The PokerChamps RNG (Random Number Generator) is a TRNG (True Random Number Generator). It uses the hardware device J1000KU for getting random numbers. It does not use a software algorithm (PRNG).

 

The hardware generator, the QNG Model J1000KU derives most of its entropy from shot noise. Hence its entropy source is almost entirely quantum and therefore extremely nondeterministic ie. completely true random. The J1000KU's output has been tested extensively by the most stringent tests available and it has not failed any test for randomness in tests utilizing up to 500 billion bits. The J1000KU unit has passed Dr. George Marsaglia's battery of 'Die Hard' tests.

Postad

Att diskutera komplexitet när det gäller att blanda en kortlek är inte så meningsfullt. Det gäller mest när man snackar om större (eller okända) datamängder. När det gäller motsatsen, dvs sortering, så har de algoritmer som funkar bäst (tar kortast tid) för små datamängder inte alls lägst komplexitet. Dessutom är det ju alltid 52 kort, så på sätt och vis kan man säga att ALLA blandningsalgoritmer har O(1).

 

Här kommer en one-liner för att generera en kortlek och blanda den (i python, givetvis, vad annars? ;)):

print[globals().setdefault('d',['%s%s'%(a,b)for a,b in zip('23456789TJDKA'*4,'shdc'*13)]).
pop(ord(file('/dev/urandom').read(1))*len(globals()['d'])/256)for i in range(52)]

 

En rad :) Funkar dock ej i windows. Relativt hög slumpmässighet, då den är delvis hårdvarubaserad. Går att få ännu högre genom att byta ut "/dev/urandom" till "/dev/random"*. Då tar den 4 minuter att köra på min burk (jämfört med c:a 1ms annars), så det kanske är lite overkill.

 

I verkligheten skriver man naturligtvis inte kod på det här sättet. Till exempel så genererar koden ovan 52 sorterade kortlekar, men blandar bara den första.

 

/redrik

 

* Apple har dock fuskat lite när de gjorde OSX, så där är det ingen skillnad.

 

* Trycker in en ny rad i koden :) - QoS *

  • 1 year later...
Postad

Helt oväsentligt i sammanhanget men verkar vara i denna tråden jag kan få svar...

 

Hur många kombinationer av unika blandningar finns det med en kortlek a 52 kort?

 

EDIT: Hittar något om "52!" Vad menas med det? Någon annanstans "2^226"?

Postad
Helt oväsentligt i sammanhanget men verkar vara i denna tråden jag kan få svar...

 

Hur många kombinationer av unika blandningar finns det med en kortlek a 52 kort?

 

EDIT: Hittar något om "52!" Vad menas med det? Någon annanstans "2^226"?

 

52! = 1 * 2 * 3 ... * 51 * 52

 

Första kortet kan vara vilket som helst av de 52, andra kan väljas bland de kvarvarande 51, etc

Postad

Hej!

 

 

Om jag minns rätt skall man blanda en kortlek 7 ggr med kuperingar emellan (jag vet inte exakt vad dessa kuperingar kallas, men det är inte att man bara delar kortleken mitt itu, utan man flyttar korten fran botten till toppen kanske med 10 kort åt gången).

 

 

GP

Postad
...text...

Tycker hela kortleken ska blandas vid ett tillfälle och läggas i en vektor innan korten delas ut. Detta för att göra nätpokerns tillvägagångssätt så likt livepokerns som möjligt. Tänk er själv hur det skulle se ut om man sitter på ett kasino och dealern blandar om kortleken efter floppen.

 

Vad är det för fel med det? Skulle inte påverka utgången, däremot mindre risk för fusk.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Endast 75 max uttryckssymboler är tillåtna.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Ditt tidigare innehåll har återställts.   Rensa redigerare

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...