---
title: Deal cards for FreeCell
id: 59694356a6e7011f7f1c5f4e
challengeType: 5
---
## Description
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: Order to deal cards 1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52
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'] ]Task:
Write a function to take a deal number and deal cards in the same order as this algorithm.
The function must return a two dimensional array representing the FreeCell board.
Deals can also be checked against FreeCell solutions to 1000000 games.
(Summon a video solution, and it displays the initial deal.)
## InstructionsdealFreeCell
is a function.
testString: 'assert(typeof dealFreeCell === ''function'', ''dealFreeCell
is a function.'');'
- text: dealFreeCell(seed)
should return an object.
testString: 'assert(typeof dealFreeCell(1) === ''object'', ''dealFreeCell(seed)
should return an object.'');'
- text: dealFreeCell(seed)
should return an array of length 7.
testString: 'assert(dealFreeCell(1).length === 7, ''dealFreeCell(seed)
should return an array of length 7.'');'
- text: 'dealFreeCell(1)
should return an array identical to example "Game #1"'
testString: 'assert.deepEqual(dealFreeCell(1), game1, ''dealFreeCell(1)
should return an array identical to example "Game #1"'');'
- text: 'dealFreeCell(617)
should return an array identical to example "Game #617"'
testString: 'assert.deepEqual(dealFreeCell(617), game617, ''dealFreeCell(617)
should return an array identical to example "Game #617"'');'
```