Card shuffles: Difference between revisions

Added Lua version
(→‎{{header|Tcl}}: added zkl)
(Added Lua version)
Line 326:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[18, 12, 13, 14, 2, 3, 15, 5, 9, 19, 7, 11, 1, 6, 4, 20, 16, 17, 10, 8]</pre>
 
=={{header|Lua}}==
<lang lua>-- Return a table respresenting a standard deck of cards in order
function newDeck ()
local cards, suits = {}, {"C", "D", "H", "S"}
for _, suit in pairs(suits) do
for value = 2, 14 do
if value == 10 then value = "T" end
if value == 11 then value = "J" end
if value == 12 then value = "Q" end
if value == 13 then value = "K" end
if value == 14 then value = "A" end
table.insert(cards, value .. suit)
end
end
return cards
end
 
-- Display all cards (strings) in a given deck (table)
function show (deck)
for _, card in pairs(deck) do io.write(card .. " ") end
print("\n")
end
 
-- Perform a riffle shuffle on deck and return it as a new table
function riffle (deck)
local pile1, pile2, pos = {}, {}, 1
for i, card in ipairs(deck) do
if i < math.ceil(#deck / 2) + 1 then
table.insert(pile1, card)
else
table.insert(pile2, card)
end
end
deck = {}
while pile2[pos] do
table.insert(deck, pile1[pos])
table.insert(deck, pile2[pos])
pos = pos + 1
end
return deck
end
 
-- Perform an overhand shuffle on a deck and return it as a new table
function overhand (deck)
local newDeck, twentyPercent, groupSize, pos = {}, math.floor(#deck / 5)
repeat
repeat
groupSize = math.random(twentyPercent)
until groupSize <= #deck
for pos = #deck - groupSize, #deck do
table.insert(newDeck, deck[pos])
deck[pos] = nil
end
until #deck == 0
return newDeck
end
 
-- Main procedure
math.randomseed(os.time())
local deck1, deck2 = newDeck(), newDeck()
deck1 = riffle(deck1)
print("Sorted deck after one riffle shuffle:")
show(deck1)
deck2 = overhand(deck2)
print("Sorted deck after one overhand shuffle:")
show(deck2)</lang>
{{out}}
<pre>Sorted deck after one riffle shuffle:
2C 2H 3C 3H 4C 4H 5C 5H 6C 6H 7C 7H 8C 8H 9C 9H TC TH JC JH QC QH KC KH AC AH 2D
2S 3D 3S 4D 4S 5D 5S 6D 6S 7D 7S 8D 8S 9D 9S TD TS JD JS QD QS KD KS AD AS
 
Sorted deck after one overhand shuffle:
QS KS AS 3S 4S 5S 6S 7S 8S 9S TS JS JH QH KH AH 2S 4H 5H 6H 7H 8H 9H TH 2H 3H 4D
5D 6D 7D 8D 9D TD JD QD KD AD QC KC AC 2D 3D 4C 5C 6C 7C 8C 9C TC JC 2C 3C
</pre>
 
=={{header|PARI/GP}}==
Anonymous user