Nunca houve realmente um desafio definitivo para cartões ASCII AFAIK. Portanto, usando o seguinte baralho de cartões ASCII:
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) || (\/) |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: || :\/: |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: || :/\: |
| (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) || (__) |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
.------..------..------..------..------..------..------..------..------..------..------..------..------.
|2.--. ||3.--. ||4.--. ||5.--. ||6.--. ||7.--. ||8.--. ||9.--. ||T.--. ||J.--. ||Q.--. ||K.--. ||A.--. |
| :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): || :(): |
| ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() || ()() |
| '--'2|| '--'3|| '--'4|| '--'5|| '--'6|| '--'7|| '--'8|| '--'9|| '--'T|| '--'J|| '--'Q|| '--'K|| '--'A|
'------''------''------''------''------''------''------''------''------''------''------''------''------'
Pegue dois números inteiros p
e q
como entrada; onde p
é o número de jogadores e q
o número de cartões que cada jogador recebe.
- Embaralhe aleatoriamente o baralho de cartas (isso é ambíguo, mas significa que todas as cartas devem ter a mesma probabilidade de aparecer em qualquer lugar uma vez).
- Distribua 1 rodada de cartas por jogador, gerando
q
linhas dep
cartas a cada linha.
Regras:
- Os resultados devem ser uniformemente aleatórios, cada cartão deve ter a mesma probabilidade de aparecer em qualquer lugar.
- É garantido que
0 < p*q <= 52 and p < 10
, você pode ter um comportamento indefinido para cenários em que isso não é atendido. - Você deve gerar
q
linhas de cartões comp
cartões por linha. - Cada coluna deve ser separada por
|
(um caractere de tubo cercado por espaços); se você escolher um caractere diferente, explique o motivo. Os espaços circundantes aqui NÃO são opcionais. - Cada linha deve ter 1 ou mais novas linhas entre elas, mais de uma é aceitável, 0 não é (1 nova linha significa a nova linha por padrão).
- Cada linha deve ser rotulada com o player que o possui no formato "Player N" (0 ou 1 indexado é bom).
- Nenhum cartão pode aparecer mais de uma vez.
T
é para dez.
Exemplos:
Função ( p=1,q=1
):
Player 1 # Can also be 0.
.------.
|2.--. |
| (\/) |
| :\/: |
| '--'2|
'------'
Função ( p=2,q=1
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|2.--. | | |T.--. |
| (\/) | | | (\/) |
| :\/: | | | :\/: |
| '--'2| | | '--'T|
'------' | '------'
Função ( p=2,q=2
):
Player 1 | Player 2 # Can also be "Player 0 | Player 1"
.------. | .------.
|J.--. | | |3.--. |
| (\/) | | | :/\: |
| :\/: | | | :\/: |
| '--'J| | | '--'3|
'------' | '------'
.------. | .------.
|8.--. | | |6.--. |
| :(): | | | :/\: |
| ()() | | | (__) |
| '--'8| | | '--'6|
'------' | '------'
Crédito artístico para uma fonte em: http://patorjk.com/software/taag
code-golf
ascii-art
random
card-games
Urna de polvo mágico
fonte
fonte
Each row must have 1 or more newlines inbetween them, more than one is acceptable, 0 is not.
... Mas seus casos de teste não têm novas linhas entre cartões ..?Respostas:
Carvão ,
142133125 bytesExperimente online! Link é a versão detalhada do código. Edit: Salvo 9 bytes, melhorando meu código de amostragem aleatória. Economizei mais 8 bytes melhorando o código de impressão do meu traje. Explicação:
Leia o número de cartões em
q
.Faça um loop sobre cada jogador.
Se este não for o primeiro reprodutor, imprima a linha vertical entre o reprodutor anterior e este.
Imprima o número do jogador.
Loop sobre cada cartão.
Imprima a borda do cartão.
Escolha um índice de cartão que ainda não tenha sido escolhido e adicione-o à lista de índices de cartões escolhidos.
Escolha e imprima a classificação do cartão indexando ciclicamente em uma sequência de classificações válidas de cartões (
2-9, T, J, Q, K, A
).Imprima a parte superior do terno.
Imprima o meio do traje cortando em uma corda. A fatia começa no módulo de índice de cartas 4 e leva a cada 4 caracteres até que a sequência se esgote (ou o
f
1000 caractere seja atingido). Como 4 e 13 são coprime, isso garante que todas as 52 placas sejam possíveis.Imprima a parte inferior do naipe e uma cópia da classificação e, em seguida, vá para um ponto que não esteja muito longe da cópia da classificação, do início da próxima carta ou do início da linha divisória. próximo jogador.
fonte
Python 2 , 357 bytes
Experimente online!
Não tenho a menor idéia.
fonte
Gelatina , 126 bytes
Experimente online!
fonte
JavaScript (ES6),
328... 312 bytesRecebe entrada na sintaxe de currying
(p)(q)
. Os jogadores são indexados em 0.Demo
Mostrar snippet de código
Quão?
Esta é uma função recursiva, construindo a saída de baixo para cima. Durante a parte principal em que as cartas são sorteadas,
i
é inicializadap*q*6
e diminuída até que ela chegue0
. Em seguida, desenhamos o cabeçalho decrementando ainda maisi
até alcançar-p
.A arte ASCII é dividida em pequenos pedaços armazenados na matriz
a[]
. A tabela abaixo descreve o conteúdo dea[]
, o que facilita o entendimento do restante do código.Formatado e comentado
fonte
Python 2 ,
382358346338332 bytesExperimente online!
fonte
SOGL V0.12 , 106 bytes
Experimente aqui!
Geração de cartão:
Baralhar:
Lidando:
fonte
Ruby, 262 bytes
Mais difícil de seguir, mas mais curto!
Ruby, 279 bytes
Cria um formato para cada linha e depois usa o
%
operadorsprintf
para preenchê-lo.O fato de o valor do cartão aparecer em cada terceira linha é útil. Os valores do cartão são apresentados em hexadecimal com os dígitos
01BC
substituídos porTJQK
.Os 4 bytes salvos dos símbolos do naipe, considerando que a parte superior dos diamantes e espadas são os mesmos, mas adicionados 2 novamente no
-4
final dosj%4*4-4
códigos do naipe são -4 0 4 ou 8, onde[-4,4]
significa 4 caracteres iniciando o 4º último caractere no corda.Provavelmente poderia salvar mais alguns bytes. Ter que repetir o código para a identificação do jogador é feio.
fonte
PHP, 509 bytes
Experimente online!
Esta é a minha primeira tentativa de código de golfe, por isso provavelmente pode ser melhorada bastante. Eu imaginei que tinha que começar em algum lugar. :)
fonte
Java (OpenJDK 8) ,
784835843826815781775 bytesExperimente online!
Por que o voto negativo, está em conformidade com as especificações
fonte
Function<String,String>
: o último é muito, muito caro. Tanto na criação quanto quando usado.n[c]=t<2?"A":t<10?""+t:""+"TJQK".charAt(t-10)
;for(j=0;j<p;j++){o+=...;l++;}
pode serfor(j=0;j<p;l++,j++)o+=...;
; você pode emreturn o;
vez deSystem.out.print(o);
usar um segundo emFunction
vez deConsumer
;,y=p*q
pode ser removido e você pode usarp*q
duas vezes diretamente, em vez dey
. Sem dúvida, há muito mais para jogar golfe, mas não tenho tempo para investigar isso agora. #s[l]<2?":/\\:":s[l]<3?":/\\:"
pode sers[l]<3?":/\\:"
es[i*p+j]<1?":\\/:":s[i*p+j]<2?":\\/:"
pode sers[i*p+j]<2?":\\/:"
. @ OlivierGrégoire E eu sei que é provável que esteja quase pela metade, então eu entendo o voto negativo. Mas isso é principalmente falta de experiência e, na verdade, não é possível ler todas as dicas várias vezes. Algumas das coisas da resposta que eu fiz no passado também, e esse não é um desafio fácil para o Java. Btw, se você tem uma resposta de 400 a 450 bytes, por que não a publica como uma resposta separada (se é significativamente diferente o suficiente)? Você gostaria do meu voto. ;)Python 3, 332 bytes
fonte