Solitaire Dreams - Создание выигрышной стартовой руки для пасьянса

13

Это я. Кейв Джонсон.

Это 21 мая. Вы работаете в Aperture Science, лучшей компании на Земле, и завтра мы выпускаем версию 3.0 нашей флагманской оконной системы (или WindowS ): CavOS. К сожалению, завтра утром наш главный конкурент также выпустит версию 3.0 их WindowS !

Мне стало известно, Кейв Джонсон, генеральный директор, что известно WindowS есть одна особенность, которой нет в CavOS: игра Пасьянс Клондайк. Я, Кейв Джонсон, обеспокоен тем, что это упущение приведет к резкому снижению продаж. Таким образом, я, Кейв Джонсон, разработал соревнование между стажерами по программированию, чтобы создать игру Пасьянс. Программист, чья заявка выбрана, получит возможность присоединиться к захватывающему проекту GlaDOS AI.

У меня, Кейва Джонсона, есть несколько требований:

  • В связи с тем, что Программное обеспечение должно появиться завтра, будет выбрана самая короткая программа , чтобы она могла поместиться в резервных секторах уже напечатанных дискет с изображениями.
  • Не беспокойтесь об игровом процессе. У наших клиентов есть принтеры, не так ли? Все, что мне нужно, чтобы ваша программа создала список, показывающий: порядок карт в колоде и содержимое каждой из 7 стопок. Колода будет сдана сверху. Сваи будут видны снизу. Используйте сокращения H, D, C, S для сердец, бриллиантов, треф и пиков. Используйте сокращения K, Q, J, A для короля, королевы, джека и туза. Каждая карта должна быть отделена пробелом. Первая строка должна показывать колоду, вторая - карту первой и наименьшей колоды, третья - карты второй колоды и так далее. Вы можете использовать T вместо 10, если хотите.

  • Мы делаем здесь лимонад, а не сосем лимоны. Я, Кейв Джонсон, не люблю проигрывать, как и наши клиенты. Каждая игра должна быть выигрышной

  • Игра должна быть рандомизированной. Не пытайтесь кодировать одну игру. Существует 7000 триллионов возможных рук Клондайка, и около 90% из них являются выигрышными. Я был бы счастлив с программой, которая может производить 256 или более разных рук. Если вашему языку не хватает способа получения случайных чисел (из таймера и т. П.), Тогда предположите, что вы можете получить начальное число способом, подходящим для вашего языка.

  • Наши клиенты достаточно умны. Предположим для выигрыша, что они играют в ничью 3 без ограничений по времени в колоде.

От имени всех (и всего) в Aperture я желаю всем удачи. Мы рассчитываем на тебя.

" Кэролайн? Как мне отключить эту чертову штуку? "


Не по характеру: принять правила Windows, Draw 3, пасьянс Not-Vegas. Я пытался пересечь каждую букву t и расставить все точки над i, но спрашиваю, есть ли у вас вопросы. Удачи.

Пример вывода:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.
lochok
источник
Можем ли мы использовать «Т» для 10, поэтому каждая карта состоит из 2 символов?
Captncraig
Я думаю, что наши клиенты достаточно умны, чтобы пойти на это. Я добавлю это в описание.
lochok

Ответы:

10

Brainfuck - 1575 1365

Я ужасно злоупотребляю минимальным количеством уникальных сделок. Это даст ровно 256 разных выходов. Он принимает один байт ввода в качестве своего случайного начального числа.

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

Определенно может быть сжато больше, но это своего рода природа языка. Это быстро и грязно, и это работает.

Пример вывода (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 

Довольно интуитивно понятно, что все колоды этого формата можно выиграть.

captncraig
источник
2
Замечательный Codegolf типичное правило изгиба решения. И это даже Brainfuck - молодец!
Schnaader