--Test
out some card probabilities. Similar to the CentralValues
--scripts.
Here the same ideas are applied to a card game.
--By
C. Eric Cashon
CREATE
TABLE Cards1(
Cards1ID INTEGER,
Type VARCHAR(6));
CREATE
TABLE Cards2(
Cards2ID INTEGER,
Suit VARCHAR(8));
INSERT
INTO Cards1(Cards1ID, Type) VALUES ( 1, 'Ace')
,( 2,
'Two')
,( 3,
'Three')
,( 4,
'Four')
,( 5, 'Five')
,( 6,
'Six')
,( 7,
'Seven')
,( 8,
'Eight')
,( 9,
'Nine')
,(10,
'Ten')
,(11,
'Jack')
,(12,
'Queen')
,(13,
'King');
INSERT
INTO Cards2(Cards2ID, Suit) VALUES (1, 'Diamonds')
,(2,
'Hearts')
,(3,
'Spades')
,(4,
'Clubs');
--Take
a look at all the cards.
CREATE
VIEW FiftyTwoCards AS
SELECT ROWNUMBER() OVER() AS rowid, T1.Type
|| ' of ' || T2.Suit AS Card
FROM Cards1 T1, Cards2 T2;
SELECT
* FROM FiftyTwoCards;
--Check
your row count for pairs of two.
--C
= 52!/(2!(52 - 2)!)
-- = 1326
CREATE
VIEW PossibleCombos(RecordID, Card1, Card2) AS
SELECT ROWNUMBER() OVER() AS RecordID,
T1.Card, T2.Card FROM FiftyTwoCards T1, FiftyTwoCards T2
WHERE T1.rowid < T2.rowid;
SELECT
* FROM PossibleCombos;
--Possible
combinations for 21.
CREATE
VIEW TwentyOne(Card1, Card2) AS
SELECT Card1, Card2 FROM PossibleCombos
WHERE (Card1 LIKE('Ace%') AND (Card2
LIKE('Ten%') OR Card2 LIKE('Jack%') OR Card2 LIKE ('Queen%') OR Card2 LIKE('King%')))
OR (Card2 LIKE('Ace%') AND (Card1 LIKE('Ten%') OR Card1 LIKE('Jack%') OR Card1 LIKE ('Queen%') OR Card1 LIKE('King%')));
SELECT
* FROM TwentyOne;
--Chance
of a Natural 21 in Blackjack. 64/1326 = 4.83%.
WITH
Natural (Total1, Total2) AS
(SELECT COUNT(*) Total1, 0 Total2 FROM
TwentyOne
UNION
SELECT 0 Total1, COUNT(*) Total2 FROM
PossibleCombos)
SELECT
(CAST(SUM(Total1) AS REAL) / CAST(SUM(Total2) AS REAL)) * 100 FROM Natural;
--Clean
Up
DROP
VIEW TwentyOne;
DROP
VIEW FiftyTwoCards;
DROP
VIEW PossibleCombos;
DROP
TABLE Cards1;
DROP TABLE Cards2;