Introdução
Para quem nunca ouviu falar desse jogo antes. Você está jogando uma bola que precisa sobreviver o maior tempo possível. Isso é feito movendo-se para a esquerda ou direita, indo para os orifícios. Como o mapa se move para cima, você precisa descer para sobreviver por mais tempo. Se você procurar imagens, provavelmente sabe qual jogo quero dizer.
A tarefa
Dado um número inteiro positivo n , produza um mapa de bola em queda de n camadas. Entre as camadas, existem 4 novas linhas. A largura da camada é composta por 25 caracteres sublinhados, com um orifício de comprimento 5. Isso significa que a largura total é igual a 30. Isso é alterado aleatoriamente após cada camada. Um exemplo de uma camada válida é:
_______________ __________
O furo também pode estar nas bordas, como se a camada fosse como um cilindro:
_________________________
Observe que existem 2 espaços à esquerda e 3 à direita. Fazendo um único orifício de largura 5.
Casos de teste
Para n = 4, esta é uma saída válida:
_______________ __________
______ ___________________
_______________________ __
_________________________
Nota: os orifícios devem ser uniformemente distribuídos. Trailing e / ou linhas de liderança são permitidas.
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Respostas:
Pitão, 19 bytes
Experimente aqui!
Explicação
fonte
Ruby,
747159Agradeço a Alex A. por me lembrar que ser basicamente uma linha significa que posso usar o lambda stabby
fonte
puts
adiciona uma nova linha ao final (enquanto Rubyprint
não), por isso foi atualizada para5
novas linhas.times
função de me salvar 3 bytes nofor
loop: D->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}}
Tente aqui(->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}})[input]
ou apenas especificar que precisa atribuí-lo para chamá-lo. Isso é bastante comum no site.Julia, 72 bytes
Esta é uma função anônima que aceita um número inteiro e retorna uma string. Para chamá-lo, atribua-o a uma variável.
Construímos uma sequência de 25 sublinhados, seguida de 5 espaços, e depois dividimos isso em uma matriz de caracteres. Nós o deslocamos circularmente um número aleatório de vezes (entre 1 e 30), juntamos novamente em uma sequência e aderimos a 5 novas linhas. Este processo é repetido n vezes, em que n é a entrada. A matriz resultante é unida e retornada.
Experimente aqui
fonte
PowerShell 65 bytes
Execute um loop para n iterações. Obtenha um número aleatório e faça uma sequência de sublinhado com 5 espaços no final. Índice na cadeia como uma matriz para puxar a partir de um local aleatório. A indexação negativa termina do final. Faça o backup novamente e acrescente 5 novas linhas.
Edit: Não sei por que pensei que precisava do parâmetro
-Maximum
, pois é posicional. Graças ao TimmyD , raspei alguns bytes e esqueci de obter informações, o que me levou de volta a 65.fonte
Pitão, 19 bytes
Experimente aqui
Obrigado a FryAmTheEggman por detectar um bug.
fonte
SpecBAS - 93 bytes
Cria uma sequência de 25 caracteres sublinhados + 5 espaços, escolhe um ponto de início aleatório e une a sequência nessa posição e alinha o início da sequência até o final.
O apóstrofo força uma nova linha, então 1 no final da sequência e 4 linhas vazias.
fonte
MATL , 23 bytes
Experimente online!
Explicação
fonte
Java,
177140 bytes-1 byte para Blue movendo o i ++
-2 bytes para mim, deixando espaço em branco sem sentido no original
-34 bytes para Blue para perceber que eu não precisava do char []
Porque, você sabe, Java.
Ligeiramente não destruído:
Como o Java não possui uma String 'rotate', tive que adotar uma abordagem diferente. Gerei um int aleatório 0-29 que representa o índice inicial do furo (OBO porque
>
é menor que>=
). Cada caractere individual é então decidido pela lógicaIsso lida com a natureza de "quebra automática" do todo.
fonte
s = ""
). Ambos estão consertados agora.Python 3,5 -
109113 bytes (+4 para imprimir 4 novas linhas entre cada resultado):Forma Não Goleada:
Basicamente, o que está acontecendo é que uma string 'j', consistindo em 25 sublinhado seguido por 5 espaços, é fornecida como argumento para a função "g". Em seguida, o módulo aleatório é importado e, quantas vezes for especificado pelo usuário, um número aleatório é escolhido no intervalo
0 => 29
e a sequência "j" é deslocada para a direita várias vezes. O resultado é impresso após cada iteração, com 4 novas linhas entre cada resultado.fonte
'\r'
para'\r'*4
provavelmente deve funcionar. Além disso, acho que você pode mudarrange(a+1)
pararange(a)
.range(a)
realmente imprime oa-1
número de linhas, assimrange(a+1)
é a melhor maneira de imprimir o número exato de linhas que o usuário fornece. Além disso, agora imprime 4 novas linhas entre cada resultado.g(5)
e imprime 6 strings em vez de cinco, então mudara+1
paraa
provavelmente conserta isso.Python,
119103 bytesfonte
n