Deal cards for FreeCell: Difference between revisions

Content added Content deleted
(Added Elixir)
(→‎{{header|Logo}}: Add implementation.)
Line 1,662: Line 1,662:
}
}
</lang>
</lang>

=={{header|Logo}}==
<lang logo>; Linear congruential random number generator
make "_lcg_state 0

to seed_lcg :seed
make "_lcg_state :seed
end

to sample_lcg
local "rand
make "_lcg_state modulo sum product 214013 :_lcg_state 2531011 2147483648
make "rand int quotient :_lcg_state 65536
output :rand
end

; FreeCell
to card_from_number :number
output word item sum 1 int quotient :number 4 "A23456789TJQK item sum 1 modulo :number 4 "CDHS
end

to generate_deal :number
(local "deck "size "index "deal)
seed_lcg :number
make "deck []
repeat 52 [
make "deck lput difference # 1 :deck
]
make "deck listtoarray :deck
make "deal []
repeat 52 [
make "size difference 53 #
make "index sum 1 modulo sample_lcg :size
make "deal lput item :index :deck :deal
setitem :index :deck item :size :deck
]
output :deal
end

to print_deal :number
(local "deal "i "j "index)
make "deal generate_deal :number
repeat 7 [
make "i difference # 1
repeat (ifelse [equal? :i 6] 4 8) [
make "j difference # 1
make "index (sum 1 product :i 8 :j)
type (word (card_from_number item :index :deal) "| |)
]
print "||
]
end

print [Game #1]
print_deal 1
print "||
print [Game #617]
print_deal 617
print "||
bye</lang>
{{Out}}
<pre>Game #1
JD 2D 9H JC 5D 7H 7C 5H
KD KC 9S 5S AD QC KH 3H
2S KS 9D QD JS AS AH 3C
4C 5C TS QH 4H AC 4D 7S
3S TD 4S TH 8H 2C JH 7D
6D 8S 8D QS 6C 3D 8C TC
6S 9C 2H 6H

Game #617
7D AD 5C 3S 5S 8C 2D AH
TD 7S QD AC 6D 8H AS KH
TH QC 3H 9D 6S 8D 3D TC
KD 5H 9S 3C 8S 7H 4D JS
4C QS 9C 9H 7C 6H 2C 2S
4S TS 2H 5D JC 6C JH QH
JD KS KC 4H</pre>


=={{header|Lua}}==
=={{header|Lua}}==