Dice Cricket é um jogo que eu fui apresentado quando criança e que tenho usado como uma maneira de passar o tempo há anos. Não encontrei uma página da Wikipedia, por isso vou explicar as regras abaixo.
Regras de Críquete de Dados
Premissa
Dice Cricket é um jogo semelhante a marcar um jogo de críquete enquanto você o assiste, mas, em vez de assistir e gravar o resultado, você está rolando um dado e gravando o resultado.
Os resultados são registrados em uma tabela, conforme exibido na parte inferior.
Exibição
O Dice Cricket usa uma exibição específica para mostrar todas as informações que estão acontecendo.
A tabela possui 11 linhas. Cada linha representa uma massa. O layout da linha é explicado abaixo.
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Score|
+------+------------------------------+---------+-----+
- Nome: o nome deve ser uma string composta inteiramente de letras maiúsculas ou minúsculas
- Corre: Um batedor pode enfrentar 30 bolas. Cada bola pode ser uma das
1 2 4 6 . /
. Isso será explicado em mais detalhes abaixo - How Out: A maneira como a massa estava fora. Pode ser qualquer um
Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
- Pontuação: a soma de todos os números em
Runs
Como o jogo funciona
Em um jogo, sempre existem 2 batedores em campo. O primeiro jogador é, por padrão, a massa atual e o segundo na massa "desligada".
Um jogo é composto de "bolas": cada bola em uma partida de críquete é representada por uma jogada de dados. Cada rolo executa um comando diferente:
- 1,2,4 e 6 fazem o batedor marcar tanto. Se 1 for rolado, a massa atual se torna a massa "off" e a massa "off" se torna a massa atual
- 3 é uma "bola pontilhada", significando que nada acontece. Ele é representado na
Runs
seção como a.
e pontua 0. A0
não pode ser usado para representá-lo. - 5 é um postigo. Se 5 for rolado, a massa atual estará "fora". Isso significa que a
/
é adicionada às jogadas e, a partir de então, a massa não poderá marcar mais jogadas. A massa é então trocada pela próxima que não tiver batido. AHow Out
seção é uma escolha aleatória das possíveis maneiras de sair:Bowled, LBW, Caught
Exemplo para um postigo (isto é apenas para maior clareza, não é assim que é produzido)
player a is on 4,6,2,6,4
player b is on 6,4,2,6,6
player c hasn't batted
player a is current batter
WICKET!!!
player a is on 4,6,2,6,4,/
player b in on 6,4,2,6,6
player c is on NOTHING
player c is current batter
A cada 6 bolas, os dois batedores trocam; a massa atual se torna a massa "off" e a massa "off" se torna a massa atual
Se a Runs
seção estiver cheia (30 bolas), a massa está fora e a How Out
seção está em Retired
. A /
não é colocado no final da Runs
caixa.
Desafio atual (sim, tudo isso eram regras do jogo)
Seu desafio é gerar uma tabela completa (como o exemplo no final), com uma lista de nomes. O conteúdo da saída deve conter apenas a tabela e / ou espaços em branco à esquerda ou à direita.
Regras
- As brechas padrão não são permitidas
- Todos os 11 jogadores devem ter algo na
Runs
seção. - Apenas um jogador pode ser
Not Out
. Todos os outros jogadores não aposentados devem ter uma escolha entre[Bowled, LBW, Caught]
- Os nomes podem ter qualquer tamanho entre 1 e 6 que corresponda à regex
A-Za-z
- A linha final na tabela deve ser a linha total (veja o exemplo)
- Você não precisa alinhar o texto da tabela de forma alguma, mas os separadores de linha e coluna devem estar alinhados.
Exemplo
Input:
['Fred', 'Sonya', 'David', 'Ben', 'Cody', 'Hazel', 'Nina', 'Kim', 'Cath', 'Lena', 'Will']
Output:
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Total|
+------+------------------------------+---------+-----+
|Fred |.662/ | Caught | 14 |
+------+------------------------------+---------+-----+
|Sonya |1164/ | Caught | 12 |
+------+------------------------------+---------+-----+
|David |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Ben |424/ | LBW | 10 |
+------+------------------------------+---------+-----+
|Cody |62/ | Bowled | 8 |
+------+------------------------------+---------+-----+
|Hazel |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Nina |161.6226166..44261442/ | Caught | 64 |
+------+------------------------------+---------+-----+
|Kim |11/ | Caught | 2 |
+------+------------------------------+---------+-----+
|Cath |6.21/ | LBW | 9 |
+------+------------------------------+---------+-----+
|Lena |/ | Bowled | 0 |
+------+------------------------------+---------+-----+
|Will |2 | Not Out | 2 |
+------+------------------------------+---------+-----+
| Total Runs | 121 |
+-----------------------------------------------+-----+
Respostas:
Python 3 ,
650621582572588 bytesExperimente online!
Bem, já se passaram mais de 24 horas e levei cerca de uma hora para preparar, então espero não estar fazendo o FGITW com ninguém, e não jogo golfe em Python há algum tempo, então isso foi divertido (embora isso seja na segunda vez que respondi uma de minhas próprias perguntas com uma longa resposta em Python)
Por favor, sinta-se livre para postar sugestões de golfe, Python não é meu melhor idioma para jogar golfe.
-68 bytes graças ao FlipTack !
-8 bytes graças ao Sr. Xcoder
+16 bytes devido a um erro
fonte
print
vez deP
. 2)sum
pode pegar diretamente ummap
objeto, não há necessidade de convertê-lo em uma lista. 3) Em vez de escreveryield x
duas vezes, por que nãoyield x
e, em seguida, quebre se necessário? 4)T=0
pode ser colocado dentro do cabeçalho da função. 5) Na sua última função, você utilizou várias novas linhas nas quais era possível usar apenas uma linha com ponto-e-vírgula, por exemplo, as três primeiras instruções, as últimas três e as instruções no loop for.s
consideravelmente ...def s(i=30):
e entãowhile i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
. Além disso, você liga apenaso()
uma vez; portanto, não há necessidade de declarar, basta usar a instrução diretamente.b
^^Carvão ,
277255 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Leia os 11 nomes (a entrada é flexível: JSON, espaço separado ou nova linha) e crie uma matriz
q
de 11 batedores, representada por suas bolas (como matriz), status (como número inteiro) e nome.Crie uma cópia invertida dos batedores
h
. Isso representa os batedores que não estão fora. Os dois últimos elementos são os batedores off e current.Repita enquanto houver pelo menos dois batedores disponíveis.
Extraia a massa atual para
i
.Gere uma bola aleatória
z
.Adicione-o à lista geral de bolas usando a lista vazia predefinida
u
.Adicione-o às bolas do batedor atual.
Se a bola for a
/
, gere um status aleatório2..4
; caso contrário, essa seja a 30ª bola do batedor, defina o status para o1
contrário0
.Se a massa estiver vazia, armazene o status da massa, caso contrário, coloque-a novamente na massa.
Se houver pelo menos dois batedores restantes e o batedor estiver fora xor 6 bolas foram jogadas, então ...
... retire as batedeiras da corrente e coloque-as de volta na ordem inversa.
Imprima o cabeçalho.
Laço sobre as massas.
Imprima o nome da massa.
Imprima as bolas da massa.
Imprima o status da massa indexando a sequência
Not OutRetiredBowled Caught LBW
dividida em substrings de comprimento 7.Imprima a pontuação da massa.
Vá para o início da próxima linha, exceto uma.
Imprima o total.
Desenhe caixas em torno de tudo.
fonte