Você sabe - eles ficam assim:
O objetivo é desenhar uma ilustração de batidas de música como a seguinte:
= = =
= = = = =
== = == = == = ====
== ==== == === = = =======
======== == ==== = ========= =
=================================
As regras são:
- A largura da ilustração é de 33 símbolos, mas se você precisar, são permitidos espaços à direita que excedam essa largura.
- Cada coluna é composta de sinais de igual (
=
). - Cada coluna tem uma altura aleatória (a altura da próxima coluna não deve depender de forma alguma da altura da coluna anterior), variando de 1 a 6. Também é bom se for pelo menos possível obter alguma entrada sem nenhuma restrição estrita. probabilidade matemática (ou seja, algumas entradas podem aparecer mais raramente do que outras).
- Uma coluna não pode flutuar acima da parte inferior e ter lacunas.
- Como todas as colunas têm a altura mínima de 1, a última linha também não pode ter espaços - ela sempre consiste em 33 sinais de igual.
- Como é possível não ter colunas com a altura de 6 (afinal é tudo aleatório): nesse caso, você não precisa ter uma linha superior feita de espaços. Aplica-se a todos os casos de borda dessa natureza: se de repente seu código não fornecer colunas com altura maior que 1, você não precisará ter linhas adicionais feitas de espaços acima da linha inferior.
- Você não recebe nenhuma entrada .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
) #Math.random()
é diretamente calculável a partir de sua chamada anterior se os parâmetros do gerador congruencial linear forem conhecidos, o que significa que você precisaria modificar a maioria das funcionalidades aleatórias incorporadas para atender a esse critério. Eu sugiro que isso seja melhor formulado.Respostas:
Pitão , 13 bytes
E eu superei Jelly .
Experimente online!
fonte
Dyalog APL , 14 bytes
Explicação
33⍴6
33 repetições de 6?
número inteiro aleatório no intervalo [1, n ] para cada um dos 33 6s'='⍴¨⍨
símbolo de igualdade repetiu cada um desses números de vezes↑
converter lista de listas em tabela de linhas⍉
transpor linhas para colunas, colunas para linhas⊖
virar de cabeça para baixoExecuções de exemplo
A entrada é recuada seis espaços:
fonte
Gelatina, 14 bytes
Experimente aqui.
fonte
6ṗ33X
funciona também.JavaScript (ES6), 116 bytes
Confira no snippet animado abaixo:
fonte
C, 87 bytes
Ligar como
f();
. Esta resposta se baseia no fato de que seis chamadas consecutivastime(0)
retornam o mesmo resultado (em segundos). Isso é quase sempre verdade, mas provavelmente vale a pena mencionar.fonte
x
ey
evita declará-los comoint
. Como não há entrada, isso é permitido? Se sim, é uma boa ideia!f();
Isso é legal! Eu não sabia que C pode fazer isso.Cheddar,
6865 bytes (não concorrente)O_O Cheddar está realmente indo bem! Usa
sprintf
eturn
faz a maior parte do trabalho.vfuse
é fusível vertical, o que significa que se junta à matriz, mas verticalmente. Isso é muito golfe, mas também bastante rápido. A versão é pré-lançamento v 1.0.0-beta.10 , que pós-data do desafio.Explicação
Alguns exemplos são executados:
fonte
05AB1E , 22 bytes
Sem união automática, sem preenchimento automático durante a transposição, o osabie está condenado a este. Código:
Usa a codificação CP-1252 . Experimente online! .
fonte
Python 2, 95 bytes
fonte
Python 3, 115 bytes
Python nunca teve uma chance ...
Como funciona
Experimente no Ideone
fonte
MATL,
20191817 bytes1 byte salvo graças a @Luis
Experimente Online
fonte
SpecaBAS - 76 bytes
Imprime um sinal de igual na coordenada da tela relevante.
com uma mancha de cor e um
GOTO
laço torna-sefonte
K4, 18 bytes
Essencialmente, uma porta da solução APL (sem surpresa).
fonte
C #,
200117 bytesPasso para o algoritmo @Lynn e salvo 83 bytes!
C # lambda sem entrada e em que output é uma string. Experimente online .
Código:
fonte
Haskell, 164 bytes
Sendo uma linguagem puramente funcional, Haskell estava condenado desde o início. Fiz de qualquer maneira e, ao que parece, a sobrecarga necessária não é realmente tão grande.
Uso:
Explicação:
para poder usar
newStdGen
erandoms
poder usar
transpose
define uma função que imprime um espaço se seu primeiro argumento for maior que o segundo e um
=
caso contrário. É chamado commap (f m) [0..5]
um determinado númerom
e a lista[0,1,2,3,4,5]
. (Ver abaixo)Cria um novo gerador de números aleatórios padrão
leva 33 números aleatórios.
Calcula
m = n % 6
e mapeia(f m)
para a lista[0,1,2,3,4,5]
, que resulta em um dos"======", " =====", ..., " ="
. Essas linhas são mapeadas para a lista dos 33 números inteiros aleatórios resultando em uma tabela. (Uma tabela em Haskell é uma lista de listas)alterna colunas e linhas da tabela
imprime todas as linhas da tabela
fonte
CJam, 19 bytes
Experimente online!
Explicação
fonte
Mathematica, 78 bytes
Função anônima. Não recebe entrada e retorna uma string como saída. O caractere Unicode é U + F3C7, representando
\[Transpose]
.fonte
R, 102 bytes
Explicação
m=rep(" ",33)
init um vetor vazio para o próximo loopn=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)))
Se houver um=
na linha acima, verifique se o local abaixo também possui um=
; caso contrário, escolha aleatoriamente. As escolhas aleatórias são ponderadas para garantir que a) a linha inferior seja toda=
eb) você tenha uma forma elegante para a coisa toda.cat(n,"\n",sep="")
imprima essa linha no console com uma nova linha no final e sem espaços entre os elementos!fonte
PHP,
959289 bytesMuito feliz com este, na verdade. Por um tempo, tive uma versão que, em teoria, poderia gerar qualquer entrada, mas na prática geraria apenas blocos sólidos de =, mas isso é mais curto e igualmente distribuído!
Gera 7 algo indefinido, percebe sempre que você o executa, mas tudo bem.
edit: bem, eu acabei de aprender que join é um apelido de implode, então isso é legal.
fonte
J, 18 bytes
Coisas muito simples. Com um bugfix de milhas!
fonte
>:?33#6
para obter números inteiros aleatórios no intervalo [1, 6]. Além disso, uma cópia de classificação 0 seria mais curta usando'='#~"0
. Isso resulta,|.|:'='#~"0>:?33#6
mas infelizmente, a economia de 2 bytes acaba sendo mitigada pela inclusão do operador de incremento.Perl, 64 bytes
Uso
Perl, 68 bytes
Versão alternativa que depende dos códigos de escape ANSI para mover o cursor, primeiro descendo 6 linhas e depois escrevendo a linha original (todos
=
), movendo uma linha para cima e imprimindo a sequência substituída (s/=/rand>.4?$&:$"/ge
) repetidamente até que não faça mais substituições. Isso pode acabar escrevendo mais de seis linhas, mas é substituído por uma linha vazia.Nota:
\x1b
s são realmente o Esccaractere ASCII .fonte
Rubi,
102998483 bytesAbordagem nova e significativamente mais curta, onde começo com uma sequência cheia de novas linhas.
Versão mais antiga ...
... deu saída com a nova linha líder. Minha primeira submissão em Ruby, usando abordagem semelhante à do @ Barbarossa, mas em loop único.
O que eu gostei em Ruby enquanto trabalhava neste programa:
.times
laçorand()
o que é bem curtoNão gostei (principalmente em termos de golfe):
obrigatórionão é tão obrigatório em$
para variáveis globais.times
loopque pode ser substituído por um bloco de linha únicado
eend
palavras - chave0
não é falsofonte
JavaScript, 179 bytes
Ainda trabalhando um pouco nisso. Eu gosto disso, pois é simples.
Uso:
fonte
.map(n=>{return Math.floor(Math.random() * 6)+1})
por.map(n=>Math.floor(Math.random()*6)+1)
. Lambda são grandes :)if (n<=m+1){r[m]+="="}else
pode serif(n<=m+1)r[m]+="=" else
Quarto, 190 bytes
Eu tive que criar meu próprio PRNG , um xor-shift tirado daqui . A palavra
f
é a palavra que você chamaria várias vezes para ver a saída.Experimente online - Observe que a hora do sistema é um dos dois valores com base em qual servidor (ou algo) está executando o código. Fora isso, eles não mudam no IDE online por algum motivo. Então você verá apenas duas saídas possíveis. Você pode definir manualmente a semente alterando
utime
para um número inteiro.Ungolfed
Ungolfed online
fonte
JavaScript, 165 bytes
As novas linhas são desnecessárias, mas facilitam a visualização do que está acontecendo. Não é a solução mais ideal, mas pelo menos faz sentido para mim.
fonte