O primeiro truque de cartas mágicas que aprendi quando criança foi o seguinte:
- Tenha 1 baralho de cartas em que o padrão na parte de trás não seja verticalmente simétrico.
- Organize todos os cartões voltados para uma direção.
- Peça a alguém que "escolha um cartão, qualquer cartão, memorize e devolva para você".
- Prossiga para colocá-lo no convés (na direção errada).
- Embaralhe vigorosamente, dando a ilusão de que você não saberá onde está o cartão deles.
- Produza seu cartão para sua surpresa.
Esse truque é obviamente um pouco sem brilho na natureza hoje em dia, no entanto, é um bom desafio. Escreva um programa que, quando não recebe nenhuma entrada, produz um baralho aleatoriamente aleatório com um dos cartões, escolhido aleatoriamente, invertido. No entanto, quando a entrada é um baralho de cartas com uma carta invertida, você deve imprimir a carta invertida (na ordem correta).
O baralho de cartas
Um baralho de cartas é definido como:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
Um cartão é definido como seu número e, em seguida, a primeira letra do naipe. O verso de uma carta é exatamente o oposto, a primeira letra de seu naipe seguida de um número.
O cartão desenhado
Por exemplo, se a carta escolhida aleatoriamente para reverter fosse a 4 of Clubs (4C)
, teríamos (sem embaralhar, obviamente):
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS,
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD,
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH,
2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC]
The Shuffling
Depois de embaralhar:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Esta é uma saída válida, dada a entrada vazia.
The Deck Input
No entanto, inversamente, quando o nosso programa recebe a saída acima como entrada, deve produzir 4C
. Ou seja, para uma entrada de:
[2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D]
Você percorre até encontrar o cartão invertido e o devolve, invertido de volta ao estado normal. Então, aqui encontraríamos C4
, saberíamos que C não é um número e devolveríamos como 4C
, o que está correto.
Regras
- Você não pode carregar o deck de nenhuma fonte externa.
- Uma entrada vazia deve resultar em um baralho aleatoriamente embaralhado com 1 cartão aleatório invertido.
- Um baralho de cartas com 1 carta invertida como entrada deve resultar na carta invertida.
- Quaisquer outras entradas podem resultar em lhamas explosivos montando segways através de um tubo futurista.
- Ou qualquer outra coisa, para esse assunto.
- A carta escolhida e a ordem de embaralhamento devem ser uniformemente aleatórias.
- Ou seja, todas as cartas têm chances iguais de serem selecionadas para serem revertidas.
- Ou seja, todas as combinações de cartas têm a mesma chance de aparecer.
- Você pode usar
SHCD
oushcd
para os fatos, mas seja consistente:- Se você escolher maiúsculas (
SHCD
), também deverá usarTJQKA
. - Se você escolher ternos minúsculos (
shcd
), também deverá usartjqka
.
- Se você escolher maiúsculas (
- Isso é código-golfe , o vencedor é o menor bytes.
fonte
Respostas:
Retina ,
616059 bytesExperimente online! Edit: Salvo
12 bytes graças a @MartinEnder. Explicação:Exclua todos os cartões não revertidos. Isso deve deixar um cartão invertido ou nenhum cartão.
Se a entrada estiver (agora) vazia, crie um baralho de cartas.
Selecione um cartão aleatoriamente e inverta-o (inverte o único cartão invertido).
Embaralhe os cartões.
fonte
05AB1E , 29 bytes
Experimente online!
fonte
1
ea
lá dentro.Y9ŸJ
como9LJ
PowerShell v2 ou posterior, 175 bytes
Versão longa:
Uso:
Crie um baralho embaralhado e armazene-o em uma variável:
Inspecione a variável à vontade, por exemplo
Coloque o baralho de volta no script:
fonte
Python 2 , 175 bytes
Experimente online! entrada vazia é denotada como
[]
fonte
> <> ,
215193 bytesExperimente online!
Recebe entrada como cartões não separados e sai como o mesmo (por exemplo
KCAC5C6S...
)Para facilitar o teste, eis uma versão que recebe entrada como separada por vírgula e sai como nova linha separada.
Todos os
x0
s são apenas uma tentativa de criar um gerador de números aleatórios semi-uniforme. Mais deles aumenta a faixa de valores possíveis, e o oposto por menos. 10 deles é onde eu julguei ser aleatório o suficiente.Observe que segue as regras em que:
Mas nem todas as combinações embaralhadas são saídas possíveis (e, de fato, a grande maioria não é).
fonte
Geléia , 26 bytes
Um link monádico que aceita uma lista de listas de caracteres (um esboço de 0 cartas ou um baralho completo de 52 cartas com uma carta invertida) e retorna uma lista de listas de caracteres (um esboço da 1 carta invertida, mas para a frente ou uma -deck com uma carta aleatória invertida).
Experimente online! (rodapé para fazer corresponder as representações de entrada e saída - como um programa completo, o código Jelly Python avalia o argumento e esmaga os caracteres juntos para a saída)
Quão?
fonte
Ẋ
antes daU
(talvez eu possa fixar para zero bytes em vez disso), mas terá de fazê-lo mais tarde ...[[number, suit]]
vez de[number, suit]
representar um único cartão quando a entrada não estiver vazia.Ruby , 95 (ou 100) bytes
Dada uma matriz vazia como entrada, retorna o baralho como uma matriz de seqüências de caracteres. Dada uma matriz não vazia como entrada, retorna o cartão invertido como uma matriz contendo uma única sequência. Se o cartão invertido for necessário como uma sequência em vez de uma matriz de elemento único que contenha uma sequência, o seguinte adicionará 5 bytes: altere
s-n
para(s-n)[0]
Experimente online!
A primeira linha gera um baralho padrão. A segunda linha se divide da seguinte maneira
fonte
Java 8,
275274259 bytesInput é uma String, a saída é uma String ou
java.util.List
depende da entrada.Explicação:
Experimente online.
fonte
Pitão, 45 bytes
Leva a lista vazia para entrada vazia.
Experimente online
Explicação
fonte
R ,
177171 bytesExperimente online!
Dada entrada vazia (chamada
f
sem entrada), assumimos o padrãol=1
e, assim, criamos uma permutação aleatóriam
do baralho. Assumindosample
seja verdadeiramente aleatório, existe uma probabilidade igual de qualquer carta ser a primeira desta lista. Então, modificamos o primeiro e, em seguida, embaralhamos novamente, retornando a lista.Invertendo-o, procuramos um cartão que comece com um de
SDHC
e o inverta.fonte
Python 2 , 135 bytes
Experimente online!
Os cartões são tuplas de
(value,suit)
Entrada vazia é
[]
fonte