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

7.2 KiB
Raw Blame History

title id challengeType videoUrl localeTitle
Deal cards for FreeCell 59694356a6e7011f7f1c5f4e 5 Карты сделок для FreeCell

Description

Free Cell - это карточная игра для пасьянсов, которую Пол Альфил представил системе PLATO в 1978 году. Джим Хорн в Microsoft заменил имя на FreeCell и переопределил игру для DOS , а затем Windows .

В этой версии реализовано 32000 номеров. ( Часто задаваемые вопросы FreeCell рассказывают об этой истории.)

Когда игра стала популярной, Джим Хорн раскрыл алгоритм , а другие реализации FreeCell начали воспроизводить сделки Microsoft.

Эти сделки пронумерованы от 1 до 32000.

Более новые версии от Microsoft имеют 1 миллион сделок, пронумерованных от 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 бриллиантов и т. Д. Через звания: туз, 2, 3, 4, 5, 6, 7, 8, 9, 10, Джек, Королева, Король. Индексы массива от 0 до 51, с Ace of Clubs в 0 и King of Spades - 51. Пока массив не будет пустым: выберите случайную карту с индексом ≡ следующее случайное число (длина массива мод). Поменяйте эту случайную карту последней карточкой массива. Удалите эту случайную карту из массива. (Длина массива снижается на 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,
['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,
['4S', 'TS', '2H', '5D', 'JC', '6C', 'JH', 'QH'],
['JD', 'KS', 'KC', '4H']
] 

Задача:

Напишите функцию, чтобы взять номер сделки и раздавать карты в том же порядке, что и этот алгоритм.

Функция должна возвращать двухмерный массив, представляющий плату FreeCell.

Сделки можно также проверить на решения FreeCell для 1000000 игр .

(Вызов видео решения, и он отображает первоначальную сделку.)

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> должен возвращать массив, идентичный примеру «Игра №1»,'
    testString: 'assert.deepEqual(dealFreeCell(1), game1, "<code>dealFreeCell(1)</code> should return an array identical to example "Game #1"");'
  - text: '<code>dealFreeCell(617)</code> должен возвращать массив, идентичный примеру «Game # 617»,'
    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