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

5.8 KiB

title id challengeType videoUrl localeTitle
Deal cards for FreeCell 59694356a6e7011f7f1c5f4e 5 Cartões de oferta para o FreeCell

Description

Free Cell é o jogo de cartas de paciência que Paul Alfille apresentou ao sistema PLATO em 1978. Jim Horne, da Microsoft, mudou o nome para FreeCell e reimplementou o jogo para DOS e Windows .

Esta versão introduziu 32000 ofertas numeradas. (A FAQ do FreeCell conta este histórico.)

Como o jogo se tornou popular, Jim Horne divulgou o algoritmo , e outras implementações do FreeCell começaram a reproduzir os acordos da Microsoft.

Estas ofertas são numeradas de 1 a 32000.

Versões mais recentes da Microsoft têm 1 milhão de transações, numeradas de 1 a 1000000; algumas implementações permitem números fora desse intervalo.

O algoritmo usa este gerador congruente linear da Microsoft C:

$ state_ {n + 1} \ equiv 214013 \ times state_n + 2531011 \ pmod {2 ^ {31}} $ $ rand_n = state_n \ div 2 ^ {16} $ $ rand_n $ está no intervalo de 0 a 32767.

O algoritmo segue:

Semente o RNG com o número do acordo. Crie um conjunto de 52 cartas: Ás de Paus, Ás de Diamantes, Ás de Copas, Ás de Espadas, 2 de Paus, 2 de Ouros e assim por diante nas classificações: Ás, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, rainha, rei. Os índices de array são 0 a 51, com Ace of Clubs em 0 e King of Spades em 51. Até que o array esteja vazio: Escolha um card aleatório no índice ≡ próximo número aleatório (mod array length). Troque este cartão aleatório com a última carta da matriz. Remova este cartão aleatório da matriz. (O comprimento da matriz diminui em 1.) Lide com este cartão aleatório. Lance todos os 52 cards, com a face para cima, em 8 colunas. As 8 primeiras cartas vão para 8 colunas, as 8 cartas seguintes vão para as 8 primeiras cartas e assim por diante. Exemplo:

Ordem para negociar cartões

 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 

Jogo # 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']
] 

Jogo # 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']
] 

Tarefa:

Escreva uma função para pegar um número de oferta e negociar as cartas na mesma ordem que este algoritmo.

A função deve retornar um array bidimensional representando a placa FreeCell.

As transações também podem ser verificadas em relação às soluções FreeCell para os jogos de 1000000 .

(Evoca uma solução de vídeo e exibe a transação inicial.)

Instructions

Tests

tests:
  - text: <code>dealFreeCell</code> é uma função.
    testString: 'assert(typeof dealFreeCell === "function", "<code>dealFreeCell</code> is a function.");'
  - text: <code>dealFreeCell(seed)</code> deve retornar um objeto.
    testString: 'assert(typeof dealFreeCell(1) === "object", "<code>dealFreeCell(seed)</code> should return an object.");'
  - text: <code>dealFreeCell(seed)</code> deve retornar uma matriz de tamanho 7.
    testString: 'assert(dealFreeCell(1).length === 7, "<code>dealFreeCell(seed)</code> should return an array of length 7.");'
  - text: '<code>dealFreeCell(1)</code> deve retornar um array idêntico ao exemplo &quot;Game # 1&quot;'
    testString: 'assert.deepEqual(dealFreeCell(1), game1, "<code>dealFreeCell(1)</code> should return an array identical to example "Game #1"");'
  - text: '<code>dealFreeCell(617)</code> deve retornar um array idêntico ao exemplo &quot;Game # 617&quot;'
    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