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 nindica 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 nestá 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 1000en la parte inferior:
1000
2) Si nestá 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 nes 60o mayor, la cera puede estar en cualquiera de los cinco niveles.
Entonces, dado el entero positivo ncomo entrada, generaremos un estado aleatorio con las tres reglas anteriores en mente.
Aquí hay algunos ejemplos de resultados:
Posibles salidas para cualquiera nque sea >= 45:
523
106
371
913
87
Posibles salidas para cualquiera nque sea >= 60:
73
113
312
5
497
284
55
637
24
Salida constante para neso 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
0no 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 ser0o un entero negativo (ni puede serfalse) (es decir["", "", 913, "", 87]paran >= 45). También puede invertir la salida (es decir, en1000\n\n\n\nlugar de\n\n\n\n1000o 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
0valor 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
ndeberí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.


0un número negativo ofalse.n < 60?n < 45sólo un 1 nivel está lleno sin embargo (superior o inferior dependiendo del orden de su emisión en), que es1000. Con45 <= n < 60tres de los cinco, y conn >= 60los 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
333o200para las 3 o 5 partes respectivamente. No veo picos / valores atípicos hacia0o1000. ¿O son las posibilidades para aquellos simplemente astronómicamente pequeños (pero aún no distintos de cero) en comparación con los enteros cercanos333y200?0o0-2o0-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
NAse 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Å0yǝ,ε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 las0s con cadenas vacías también parece ser lo más corto posible, ya que0Ksimplemente elimina los elementos 0 por completo y0мelimina cualquier dígito0en 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)45y60que 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<4no funcionó porque para más grandenporque lonsuficientemente grande hace que la suma no llegue a 1000.fuente
PHP, 92 bytes
Ejecutar como tubería
-Ro 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.Timey 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()*-~wde -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 usandojtemporal 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>2condició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 unaelseifanterior 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\nlugar de\n\n\n\n1000o 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
Nilo una lista vacía ([]) en lugar de0s.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
0para las líneas vacías. Las líneas vacías de la matriz pueden ser cualquier cosa excepto por0,falseo 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 los0s en otra cosa, pero si no, tendrá que imprimirlos en lugar de devolver una matriz / lista.