Kortspelet Black Jack går ut på att komma så nära talet 21 som möjligt utan att bli ”tjock”, det vill säga få över 21. Man måste dessutom ha bättre kort än dealern. Alla större kasinon lagrar alla kort för senare analyser. I årets tävlingsuppgift redovisas bara givarens kort. I tabellen dbo.CardHistory finns alla kort för cirka 2500 blandningar om vardera 8 kortlekar. CardID börjar med 1 och har inga missade värden.
CardID | Rank | Suit | Status |
1 | 6 | S | |
2 | 8 | C | |
3 | 5 | S | S |
4 | 7 | H | |
5 | 12 | H | S |
6 | 11 | C | |
7 | 2 | D | |
8 | 11 | D | L |
9 | 11 | H | |
10 | 6 | H | |
11 | 8 | S | L |
Reglerna är enkla. Ess räknas som antingen 1 eller 11. Knektar, damer och kungar räknas som 10. Övriga kort räknas som vanligt.
Givaren måste stanna/hålla när poängsumman visar 17, 18, 19 eller 20. Om det finns flera möjliga poängsummor (på grund av ess) så måste givaren stanna om någon av poängsummorna hamnar i intervallet 17-20 (eller 21 eftersom det då blir vinst). I given är det åtta hela kortlekar som används för att dels slippa blanda lekarna så ofta och dels för att försvåra korträkning för spelarna.
Rank
- 1 – Ess (värt 1 eller 11)
- 2 – Tvåa (Värt 2)
- 3 – Trea (Värt 3)
- 4 – Fyra (Värt 4)
- 5 – Femma (Värt 5)
- 6 – Sexa (Värt 6)
- 7 – Sjua (Värt 7)
- 8 – Åtta (Värt 8)
- 9 – Nio (Värt 9)
- 10 – Tio (Värt 10)
- 11 – Knekt (Värt 10)
- 12 – Dam (Värt 10)
- 13 – Kung (Värt 10)
Suit
- H – Heart (Hjärter)
- S – Spades (Spader)
- D – Diamond (Ruter)
- C – Club (Klöver)
Status
Uppgiften går ut på att uppdatera kolumnen Status med följande koder:
- S – Stand (Stanna/håll)
- L – Loss (Tjock)
- W – Vinst (kortsumma 21)
- B – Blackjack (kortsumma 21 på två kort).
Exempel på Stand
Rank | Suit | Status | Kommentar |
1 | D | Givaren får ruter ess, för en poängsumma på 1 eller 11 | |
4 | C | Givaren får klöver fyra, för en poängsumma på 5 eller 15 | |
1 | H | Givaren får hjärter ess, för en poängsumma på 6, 16 eller 26. Alternativet 26 avfärdas. | |
3 | C | S | Givaren får klöver tre, för en poängsumma på 9 eller 19 och måste stanna. Detta eftersom 19 innebär obligatoriskt stopp. |
Exempel på Loss
Rank | Suit | Status | Kommentar |
11 | H | Givaren får hjärter knekt, för en poängsumma på 10 | |
6 | H | Givaren får hjärter sex, för en poängsumma på 16 | |
8 | S | L | Givaren får spader åtta, för en poängsumma på 24 och blir tjock |
Exempel på Win
Rank | Suit | Status | Kommentar |
2 | H | Givaren får hjärter två, för en poängsumma på 2 | |
9 | S | Givaren får spader nio, för en poängsumma på 11 | |
11 | S | W | Givaren får spader knekt, för en poängsumma på 21 och vinner på tre kort |
Exempel på Black Jack
Rank | Suit | Status | Kommentar |
13 | C | Givaren får klöver kung, för en poängsumma på 10 | |
1 | S | B | Givaren får spader ess, för en poängsumma på 21 och vinner på två kort |
Uppgift
Klicka här för att ladda ned SQL-script så att du kan komma igång med tävlingen.
Du skall skriva en lösning för att beräkna alla utgångar enligt tabellen och i den ordning som CardID visar. Tabellen dbo.CardHistory ska uppdateras enligt beräkningsgrunderna ovan. Dessutom ska tabellen dbo.DealerStatus uppdateras med resultatet av din kod:
Status | Deals |
B | 16033 |
L | 97229 |
S | 204668 |
W | 24757 |
Tänk på att dbo.DealerStatus kan innehålla andra statuskoder än de som du ska använda.
Collation
Collation på databasen är Finnish_Swedish_100_BIN2. Collation på servern är Finnish_Swedish_CI_AS.
Tabell: dbo.CardHistory
CardID | Int, identity(1,1) klustrad primärnyckel |
Rank | Tinyint not null |
Suit | Char(1) not null |
Status | Char(1) not null |
Tabell: dbo.DealerStatus
Status | Char(1), klustrad primärnyckel |
Deals | Int not null |
Problemkonstruktör
Årets tävlingsuppgift är konstruerad av Peter Larsson.
Utvärdering
Vinnare är det tävlingsbidrag som ger rätt resultat och är snabbast, d v s har lägst exekveringstid (”duration”). Högsta tillåtna antal tävlingsbidrag per deltagare är tre. Tävlingsbidragen testkörs på SQL Server 2016 med senaste officiella CTP på en dator med SSD-disk, 4-kärnig CPU, hyperthreading och 16 GB RAM (varav 12 GB är maxgränsen för SQL Server). Databasen är förberedd för att köra med memory optimized tables, samt tillåter delayed durability.
Tävlingsbidrag består av två delar:
- Setup-script. I setup-scriptet är det tillåtet att skapa tabeller, index, vyer, funktioner och procedurer. Det är inte tillåtet att göra några som helst förändringar i befintliga tabellerna eller skapa en indexerad vy mot dem. Det är heller inte tillåtet att läsa från befintliga tabeller i setup-scriptet.
- Lösnings-script. I lösnings-scriptet skall tabellerna uppdateras.
Exekveringstiden mäts endast på Lösnings-scriptet. Setup-scriptet mäts ej.
Obs att mängden testdata kan ökas för att göra tävlingen utslagsgivande.