Solitaire Dreams - Creando una mano inicial de solitario ganable

13

Soy yo. Cueva Johnson.

Es el 21 de mayo. Estás trabajando en Aperture Science, la mejor compañía de la Tierra, y mañana lanzaremos la Versión 3.0 de nuestro sistema de ventanas insignia (o WindowS ): CavOS. ¡Desafortunadamente, mañana por la mañana, nuestro principal competidor también lanzará la Versión 3.0 de sus WindowS !

Se me ha filtrado, Cave Johnson, CEO, que WindowS tiene una característica que CavOS no tiene: un juego de Solitario Klondike. Yo, Cave Johnson, me preocupa que esta omisión conduzca a ventas drásticamente más bajas. Como tal, yo, Cave Johnson, he ideado una competencia entre los pasantes de programación para crear un juego de Solitario. El programador cuya entrada sea elegida tendrá la oportunidad de unirse al emocionante proyecto GlaDOS AI.

Yo, Cave Johnson, tengo algunos requisitos:

  • Debido al hecho de que el Software debe enviarse mañana, se elegirá el programa más corto de modo que pueda caber en los sectores libres de los disquetes ya impresos e impresos.
  • No te preocupes por la jugabilidad. Nuestros clientes tienen impresoras, ¿no? Todo lo que necesito es que su programa produzca una lista que muestre: El orden de las cartas en el mazo y el contenido de cada una de las 7 pilas. El mazo se repartirá desde arriba. Las pilas serán visibles desde la parte inferior. Usa las abreviaturas H, D, C, S para Corazones, Diamantes, Tréboles y Picas. Usa las abreviaturas K, Q, J, A para King, Queen, Jack y Ace. Cada tarjeta debe estar separada por un espacio. La primera línea debe mostrar el mazo, la segunda la carta de la primera pila y la más pequeña, la tercera las cartas de la segunda pila y así sucesivamente. Puede usar T en lugar de 10 si lo desea.

  • Estamos haciendo limonada aquí, no chupando limones. Yo, Cave Johnson, no me gusta perder, y tampoco a nuestros clientes. Cada juego debe ser ganable

  • El juego debe ser aleatorio. No intentar codificar un solo juego. Hay 7000 billones de manos posibles de Klondike, y alrededor del 90% de ellas se pueden ganar. Estaría contento con un programa que puede producir 256 o más manos diferentes. Si su idioma carece de una manera de obtener números aleatorios (de un temporizador o similar), suponga que puede obtener una semilla de una manera apropiada para su idioma.

  • Nuestros clientes son razonablemente inteligentes. Supongamos que se puede ganar que están jugando Draw 3, sin límites de tiempos en el mazo.

En nombre de todos (y de todo) en Aperture, les deseo a todos buena suerte. Contamos contigo.

" ¿Caroline? ¿Cómo apago esta maldita cosa? "


Fuera de personaje: asume las reglas de Windows, Draw 3, No-vegas solitaire. Intenté cruzar cada punto y cada punto, pero pregunte si tiene alguna pregunta. Buena suerte.

Salida de ejemplo:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.
lochok
fuente
¿Podemos usar 'T' para 10, entonces cada carta tiene 2 caracteres?
captncraig
Creo que nuestros clientes son lo suficientemente listos como para hacerlo. Lo agregaré a la descripción.
lochok

Respuestas:

10

Brainfuck - 1575 1365

Estoy abusando horriblemente del número mínimo de ofertas únicas. Esto producirá exactamente 256 salidas distintas. Acepta un byte de entrada como su semilla aleatoria.

,>++++[>++++++<-]<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>>[<+<<+>>>-]>[-]<
<-[>+<-]<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-]>[-]>[<<<+>>>-]>[-]+[>+<
+++++]>+++++[>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>
>+>>+>>+>>+>>+[<<]>-]>>>>>>>>>+>>+>>+>>+>++++++[>++++>>++++>>++++>>+++
+>>+++>>+++>>+++>>+++>>++++>>++++>>++++>>++++>>+++>>+++>>+++>>+++<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<-]>++++>>++++>>++++>>++++>>>>>>>>>>+>>+>>+>>
+>>+>>+>>+>>+[<<]>>[>+<-<+>]>[<+>-]<<+++++++++++[>>+>>+>>+>>+>>+>>+>>+
>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+>>+[<<]>>-]>>>>+>>++++
+>>++++++++++++++++>>>>+>>+++++>>++++++++++++++++>>>>+>>+++++>>+++++++
+++++++++>>>>+>>+++++>>++++++++++++++++>>>>+>>+++++>>++++++++++++++++>
>>>+>>+++++>>++++++++++++++++[<<]<<<<<<[>>>>>>+<<<<<<-]>>>>>>[>[<<+>>-
]<[>+<-]>>[<<+>>-]<-[>+<-]>]>.[-]>.[-]>[[<<<<+>>>>-]>]<<<<<[<<]<++++[>
++++++++<-]>.[-]<<<[>>>+<<<-]>>>[>[<<+>>-]<[>+<-]>>[<<+>>-]<-[>+<-]>]>
.[-]>.[-]>[[<<<<+>>>>-]>]<<++++[>++++++++<-]>.[<<<+>>>-]<<<<<[.[-]>.[-
]>.[<<+>>-]<<<<]>>[>+>++>++<<<-]++++++++++.>>+>+++<.>.<<<.>>----------
-----.+>.<<.>.+>.<<<.>>.+>.<<.>.+>.<<.>.+>.<<<.>>.>.<<.>++++++++++.>+.
<<.>---------------.+>.<<.>.+>.<<<.>>.+>.<<.>.+>.<<.>.+>.<<.>.+>.<<.>+
++++++++.>++++.<<<.>>---------------.+>.<<.>.+>.<<.>.+>.<<.>.+>.<<.>.+
>.<<.>.+>.<<<.>>+++++++++.>+++++++++++.<<.>---------------.+>.<<.>.+>.
<<.>.+>.<<.>.+>.<<.>.+>.<<.>.+>.<<.

Definitivamente podría condensarse más, pero esa es la naturaleza del lenguaje. Esto es rápido y sucio, y funciona.

Ejemplo de salida (entrada = 98):

8H 9S KS KH KD KC QS QH QD QC JS JH JD JC TS TH TD TC 9H 9D 9C 8S 8D 8C 
AC
2C 3C
4C 5C 6C
7C AD 2D 3D
4D 5D 6D 7D AH
2H 3H 4H 5H 6H 7H
AS 2S 3S 4S 5S 6S 7S 

Es bastante intuitivo que todos los mazos de este formato se pueden ganar.

captncraig
fuente
2
Maravillosa solución de flexión de reglas típica de codegolf. E incluso es Brainfuck, ¡bien hecho!
schnaader