Solitaire Dreams - Criando uma mão inicial ganhadora de paciência


13

Wsou eu. Cave Johnson.

É 21 de maio. Você está trabalhando na Aperture Science, a melhor empresa do mundo, e amanhã lançaremos a versão 3.0 do nosso principal sistema de janelas (ou WindowS ): CavOS. Infelizmente, amanhã de manhã, nosso principal concorrente também está lançando a versão 3.0 de suas janelas !

Foi vazado para mim, Cave Johnson, CEO, que o WindowS concorrente tem um recurso que falta ao CavOS: um jogo do Klondike Solitaire. Eu, Cave Johnson, estou preocupado que essa omissão leve a vendas drasticamente mais baixas. Como tal, eu, Cave Johnson, desenvolvi uma competição entre os estagiários de programação para criar um jogo de paciência. O programador cuja entrada for escolhida terá a oportunidade de participar do empolgante projeto GlaDOS AI.

Eu, Cave Johnson, tenho alguns requisitos:

  • Devido ao fato de que o software deve ser entregue amanhã, o programa mais curto será escolhido para caber nos setores extras dos disquetes já impressos e impressos.
  • Não se preocupe com a jogabilidade. Nossos clientes têm impressoras, não têm? Tudo que eu preciso é que o seu programa produza uma lista mostrando: A ordem das cartas no baralho e o conteúdo de cada uma das sete pilhas. O baralho será tratado de cima. As pilhas serão visíveis a partir do fundo. Use as abreviaturas H, D, C, S para Copas, Diamantes, Paus e Espadas. Use as abreviaturas K, Q, J, A para King, Queen, Jack e Ace. Cada cartão deve ser separado por um espaço. A primeira linha deve mostrar o baralho, a segunda a carta da primeira e menor pilha, a terceira as cartas da segunda pilha e assim por diante. Você pode usar T em vez de 10, se desejar.

  • Estamos fazendo limonada aqui - não chupando limões. Eu, Cave Johnson, não gosto de perder, nem nossos clientes. Todo jogo deve ser vencível

  • O jogo deve ser aleatório. Nenhuma tentativa de codificar um único jogo. Existem 7000 trilhões de mãos Klondike possíveis, e cerca de 90% delas são vencíveis. Eu ficaria feliz com um programa que pode produzir 256 ou mais mãos diferentes. Se seu idioma não tem uma maneira de obter números aleatórios (de um cronômetro ou algo semelhante), assuma que você pode obter uma semente da maneira apropriada para o seu idioma.

  • Nossos clientes são razoavelmente espertos. Suponha, por vitória, que eles estejam jogando o Draw 3, sem limites de tempo no baralho

Em nome de todos (e tudo) no Aperture, desejo a todos boa sorte. Estamos contando com você.

" Caroline? Como desligo essa coisa maldita? "


Fora do personagem: assuma as regras do Windows, Empate 3, Paciência não-vegas. Eu tentei atravessar cada te ponto a cada i, mas pergunte se você tem alguma dúvida. Boa sorte.

Exemplo de saída:

5H AS 7C 8S QH ...    
AH    
JS 10S    
JC JH 7C    
9D AC 8D 7C     
.    
.    
.

Podemos usar 'T' para 10, então cada cartão tem 2 caracteres?
Captncraig

Acho que nossos clientes são espertos o suficiente para fazer isso. Vou adicioná-lo à descrição.
Lochok

Respostas:


10

Brainfuck - 1575 1365

Estou abusando horrivelmente do número mínimo de transações únicas. Isso produzirá exatamente 256 saídas distintas. Ele aceita um byte de entrada como sua semente aleatória.

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

Definitivamente poderia ser mais condensado, mas essa é a natureza da linguagem. Isso é rápido e sujo, e funciona.

Exemplo de saída (entrada = 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 

É bastante intuitivo que todos os decks desse formato sejam vencíveis.


2
Maravilhosa solução típica de flexão de regra de codegolf. E ainda é Brainfuck - muito bem!
precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.