Introducción:
Creo que todos saben lo que es una lámpara de lava, pero en caso de que no:
Básicamente son tubos de vidrio que contienen cera en un líquido translúcido. La parte inferior se calienta cuando se enciende la lámpara, lo que provoca un cambio de densidad y, por lo tanto, la cera flota hacia la parte superior. Cuando se enfría, vuelve a caer, causando el efecto que vemos arriba.
Por lo general, la base de la lámpara tarda entre 45 y 60 minutos en alcanzar una temperatura lo suficientemente alta como para cambiar la cera sólida a cera líquida (si la lámpara se encuentra en un área a temperatura ambiente).
Desafío:
Dado un número entero positivo que n
indica la cantidad de minutos que han pasado desde que encendimos la lámpara de lava, genera un estado aleatorio de la lámpara de lava basado en enteros en cinco niveles.
Para este desafío, diremos que la lámpara de lava contiene 1000 unidades de cera en total, y tenemos cinco niveles donde puede estar la cera.
1) Si n
está por debajo de 45, la lámpara de lava todavía se está calentando, por lo que la salida será de cuatro líneas vacías con 1000
en la parte inferior:
1000
2) Si n
está dentro del rango, [45, 60)
la lámpara de lava ha aumentado su temperatura lo suficiente como para que la cera se mueva, pero aún no muy alta. La cera puede alcanzar hasta el tercer nivel inclusive.
3) Si n
es 60
o mayor, la cera puede estar en cualquiera de los cinco niveles.
Entonces, dado el entero positivo n
como entrada, generaremos un estado aleatorio con las tres reglas anteriores en mente.
Aquí hay algunos ejemplos de resultados:
Posibles salidas para cualquiera n
que sea >= 45
:
523
106
371
913
87
Posibles salidas para cualquiera n
que sea >= 60
:
73
113
312
5
497
284
55
637
24
Salida constante para n
eso es <= 44
(y salida posible para cualquiera n
)
1000
Reglas de desafío:
- Puede haber líneas vacías, aunque el nivel superior no esté vacío.
- Simplemente
0
no está permitido en ninguna línea. Debería estar vacío en su lugar. - La salida es algo flexible. Se le permite generar una lista / matriz de cadenas / objetos en lugar de un resultado delimitado por una nueva línea como se indicó anteriormente. La razón por la que digo cadenas / objetos se debe a la regla anterior. Una línea de vacío debe ser
""
,null
,[]
, etc., pero no puede ser0
o un entero negativo (ni puede serfalse
) (es decir["", "", 913, "", 87]
paran >= 45
). También puede invertir la salida (es decir, en1000\n\n\n\n
lugar de\n\n\n\n1000
o en[87, null, 913, null, null]
lugar de[null, null, 913, null, 87]
). - Los números deben ser todos enteros. Pueden ser decimales con un
0
valor decimal, pero ninguno de los números debe tener dígitos decimales, y los enteros siempre deben sumar exactamente1000
. - Todas las salidas aleatorias posibles basadas en
n
deberían tener una probabilidad distinta de cero de ocurrir. - Se permite una nueva línea final (por lo que hay seis líneas de salida).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, se recomienda agregar una explicación para su respuesta.
0
un número negativo ofalse
.n < 60
?n < 45
sólo un 1 nivel está lleno sin embargo (superior o inferior dependiendo del orden de su emisión en), que es1000
. Con45 <= n < 60
tres de los cinco, y conn >= 60
los cinco. Pero la salida siempre contendrá cinco 'líneas'.Respuestas:
MathGolf ,
2120 bytesPruébalo en línea!
Esta es mi primera respuesta en mi nuevo idioma. Basé mi solución en la solución 05AB1E de Emigna, pero usé algunas características interesantes de MathGolf para hacerlo un poco más corto.
Explicación
fuente
Python 2 ,
117113108107106105 bytesPruébalo en línea!
Devuelve una lista invertida (primero en la parte inferior)
Versión inspirada en la respuesta de stackoverflow en los comentarios (es más probable que las mayúsculas y minúsculas):
Python 2 , 129 bytes
Pruébalo en línea!
fuente
333
o200
para las 3 o 5 partes respectivamente. No veo picos / valores atípicos hacia0
o1000
. ¿O son las posibilidades para aquellos simplemente astronómicamente pequeños (pero aún no distintos de cero) en comparación con los enteros cercanos333
y200
?0
o0-2
o0-4
), y se contaron. Las posibilidades de que ninguno de los dos ingrese tampoco están allí, pero son muy pequeñas.JavaScript (ES6), 78 bytes
Devuelve una matriz invertida donde los niveles vacíos se llenan con un espacio.
Pruébalo en línea!
Comentado
fuente
R ,
8584 bytes-1 byte gracias a @Giuseppe
Pruébalo en línea!
Explicación (sin golf):
fuente
NA
se permite como línea / elemento vacío, aquí hay una solución de 77 bytes (¡ Pruébelo en línea! ) O una solución de 80 bytes (¡ Pruébelo en línea! ) Si los nombres de los elementos son un problemaC (gcc) ,
131,116,90,89, 87 bytesPruébalo en línea!
Actualización : se corrigió un error en el original. Fusionada en la función auxiliar, reduciendo 15 bytes adicionales.
Actualización 2 : -25 bytes gracias a ErikF.
Actualización 3 : -1 byte gracias a ceilingcat.
Degolf
fuente
puts()
combinando la impresión en una solaprintf()
y colocando la resta en el extremo del bucle. Además, creo que puedes poner lasrand()
inicialización en la persona que llama. Pruébalo en línea!05AB1E ,
272625 bytesSalvó un byte gracias a Adnan .
Salvó otro byte gracias a Kevin Cruijssen .
Pruébalo en línea!
Explicación
fuente
5Å0
yǝ
,ε0Û
al final. Traté de llegar a algo más corto, pero no puedo. Tengo la sensación de que de alguna manera todavía se puede jugar golf, pero actualmente no lo estoy viendo (tal vez no se puede y es solo una sensación al azar).•A–•60в
es 1 byte más largo que en44 59‚
lugar de más corto. Yε0Û
reemplazar las0
s con cadenas vacías también parece ser lo más corto posible, ya que0K
simplemente elimina los elementos 0 por completo y0м
elimina cualquier dígito0
en todos los números.44 59‚
, pero no puedo encontrarla (•H|•2ô
es el mismo recuento). Utilicé mi solución anterior (también 27 bytes)45
y60
que son más fáciles de generar de diferentes maneras, pero creo que no era válida ya que generaba 1 , 3 o 5 niveles dependiendo de la entrada y no siempre 5 .•H|•2ô
hecho también es una forma inteligente, no había pensado en eso. Y de hecho debería generar 5 líneas. De hecho, vi su respuesta anterior y estaba a punto de comentar que solo generó 1 línean < 45
, pero luego la eliminó. Me alegro de que hayas encontrado otra solución de 27 bytes. :)ŽH|2ô
es lo que estás buscando?JavaScript (Node.js) ,
8786 bytesPruébalo en línea!
La solución de 83 bytes (
(n/15-2|0)*s<4
) se reserva primero porque necesito verificar si es más granden
.ACTUALIZACIÓN: Sí,
(n/15-2|0)*s<4
no funcionó porque para más granden
porque lon
suficientemente grande hace que la suma no llegue a 1000.fuente
PHP, 92 bytes
Ejecutar como tubería
-R
o probarlo en línea .fuente
Limpio , 215 bytes
Pruébalo en línea!
Así que finalmente encontré una forma más corta de obtener una semilla aleatoria que la importación
System._Unsafe
,System.Time
y usandotoInt(accUnsafe time)
...Y vaya, realmente está en el espíritu de codegolf: incrustar una llamada a C, ignorando el tipo de estado mundial normalmente utilizado para garantizar la evaluación orden de tales cosas.
fuente
Java (JDK 10) ,
121117113111 bytesPruébalo en línea!
Está sesgado a poner más cera cerca de la parte superior, pero es teóricamente posible que aparezca cualquier disposición legal de cera.
editar: 4 bytes fueron guardados por @KevinCruijssen
En Java legible para humanos:
fuente
Math.random()*(w+1)
puede serMath.random()*-~w
de -2 bytes. Aquí el consejo relevante como referencia de por qué. . ¡Buena respuesta! +1 de mi parte EDITAR: en realidad, se pueden guardar 2 bytes más usandoj
temporal como variable paraw+1
(ya que se sobrescribirá inmediatamente después de la impresión de todos modos) y usarj*=Math.random()
en su lugar para que no necesite la conversión a(int)
( 117 bytes ).&i>2
condición no es necesariaPowershell ,
188162 bytesPruébalo en línea!
-2 bytes por @Kevin Cruijssen
-4 bytes eliminando Get-verb opcional
-20 bytes acortando el bucle y eliminando espacios
fuente
else{if($t-ne 1e3){Get-Random(1000-$t)}}
aelseif($t-ne 1e3){Get-Random(1000-$t)}
? Veo que has usado unaelseif
anterior en tu código, así que esto debería ahorrarte 2 bytes. Además, ¿tal vez las sugerencias para jugar al golf en Powershell o las sugerencias para jugar al golf en <todos los idiomas> podrían inspirar más? ¡Disfruta tu estancia! :)Pascal (FPC) ,
192190 bytesPruébalo en línea!
Usando el método de empaque en contenedores por TFeld . Imprime la fila inferior primero con una nueva línea final.
Parece que FPC no tiene problemas
random(0)
, por lo que tengo algunas adiciones inusuales allí.Mi presentación original, bajó a 209 bytes:
Pruébalo en línea!
fuente
Carbón , 37 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Bucle dos veces, dos veces. Alternativamente, podría tener un número entero dividido el índice de bucle por 2 para el mismo recuento de bytes.
Si el índice externo más una decimoquinta parte de la temperatura es mayor que tres ...
... luego empuje un entero aleatorio hasta 1000 inclusive, la suma hasta ahora. Lamentablemente, el carbón no puede calcular la suma de una lista vacía, por lo que tengo que sustituir la cadena vacía.
Empuje la cantidad restante a la lista.
Convierta la lista a cadena, pero use la cadena vacía en lugar de cero.
fuente
Jalea , 28 bytes
Un programa completo que imprime el resultado (al revés, como se ha permitido).
7
ȷ
¿Cómo?
fuente
1000\n\n\n\n
lugar de\n\n\n\n1000
o en[87, null, 913, null, null]
lugar de[null, null, 913, null, 87]
) " . Entonces sí, puede usar la versión de 28 bytes sin elṚ
.Ramita , 126 bytes
¡Este fue un desafío realmente divertido!
Este código crea una macro que debe importarse.
Para importarlo, solo haz esto:
Esto debería funcionar.
Puede probarlo en https://twigfiddle.com/t4dfgy
Aviso : debido a que la página elimina espacios en blanco, me vi obligado a agregar un
-
al final de la línea, para demostrar que está produciendo el número correcto de líneas.En una instalación regular, solo vería las nuevas líneas sin problemas.
fuente
Perl 6 , 62 bytes
Pruébalo en línea!
Un bloque de código anónimo que toma una cadena y devuelve una lista de enteros, con
Nil
o una lista vacía ([]
) en lugar de0
s.Explicación:
fuente
PHP ,
113108999793 bytesPruébalo en línea!
-11 bytes gracias a @titus
-9 bytes porque todo es una cadena
fuente
J ,
565554484340 bytesPruébalo en línea!
-3 bytes gracias a FrownyFrog
Otro método conceptualmente agradable que es un poco más largo pero garantiza una distribución perfectamente uniforme sobre todas las posibilidades, según el método aquí :
J , 53 bytes
Pruébalo en línea!
fuente
$!.a:
solo{.
?PowerShell ,
11510598 bytes-17 bytes gracias a mazzy
Pruébalo en línea!
Un golf de la encantadora respuesta de Edwin . Si te gusta esto, vótalo.
fuente
Ruby ,
6255 bytesPruébalo en línea!
Las pruebas están limitadas a 0-99 grados, porque las lámparas de lava podrían ser peligrosas a temperaturas más altas:
fuente
0
para las líneas vacías. Las líneas vacías de la matriz pueden ser cualquier cosa excepto por0
,false
o un número negativo. Así que puede sernull
,""
,[]
, etc, pero no0
. No estoy seguro de si Ruby tiene matrices / listas de objetos para que pueda transformar los0
s en otra cosa, pero si no, tendrá que imprimirlos en lugar de devolver una matriz / lista.