Solitaire Dreams - Création d'une main de départ de solitaire gagnable

13

C'est moi. Cave Johnson.

C'est le 21 mai. Vous travaillez chez Aperture Science, la meilleure entreprise sur Terre, et demain nous publierons la version 3.0 de notre système de fenêtrage phare (ou WindowS ): CavOS. Malheureusement, demain matin, notre principal concurrent lance également la version 3.0 de leurs WindowS !

Il m'a été divulgué, Cave Johnson, PDG, que le WindowS en concurrence a une fonctionnalité qui manque à CavOS: un jeu de Klondike Solitaire. Moi, Cave Johnson, je crains que cette omission entraîne une baisse drastique des ventes. A ce titre, moi, Cave Johnson, ai imaginé un concours entre les stagiaires en programmation pour créer un jeu de Solitaire. Le programmeur dont l'entrée sera choisie aura l'opportunité de rejoindre le passionnant projet GlaDOS AI.

Moi, Cave Johnson, a quelques exigences:

  • Étant donné que le logiciel doit être livré demain, le programme le plus court sera choisi de telle sorte qu'il puisse s'insérer dans les secteurs de rechange des disquettes déjà imprimées et imagées.
  • Ne vous inquiétez pas du gameplay. Nos clients ont des imprimantes non? Tout ce dont j'ai besoin, c'est que votre programme produise une liste montrant: l'ordre des cartes dans le jeu et le contenu de chacune des 7 piles. Le jeu sera distribué par le haut. Les piles seront visibles du bas. Utilisez les abréviations H, D, C, S pour Coeurs, Diamants, Massues et Piques. Utilisez les abréviations K, Q, J, A pour King, Queen, Jack et Ace. Chaque carte doit être séparée par un espace. La première ligne doit montrer le jeu, la seconde la carte de la première et la plus petite pile, la troisième les cartes de la deuxième pile et ainsi de suite. Vous pouvez utiliser T au lieu de 10 si vous le souhaitez.

  • Nous faisons de la limonade ici - pas des citrons suceurs. Moi, Cave Johnson, je n'aime pas perdre, et nos clients non plus. Chaque partie doit être gagnable

  • Le jeu doit être randomisé. Aucune tentative d'encoder une seule partie. Il y a 7 000 billions de mains possibles du Klondike, et environ 90% d'entre elles sont gagnables. Je serais heureux avec un programme qui peut produire 256 mains différentes ou plus. Si votre langue ne dispose pas d'un moyen d'obtenir des nombres aléatoires (à partir d'une minuterie ou similaire), alors supposez que vous pouvez obtenir une graine d'une manière appropriée à votre langue.

  • Nos clients sont raisonnablement intelligents. Supposons pour gagner qu'ils jouent au tirage 3, sans limite de temps dans le jeu

Au nom de tout le monde (et de tout) chez Aperture, je vous souhaite à tous bonne chance. Nous comptons sur vous.

" Caroline? Comment puis-je fermer cette fichue chose? "


Hors caractère: assumez les règles de Windows, Draw 3, Not-vegas solitaire. J'ai essayé de traverser tous les t et points tous les i, mais demandez si vous avez des questions. Bonne chance.

Exemple de sortie:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.
lochok
la source
Pouvons-nous utiliser 'T' pour 10, donc chaque carte a 2 caractères?
captncraig
Je pense que nos clients sont assez intelligents pour y aller. Je vais l'ajouter à la description.
lochok

Réponses:

10

Brainfuck - 1575 1365

J'abuse horriblement du nombre minimum d'offres uniques. Cela produira exactement 256 sorties distinctes. Il accepte un octet d'entrée comme graine aléatoire.

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

Pourrait certainement être condensé davantage, mais c'est un peu la nature de la langue. C'est rapide et sale, et ça marche.

Exemple de sortie (entrée = 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 

Il est assez intuitif que tous les decks de ce format soient gagnables.

captncraig
la source
2
Magnifique solution de pliage de règles typique de codegolf. Et c'est même Brainfuck - bravo!
schnaader