Solitaire Dreams - Tworzenie wygrywającego pasjansa w ręce startowej

13

To ja. Cave Johnson.

Jest 21 maja. Pracujesz w Aperture Science, najlepszej firmie na Ziemi, a jutro wypuszczamy wersję 3.0 naszego flagowego systemu okien (lub WindowS ): CavOS. Niestety, jutro rano nasz główny konkurent wypuszcza również wersję 3.0 swoich WindowS !

Cave Johnson, dyrektor generalny wyciekł do mnie, że konkurencyjny WindowS ma jedną cechę, której brakuje w CavOS: grę w Klondike Solitaire. Ja, Cave Johnson, obawiam się, że to pominięcie doprowadzi do drastycznie niższej sprzedaży. Jako taki, ja, Cave Johnson, opracowałem konkurs między stażystami programistycznymi, aby stworzyć grę w pasjansa. Programista, którego wpis zostanie wybrany, będzie mógł dołączyć do ekscytującego projektu AI GlaDOS.

Ja, Cave Johnson, mam kilka wymagań:

  • Ze względu na fakt, że Oprogramowanie musi zostać wysłane jutro, zostanie wybrany najkrótszy program, który będzie pasował do wolnych sektorów już wydrukowanych, obrazowanych dyskietek.
  • Nie martw się o rozgrywkę. Nasi klienci mają drukarki, prawda? Wszystko czego potrzebuję, to twój program do stworzenia listy pokazującej: Kolejność kart w talii i zawartość każdego z 7 stosów. Talia zostanie rozdana z góry. Stosy będą widoczne od dołu. Używaj skrótów H, D, C, S dla kier, karo, trefl i pik. Używaj skrótów K, Q, J, A dla króla, królowej, waleta i asa. Każda karta powinna być oddzielona spacją. Pierwsza linia powinna pokazywać talię, druga karta pierwszego i najmniejszego stosu, trzecia karta drugiego stosu i tak dalej. Jeśli chcesz, możesz użyć T zamiast 10.

  • Robimy tutaj lemoniadę - nie ssiemy cytryn. Ja, Cave Johnson, nie lubię przegrywać, podobnie jak nasi klienci. Każda gra musi być możliwa do wygrania

  • Gra musi być losowa. Żadna próba zakodowania jednej gry. Możliwe jest 7000 bilionów możliwych rąk Klondike, a około 90% z nich można wygrać. Byłbym zadowolony z programu, który może wyprodukować 256 lub więcej różnych rąk. Jeśli twój język nie ma możliwości uzyskania losowych liczb (z timera lub podobnego), to załóż, że możesz otrzymać ziarno w sposób odpowiedni dla twojego języka.

  • Nasi klienci są dość sprytni. Załóżmy, że grają w Draw 3, bez ograniczeń czasowych w talii

W imieniu wszystkich (i wszystkiego) w Aperture życzę wszystkim powodzenia. Liczymy na ciebie.

Caroline? Jak mam zamknąć to cholerstwo?


Poza charakterem: przyjmij zasady Windows, Draw 3, Solitaire Not-vegas. Próbowałem przecinać każde t i kropkę co I, ale pytam, czy masz jakieś pytania. Powodzenia.

Przykładowe dane wyjściowe:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.
Lochok
źródło
Czy możemy użyć „T” dla 10, więc każda karta ma 2 znaki?
captncraig
Myślę, że nasi klienci są na tyle sprytni, aby na to pójść. Dodam to do opisu.
lochok

Odpowiedzi:

10

Brainfuck - 1575 1365

Okropnie nadużywam minimalnej liczby unikalnych ofert. To da dokładnie 256 różnych wyników. Akceptuje jeden bajt danych wejściowych jako losowe źródło.

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

Zdecydowanie można by go bardziej skondensować, ale taka jest natura tego języka. Jest to szybkie i brudne i działa.

Przykładowe dane wyjściowe (dane wejściowe = 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 

Jest całkiem intuicyjne, że wszystkie pokłady tego formatu można wygrać.

captncraig
źródło
2
Wspaniałe, typowe dla gołębiarza rozwiązanie do gięcia reguł. I to nawet Brainfuck - dobra robota!
schnaader