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

6.2 KiB

title id challengeType videoUrl localeTitle
Deal cards for FreeCell 59694356a6e7011f7f1c5f4e 5 Tarjetas de reparto para FreeCell

Description

Free Cell es el juego de cartas solitario que Paul Alfille introdujo al sistema PLATO en 1978. Jim Horne, de Microsoft, cambió el nombre a FreeCell y reimplementó el juego para DOS , luego Windows .

Esta versión introdujo 32000 ofertas numeradas. (Las preguntas frecuentes de FreeCell cuentan esta historia).

A medida que el juego se hizo popular, Jim Horne reveló el algoritmo y otras implementaciones de FreeCell comenzaron a reproducir los acuerdos de Microsoft.

Estas ofertas están numeradas del 1 al 32000.

Las versiones más nuevas de Microsoft tienen 1 millón de ofertas, numeradas del 1 al 1000000; Algunas implementaciones permiten números fuera de ese rango.

El algoritmo utiliza este generador lineal congruente de Microsoft C:

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

El algoritmo sigue:

Siembra el RNG con el número de la oferta. Crea una serie de 52 cartas: As of Clubs, As of Diamonds, As of Hearts, As of Spades, 2 of Clubs, 2 of Diamonds, y así sucesivamente a través de las filas: As, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, reina, rey. Los índices de matriz son de 0 a 51, con Ace of Clubs en 0 y King of Spades en 51. Hasta que la matriz esté vacía: elija una tarjeta aleatoria en el índice ≡ siguiente número aleatorio (mod longitud de matriz). Intercambia esta carta aleatoria con la última carta de la matriz. Eliminar esta tarjeta aleatoria de la matriz. (La longitud de la matriz se reduce en 1). Repartir esta carta aleatoria. Reparte las 52 cartas, boca arriba, en 8 columnas. Las primeras 8 cartas van en 8 columnas, las siguientes 8 cartas van en las primeras 8 cartas, y así sucesivamente. Ejemplo:

Orden para repartir cartas

 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 

Juego # 1

 El
['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']
] 

Juego # 617

 El
['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']
] 

Tarea:

Escriba una función para tomar un número de acuerdo y tarjetas de acuerdo en el mismo orden que este algoritmo.

La función debe devolver una matriz bidimensional que representa la placa FreeCell.

Las ofertas también pueden compararse con las soluciones FreeCell para 1000000 juegos .

(Invoca una solución de video y muestra el trato inicial.)

Instructions

Tests

tests:
  - text: <code>dealFreeCell</code> es una función.
    testString: 'assert(typeof dealFreeCell === "function", "<code>dealFreeCell</code> is a function.");'
  - text: <code>dealFreeCell(seed)</code> debe devolver un objeto.
    testString: 'assert(typeof dealFreeCell(1) === "object", "<code>dealFreeCell(seed)</code> should return an object.");'
  - text: <code>dealFreeCell(seed)</code> debe devolver una matriz de longitud 7.
    testString: 'assert(dealFreeCell(1).length === 7, "<code>dealFreeCell(seed)</code> should return an array of length 7.");'
  - text: '<code>dealFreeCell(1)</code> debe devolver una matriz idéntica al ejemplo &quot;Juego # 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> debe devolver una matriz idéntica al ejemplo &quot;Juego # 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