Solitaire Dreams - Erstellen Sie eine gewinnbare Solitaire-Starthand

13

Da ich bin. Höhle Johnson.

Es ist der 21. Mai. Sie arbeiten bei Aperture Science, dem besten Unternehmen der Welt, und morgen veröffentlichen wir Version 3.0 unseres Flaggschiff-Fenstersystems (oder WindowS ): CavOS. Leider veröffentlicht unser Hauptkonkurrent morgen früh auch die Version 3.0 seiner WindowS !

Mir, Cave Johnson, CEO, ist durchgesickert, dass das konkurrierende WindowS eine Funktion hat, die CavOS fehlt: Ein Spiel von Klondike Solitaire. Ich, Cave Johnson, befürchte, dass dieses Versäumnis zu einem drastischen Umsatzrückgang führen wird. Aus diesem Grund habe ich, Cave Johnson, einen Wettbewerb zwischen den Programmierpraktikanten ausgearbeitet, um ein Solitaire-Spiel zu entwickeln. Der Programmierer, dessen Eintrag ausgewählt wurde, erhält die Möglichkeit, am aufregenden GlaDOS AI-Projekt teilzunehmen.

Ich, Cave Johnson, habe einige Anforderungen:

  • Aufgrund der Tatsache, dass die Software morgen ausgeliefert werden muss, wird das kürzeste Programm so ausgewählt , dass es in die Ersatzsektoren der bereits gedruckten, bebilderten Disketten passt.
  • Mach dir keine Sorgen über das Gameplay. Unsere Kunden haben Drucker, nicht wahr? Alles, was ich brauche, ist, dass Ihr Programm eine Liste erstellt, die Folgendes enthält: Die Reihenfolge der Karten im Stapel und den Inhalt jedes der 7 Stapel. Das Deck wird von oben ausgeteilt. Die Stapel sind von unten sichtbar. Verwenden Sie die Abkürzungen H, D, C, S für Herzen, Diamanten, Keulen und Pik. Verwenden Sie die Abkürzungen K, Q, J, A für King, Queen, Jack und Ace. Jede Karte sollte durch ein Leerzeichen getrennt sein. Die erste Zeile sollte das Deck zeigen, die zweite die Karte des ersten und kleinsten Stapels, die dritte die Karten des zweiten Stapels und so weiter. Wenn Sie möchten, können Sie auch T anstelle von 10 verwenden.

  • Wir machen hier Limonade und saugen keine Zitronen. Ich, Cave Johnson, mag es nicht zu verlieren und unsere Kunden auch nicht. Jedes Spiel muss gewinnbar sein

  • Das Spiel muss zufällig ausgewählt werden. Kein Versuch, ein einzelnes Spiel zu codieren. Es gibt 7000 Billionen mögliche Klondike-Hände, von denen etwa 90% gewinnbar sind. Ich würde mich über ein Programm freuen, das 256 oder mehr verschiedene Hände produzieren kann. Wenn es Ihrer Sprache an einer Möglichkeit mangelt, Zufallszahlen zu erhalten (von einem Timer oder dergleichen), nehmen Sie an, dass Sie einen Samen auf eine Weise erhalten können, die für Ihre Sprache geeignet ist.

  • Unsere Kunden sind einigermaßen schlau. Nehmen Sie für die Gewinnbarkeit an, dass Sie Draw 3 spielen, ohne zeitliche Begrenzung durch das Deck

Im Namen von allen (und allem) bei Aperture wünsche ich Ihnen allen viel Glück. Wir zählen auf dich.

" Caroline? Wie schalte ich dieses verdammte Ding aus? "


Außer Charakter: Nehmen Sie die Regeln von Windows, Draw 3, Not-Vegas Solitaire an. Ich habe versucht, jedes t zu kreuzen und jedes i zu punktieren, aber fragen Sie, ob Sie irgendwelche Fragen haben. Viel Glück.

Beispielausgabe:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.
Lochok
quelle
Können wir 'T' für 10 verwenden, so dass jede Karte 2 Zeichen enthält?
Captncraig
Ich denke, unsere Kunden sind schlau genug, um das zu tun. Ich werde es der Beschreibung hinzufügen.
Lochok

Antworten:

10

Brainfuck - 1575 1365

Ich missbrauche schrecklich die minimale Anzahl einzigartiger Deals. Dies erzeugt genau 256 verschiedene Ausgaben. Es akzeptiert ein Byte der Eingabe als zufälligen Startwert.

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

Könnte definitiv mehr verdichtet werden, aber das ist irgendwie die Natur der Sprache. Das ist schnell und schmutzig und es funktioniert.

Beispielausgabe (Eingabe = 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 ist ziemlich intuitiv, dass alle Decks dieses Formats gewinnbar sind.

captncraig
quelle
2
Wunderbare Codegolf typische Regel Biegelösung. Und es ist sogar Brainfuck - gut gemacht!
Schnaader