How to resolve the algorithm Deal cards for FreeCell step by step in the J programming language
How to resolve the algorithm Deal cards for FreeCell step by step in the J programming language
Table of Contents
Problem Statement
Free Cell is the solitaire card game that Paul Alfille introduced to the PLATO system in 1978. Jim Horne, at Microsoft, changed the name to FreeCell and reimplemented the game for DOS, then Windows. This version introduced 32000 numbered deals. (The FreeCell FAQ tells this history.) As the game became popular, Jim Horne disclosed the algorithm, and other implementations of FreeCell began to reproduce the Microsoft deals. These deals are numbered from 1 to 32000. Newer versions from Microsoft have 1 million deals, numbered from 1 to 1000000; some implementations allow numbers outside that range. The algorithm uses this linear congruential generator from Microsoft C:
The algorithm follows: Deals can also be checked against FreeCell solutions to 1000000 games. (Summon a video solution, and it displays the initial deal.) Write a program to take a deal number and deal cards in the same order as this algorithm. The program may display the cards with ASCII, with Unicode, by drawing graphics, or any other way. Related tasks:
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Deal cards for FreeCell step by step in the J programming language
Source code in the j programming language
deck=: ,/ 'A23456789TJQK' ,"0/ 7 u: '♣♦♥♠'
srnd=: 3 :'SEED=:{.y,11982'
srnd ''
seed=: do bind 'SEED'
rnd=: (2^16) <.@%~ (2^31) srnd@| 2531011 + 214013 * seed
pairs=: <@<@~.@(<: , (| rnd))@>:@i.@-@# NB. indices to swap, for shuffle
swaps=: [: > C.&.>/@|.@; NB. implement the specified shuffle
deal=: |.@(swaps pairs) bind deck
show=: (,"2)@:(_8 ]\ ' '&,.)
show deal srnd 1
J♦ 2♦ 9♥ J♣ 5♦ 7♥ 7♣ 5♥
K♦ K♣ 9♠ 5♠ A♦ Q♣ K♥ 3♥
2♠ K♠ 9♦ Q♦ J♠ A♠ A♥ 3♣
4♣ 5♣ T♠ Q♥ 4♥ A♣ 4♦ 7♠
3♠ T♦ 4♠ T♥ 8♥ 2♣ J♥ 7♦
6♦ 8♠ 8♦ Q♠ 6♣ 3♦ 8♣ T♣
6♠ 9♣ 2♥ 6♥
show deal srnd 617
7♦ A♦ 5♣ 3♠ 5♠ 8♣ 2♦ A♥
T♦ 7♠ Q♦ A♣ 6♦ 8♥ A♠ K♥
T♥ Q♣ 3♥ 9♦ 6♠ 8♦ 3♦ T♣
K♦ 5♥ 9♠ 3♣ 8♠ 7♥ 4♦ J♠
4♣ Q♠ 9♣ 9♥ 7♣ 6♥ 2♣ 2♠
4♠ T♠ 2♥ 5♦ J♣ 6♣ J♥ Q♥
J♦ K♠ K♣ 4♥
You may also check:How to resolve the algorithm Greatest subsequential sum step by step in the C# programming language
You may also check:How to resolve the algorithm Reflection/Get source step by step in the J programming language
You may also check:How to resolve the algorithm Random Latin squares step by step in the 11l programming language
You may also check:How to resolve the algorithm Synchronous concurrency step by step in the EchoLisp programming language
You may also check:How to resolve the algorithm Almost prime step by step in the C++ programming language