Introdução:
Acho que todo mundo sabe o que é uma lâmpada de lava, mas, caso não saiba:
São basicamente tubos de vidro que contêm cera em um líquido translúcido. A parte inferior é aquecida quando a lâmpada é acesa, causando uma alteração na densidade e, portanto, a cera flutua para o topo. Quando esfria, cai novamente, causando o efeito que vemos acima.
Geralmente, leva de 45 a 60 minutos para que a base da lâmpada aumente a temperatura alta o suficiente para mudar a cera sólida para cera líquida (se a lâmpada estiver localizada em uma área à temperatura ambiente).
Mais informações na Wikipedia, que também é usada como fonte para alguns dos textos acima.
Desafio:
Dado um número inteiro positivo n
indicando a quantidade de minutos que passaram desde que ligamos a Lava Lamp, produza um estado aleatório da Lava Lamp com base em números inteiros em cinco níveis.
Para este desafio, diremos que a lâmpada de lava contém 1000 unidades de cera no total e temos cinco níveis em que a cera pode estar.
1) Se n
estiver abaixo de 45, a lâmpada de lava ainda está esquentando, portanto a saída será de quatro linhas vazias 1000
na parte inferior:
1000
2) Se n
estiver na faixa, [45, 60)
a Lava Lamp aumentou a temperatura o suficiente para a cera se movimentar, mas ainda não está muito alta. A cera pode atingir até e incluindo o terceiro nível.
3) Se n
for 60
superior ou superior, a cera pode estar em qualquer um dos cinco níveis.
Portanto, considerando o número inteiro positivo n
como entrada, produziremos um estado aleatório com as três regras acima em mente.
Aqui estão alguns exemplos de saídas:
Saídas possíveis para qualquer um n
que seja >= 45
:
523
106
371
913
87
Saídas possíveis para qualquer um n
que seja >= 60
:
73
113
312
5
497
284
55
637
24
Saída constante para n
isso é <= 44
(e saída possível para qualquer n
):
1000
Regras do desafio:
- Pode haver linhas vazias, mesmo que o nível acima dele não esteja vazio.
- Apenas
0
não é permitido em nenhuma linha. Em vez disso, deve estar vazio. - A saída é um pouco flexível. Você tem permissão para gerar uma lista / matriz de seqüências de caracteres / objetos em vez de um resultado delimitado por nova linha, como acima. A razão pela qual digo strings / objetos é devido à regra acima. Uma linha vazia deve ser
""
,null
,[]
, etc, mas não pode ser0
ou um número inteiro negativo (nem pode serfalse
) (Ie["", "", 913, "", 87]
paran >= 45
). Você também pode reverter a saída (ou seja, em1000\n\n\n\n
vez de\n\n\n\n1000
ou em[87, null, 913, null, null]
vez de[null, null, 913, null, 87]
). - Os números devem ser inteiros. Podem ser decimais com o
0
valor decimal, mas nenhum dos números deve ter dígitos decimais e os números inteiros devem sempre somar exatamente1000
. - Todas as saídas aleatórias possíveis com base em
n
devem ter uma chance diferente de zero. - É permitida uma nova linha à direita (portanto, existem seis linhas de saída).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
0
um número negativo oufalse
.n < 60
?n < 45
apenas 1 nível é preenchido no entanto (superior ou inferior, dependendo da ordem que você mostrar em), que é1000
. Com45 <= n < 60
três dos cinco e comn >= 60
todos os cinco. Mas a saída sempre conterá cinco 'linhas'.Respostas:
MathGolf ,
2120 bytesExperimente online!
Esta é a minha primeira resposta no meu novo idioma. Baseei minha solução na solução 05AB1E da Emigna, mas usei alguns recursos interessantes do MathGolf para torná-lo um pouco mais curto.
Explicação
fonte
Python 2 ,
117113108107106105 bytesExperimente online!
Retorna uma lista invertida (primeiro em baixo)
Versão inspirada na resposta do stackoverflow nos comentários (é mais provável que edgecases):
Python 2 , 129 bytes
Experimente online!
fonte
333
ou200
para os 3 ou 5 partes respectivamente. Não vejo picos / outliers em direção a0
ou1000
. Ou as chances são astronomicamente pequenas (mas ainda não nulas) em comparação com números inteiros próximos333
e200
?0
ou0-2
ou0-4
) e contada. As chances de nenhuma delas entrar lá estão lá, mas são muito pequenas.JavaScript (ES6), 78 bytes
Retorna uma matriz invertida onde os níveis vazios são preenchidos com um espaço.
Experimente online!
Comentado
fonte
R ,
8584 bytes-1 byte graças a @ Giuseppe
Experimente online!
Explicação (não destruída):
fonte
NA
for permitido como linha / elemento vazio, aqui está uma solução de 77 bytes ( Experimente online! ) Ou uma solução de 80 bytes ( Experimente online! ) Se os nomes dos elementos são um problemaC (gcc) ,
131,116,90,89, 87 bytesExperimente online!
Atualização : Corrigido um bug no original. Fundido na função auxiliar, reduzindo 15 bytes adicionais.
Atualização 2 : -25 bytes graças ao ErikF.
Atualização 3 : -1 byte, graças ao ceilingcat.
Degolf
fonte
puts()
combinando a impressão em uma únicaprintf()
e colocando a subtração no final do loop. Além disso, acho que você pode colocar asrand()
inicialização no chamador. Experimente online!05AB1E ,
272625 bytesGuardou um byte graças a Adnan . Guardou
outro byte graças a Kevin Cruijssen .
Experimente online!
Explicação
fonte
5Å0
eǝ
, eε0Û
no final. Eu tentei pensar em algo mais curto, mas não consigo. Tenho a sensação de que, de alguma forma, ainda posso jogar golfe, mas atualmente não estou vendo (talvez não possa e é apenas uma sensação aleatória).•A–•60в
é 1 byte mais longo do que em44 59‚
vez de mais curto. Eε0Û
substituir os0
por strings vazios também parece ser o mais curto possível, pois0K
simplesmente remove completamente os itens 0 e0м
remove qualquer dígito0
em todos os números.44 59‚
, mas não consigo encontrá-la (•H|•2ô
é a mesma contagem). Minha solução anterior (também 27 bytes) foi usada45
e60
é mais fácil de gerar de maneiras diferentes, mas acho que isso era inválido, pois produzia 1 , 3 ou 5 níveis, dependendo da entrada e nem sempre 5 .•H|•2ô
é de fato também uma maneira inteligente, não tinha pensado nisso. E de fato deve produzir 5 linhas. Eu realmente vi sua resposta anterior e estava prestes a comentar que ela só produziu 1 linha paran < 45
, mas você a excluiu. Que bom que você encontrou outra solução de 27 bytes. :)ŽH|2ô
que é o que você está procurando?JavaScript (Node.js) ,
8786 bytesExperimente online!
A solução de 83 bytes (
(n/15-2|0)*s<4
) é reservada primeiro porque eu preciso verificar se há maisn
.UPDATE: Sim,
(n/15-2|0)*s<4
não funcionou, porque para maiores,n
porquen
grandes o suficiente fazem com que a soma não atinja 1000.fonte
PHP, 92 bytes
Execute como pipe
-R
ou experimente online .fonte
Limpo , 215 bytes
Experimente online!
Então, eu finalmente encontrei um caminho mais curto para obter uma semente aleatória do que importar
System._Unsafe
,System.Time
e usandotoInt(accUnsafe time)
...E o menino é verdadeiramente no espírito do codegolf - Incorporação de uma chamada para C, ignorando o tipo de estado do mundo normalmente usado para garantir a avaliação ordem de tais coisas.
fonte
Java (JDK 10) ,
121117113111 bytesExperimente online!
É tendencioso para colocar mais cera perto do topo, mas é teoricamente possível que qualquer arranjo legal de cera apareça.
edit: 4 bytes foram salvos por @KevinCruijssen
Em Java legível por humanos:
fonte
Math.random()*(w+1)
pode serMath.random()*-~w
de -2 bytes. Aqui a dica relevante como referência do porquê. . Boa resposta! +1 de mim. EDIT: Na verdade, mais 2 bytes podem ser salvos usandoj
temporário como variável paraw+1
(já que ele será sobrescrito logo após a impressão) e use-oj*=Math.random()
para não precisar da conversão para(int)
( 117 bytes ).&i>2
condição não é necessáriaPowershell ,
188162 bytesExperimente online!
-2 bytes por @Kevin Cruijssen
-4 bytes removendo o opcional Get-verb
-20 bytes diminuindo o loop e removendo espaços
fonte
else{if($t-ne 1e3){Get-Random(1000-$t)}}
paraelseif($t-ne 1e3){Get-Random(1000-$t)}
? Vejo que você usou umelseif
código anterior no seu código, portanto, você deve economizar 2 bytes. Além disso, talvez Dicas para jogar golfe em Powershell ou Dicas para jogar golfe em <todos os idiomas> possam dar alguma inspiração para mais? Aproveite sua estadia! :)Pascal (FPC) ,
192190 bytesExperimente online!
Usando o método de embalagem em caixas pelo TFeld . Imprime a linha inferior primeiro com uma nova linha à direita.
Parece que o FPC não tem problemas com
random(0)
, então eu tenho alguns acréscimos incomuns lá.Meu envio original, jogou até 209 bytes:
Experimente online!
fonte
Carvão , 37 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Loop duas vezes, duas vezes. Alternativamente, eu poderia ter inteiro dividido o índice do loop por 2 para a mesma contagem de bytes.
Se o índice externo mais um décimo quinto da temperatura for superior a três ...
... empurre um número inteiro aleatório até e incluindo 1000 - a soma até o momento. Infelizmente, o carvão vegetal não pode calcular a soma de uma lista vazia, por isso tenho que substituir a string vazia.
Empurre a quantidade restante para a lista.
Converta a lista em string, mas use a string vazia em vez de zero.
fonte
Geléia , 28 bytes
Um programa completo imprimindo o resultado (de cabeça para baixo, como foi permitido).
Experimente online! - isto é alterado para usar emn > 59 uma lista de 1015 5 tuplas são criadas e depois filtradas, a partir da qual escolher)
7
vez deȷ
(1000) porque a implementação é lenta no golfe! (...paraQuão?
fonte
1000\n\n\n\n
, em vez de\n\n\n\n1000
ou[87, null, 913, null, null]
em vez de[null, null, 913, null, 87]
). " Então, sim, você está autorizado a usar a versão 28-byte sem aṚ
.Galho , 126 bytes
Este foi realmente um desafio divertido!
Este código cria uma macro que precisa ser importada.
Para importá-lo, faça o seguinte:
Isso deve fazer o truque.
Você pode experimentá-lo em https://twigfiddle.com/t4dfgy
Aviso : devido à página remover espaços em branco, fui forçado a adicionar um
-
no final da linha, para provar que está produzindo o número correto de linhas.Em uma instalação regular, você apenas veria as novas linhas sem problemas.
fonte
Perl 6 , 62 bytes
Experimente online!
Um bloco de código anônimo que pega uma string e retorna uma lista de números inteiros, com
Nil
ou uma lista vazia ([]
) no lugar de0
s.Explicação:
fonte
PHP ,
113108999793 bytesExperimente online!
-11 bytes graças a @titus
-9 bytes porque tudo é uma string
fonte
J ,
565554484340 bytesExperimente online!
-3 bytes graças ao FrownyFrog
Outro método conceitualmente interessante, que é um pouco mais longo, mas garante uma distribuição perfeitamente uniforme em todas as possibilidades, de acordo com o método aqui :
J , 53 bytes
Experimente online!
fonte
$!.a:
só{.
?PowerShell ,
11510598 bytes-17 bytes graças ao mazzy
Experimente online!
Um golfe da adorável resposta de Edwin . Se você gosta disso, faça um voto positivo.
fonte
Ruby ,
6255 bytesExperimente online!
Os testes são limitados a 0-99 graus, porque as lâmpadas de lava podem ser perigosas em temperaturas mais altas:
fonte
0
para as linhas vazias. As linhas de vazios na matriz pode ser qualquer coisa a não ser para0
,false
ou um número negativo. Assim pode sernull
,""
,[]
, etc., mas não0
. Não tenho certeza se o Ruby possui matrizes / listas de objetos para que você possa transformar os0
s em outra coisa, mas, caso contrário, será necessário imprimi-las em vez de retornar uma matriz / lista.