Deal cards for FreeCell: Difference between revisions
Content added Content deleted
(gathered C# which is in two places.) |
(Added Elixir) |
||
Line 972: | Line 972: | ||
JD 7D 8H 9C 2H QD 4C 5H |
JD 7D 8H 9C 2H QD 4C 5H |
||
KC 8D 2S 3S</pre> |
KC 8D 2S 3S</pre> |
||
=={{header|Elixir}}== |
|||
{{trans|Ruby}} |
|||
<lang elixir>defmodule FreeCell do |
|||
import Bitwise |
|||
@suits ~w( C D H S ) |
|||
@pips ~w( A 2 3 4 5 6 7 8 9 T J Q K ) |
|||
@orig_deck for pip <- @pips, suit <- @suits, do: pip <> suit |
|||
def deal(games) do |
|||
games = if length(games) == 0, do: [Enum.random(1..32000)], else: games |
|||
Enum.each(games, fn seed -> |
|||
IO.puts "Game ##{seed}" |
|||
Enum.reduce(52..2, {seed,@orig_deck}, fn len,{state,deck} -> |
|||
state = ((214013 * state) + 2531011) &&& 0x7fff_ffff |
|||
index = rem(state >>> 16, len) |
|||
last = len - 1 |
|||
{a, b} = {Enum.at(deck, index), Enum.at(deck, last)} |
|||
{state, deck |> List.replace_at(index, b) |> List.replace_at(last, a)} |
|||
end) |
|||
|> elem(1) |
|||
|> Enum.reverse |
|||
|> Enum.chunk(8,8,[]) |
|||
|> Enum.each(fn row -> Enum.join(row, " ") |> IO.puts end) |
|||
IO.puts "" |
|||
end) |
|||
end |
|||
end |
|||
System.argv |> Enum.map(&String.to_integer/1) |
|||
|> FreeCell.deal</lang> |
|||
{{out}} |
|||
<pre> |
|||
C:\Elixir>elixir freecell.exs 1 617 |
|||
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|ERRE}}== |
=={{header|ERRE}}== |