Solitaire Dreams - Menciptakan tangan awal solitaire yang dapat dimenangkan

13

Ini aku. Gua Johnson.

Ini 21 Mei. Anda bekerja di Aperture Science, perusahaan terbaik di Bumi, dan besok kami merilis Versi 3.0 dari sistem windowing utama kami (atau WindowS ): CavOS. Sayangnya, besok pagi, pesaing utama kami juga merilis Window Versi 3.0 !

Menurut saya, Cave Johnson, CEO bahwa WindowS yang bersaing memiliki satu fitur yang tidak dimiliki CavOS: Permainan Klondike Solitaire. Saya, Cave Johnson, prihatin bahwa kelalaian ini akan menyebabkan penjualan yang lebih rendah secara drastis. Karena itu, saya, Cave Johnson, telah menyusun kompetisi antara para pemrogram magang untuk membuat permainan Solitaire. Programmer yang entrinya dipilih akan mendapat kesempatan untuk bergabung dengan proyek GlaDOS AI yang menarik.

I, Cave Johnson, memiliki beberapa persyaratan:

  • Karena kenyataan bahwa Perangkat Lunak harus dikirimkan besok, program terpendek akan dipilih sedemikian rupa sehingga dapat masuk dalam sektor cadangan disket yang sudah dicetak dan dicitrakan.
  • Jangan khawatir tentang gameplaynya. Pelanggan kami memiliki printer bukan? Yang saya butuhkan adalah program Anda untuk menghasilkan daftar yang menunjukkan: Urutan kartu di geladak, dan isi masing-masing dari 7 tumpukan. Dek akan dibagikan dari atas. Tumpukan akan terlihat dari bawah. Gunakan singkatan H, D, C, S untuk Hearts, Diamonds, Clubs dan Spades. Gunakan singkatan K, Q, J, A untuk King, Queen, Jack, dan Ace. Setiap kartu harus dipisahkan oleh spasi. Baris pertama harus menunjukkan dek, yang kedua kartu tumpukan pertama dan terkecil, yang ketiga kartu tumpukan kedua dan seterusnya. Anda dipersilakan untuk menggunakan T daripada 10 jika Anda mau.

  • Kami membuat limun di sini - bukan mengisap lemon. Saya, Cave Johnson, tidak suka kalah, dan begitu juga pelanggan kami. Setiap pertandingan harus dapat dimenangkan

  • Game harus acak. Tidak berusaha menyandikan satu game. Ada 7000 triliun kemungkinan tangan Klondike, dan sekitar 90% di antaranya dapat dimenangkan. Saya akan senang dengan program yang dapat menghasilkan 256 atau lebih tangan yang berbeda. Jika bahasa Anda tidak memiliki cara untuk mendapatkan angka acak (dari penghitung waktu atau sejenisnya), maka asumsikan bahwa Anda bisa mendapatkan seed dengan cara yang sesuai untuk bahasa Anda.

  • Pelanggan kami cukup pintar. Asumsikan untuk winnability bahwa mereka bermain Draw 3, tanpa batas waktu melalui dek

Atas nama semua orang (dan semuanya) di Aperture, saya ucapkan semoga sukses. Kami mengandalkan Anda.

" Caroline? Bagaimana aku bisa mematikan benda sialan ini? "


Keluar dari karakter: menganggap aturan Windows, Draw 3, Not-vegas solitaire. Saya telah mencoba untuk menyeberang setiap t dan dot setiap saya, tetapi tanyakan apakah Anda memiliki pertanyaan. Semoga berhasil.

Contoh output:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.
lochok
sumber
Bisakah kita menggunakan 'T' untuk 10, jadi setiap kartu adalah 2 karakter?
captncraig
Saya pikir pelanggan kami cukup pintar untuk melakukannya. Saya akan menambahkannya ke deskripsi.
lochok

Jawaban:

10

Brainfuck - 1575 1365

Saya mengerikan menyalahgunakan jumlah minimum penawaran unik. Ini akan menghasilkan persis 256 keluaran berbeda. Ia menerima satu byte input sebagai seed acaknya.

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

Bisa dipastikan lebih kental, tapi itu sifat bahasa. Ini cepat dan kotor, dan berhasil.

Contoh output (input = 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 

Cukup intuitif bahwa semua deck format ini dapat dimenangkan.

captncraig
sumber
2
Codegolf yang luar biasa, solusi aturan tekuk yang khas. Dan bahkan Brainfuck - bagus sekali!
schnaader