freeCodeCamp/curriculum/challenges/chinese/08-coding-interview-prep/rosetta-code/deal-cards-for-freecell.chi...

5.9 KiB
Raw Blame History

title id challengeType videoUrl localeTitle
Deal cards for FreeCell 59694356a6e7011f7f1c5f4e 5 FreeCell的交易卡

Description

Free Cell是Paul Alfille在1978年向PLATO系统推出的单人纸牌游戏。微软的Jim Horne将名称更改为FreeCell并重新实现了DOS游戏,然后是Windows游戏。

这个版本引入了32000个编号的交易。 FreeCell FAQ讲述了这段历史。)

随着游戏的流行Jim Horne披露了这种算法 FreeCell的其他实现开始重现微软的交易。

这些交易编号从1到32000。

微软的新版本有100万笔交易编号从1到1000000;某些实现允许该范围之外的数字。

该算法使用Microsoft C的这种线性同余生成器

$ state_ {n + 1} \ equiv 214013 \ times state_n + 2531011 \ pmod {2 ^ {31}} $ $ rand_n = state_n \ div 2 ^ {16} $ $ rand_n $的范围是0到32767。

该算法如下:

使用交易编号为RNG播种。创建一个由52张牌组成的阵列 俱乐部的王牌钻石王牌心中的王牌黑桃王牌2个俱乐部2个钻石等等等等Ace2,3,4,5,6 7,8,9,10杰克女王国王。数组索引为0到51其中俱乐部的Ace为0黑桃之王为51.直到数组为空在索引≡下一个随机数mod数组长度中选择随机卡。将此随机卡与阵列的最后一张卡交换。从阵列中删除此随机卡。 数组长度减少1.处理此随机卡。交易所有52张牌面朝上横跨8列。前8张牌分为8列后8张牌分为8张依此类推。例

订购交易卡

 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 

游戏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']
] 

游戏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']
] 

任务:

编写一个函数来获取交易编号并按照与此算法相同的顺序处理卡。

该函数必须返回表示FreeCell板的二维数组。

还可以针对1000000游戏的FreeCell解决方案检查交易。

(召唤一个视频解决方案,它会显示初始交易。)

Instructions

Tests

tests:
  - text: <code>dealFreeCell</code>是一个功能。
    testString: 'assert(typeof dealFreeCell === "function", "<code>dealFreeCell</code> is a function.");'
  - text: <code>dealFreeCell(seed)</code>应该返回一个对象。
    testString: 'assert(typeof dealFreeCell(1) === "object", "<code>dealFreeCell(seed)</code> should return an object.");'
  - text: <code>dealFreeCell(seed)</code>应该返回一个长度为7的数组。
    testString: 'assert(dealFreeCell(1).length === 7, "<code>dealFreeCell(seed)</code> should return an array of length 7.");'
  - text: <code>dealFreeCell(1)</code>应该返回一个与示例“Game1”相同的数组
    testString: 'assert.deepEqual(dealFreeCell(1), game1, "<code>dealFreeCell(1)</code> should return an array identical to example "Game #1"");'
  - text: <code>dealFreeCell(617)</code>应该返回一个与示例“Game617”相同的数组
    testString: 'assert.deepEqual(dealFreeCell(617), game617, "<code>dealFreeCell(617)</code> should return an array identical to example "Game #617"");'

Challenge Seed

function dealFreeCell (seed) {
  // Good luck!
  return true;
}

After Test

console.info('after the test');

Solution

// solution required