Ya sabes, se ven así:
El objetivo es dibujar una ilustración de ritmos musicales como la siguiente:
= = =
= = = = =
== = == = == = ====
== ==== == === = = =======
======== == ==== = ========= =
=================================
Las reglas son:
- El ancho de la ilustración es de 33 símbolos, pero si es necesario, se permiten los espacios finales que excedan este ancho.
- Cada columna está hecha de signos iguales (
=
). - Cada columna tiene una altura aleatoria (la altura de la siguiente columna no debe depender de ninguna manera de la altura de la columna anterior), que varía de 1 a 6. También está bien si al menos es posible obtener alguna entrada sin estricta probabilidad matemática (es decir, algunas entradas podrían aparecer más raramente que otras).
- Una columna no puede flotar sobre la parte inferior y tiene huecos.
- Como cada columna tiene la altura mínima de 1, la última fila tampoco puede tener espacios, siempre consta de 33 signos iguales.
- Dado que es posible no tener columnas con una altura de 6 (después de todo, todo es aleatorio): en este caso no necesita tener una línea superior hecha de espacios. Se aplica a cualquier caso de borde de esta naturaleza: si de repente su código no proporcionó columnas con una altura mayor que 1, no necesita tener líneas adicionales hechas de espacios sobre la línea inferior.
- No tomas ninguna entrada .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
)Math.random()
es directamente calculable a partir de su llamada anterior si se conocen los parámetros del generador congruencial lineal, lo que significa que tendría que modificar la mayoría de las funciones aleatorias incorporadas para cumplir con este criterio. Sugiero que esto está mejor redactado.Respuestas:
Pyth , 13 bytes
Y superé a Jelly .
Pruébalo en línea!
fuente
Dyalog APL , 14 bytes
Explicación
33⍴6
33 repeticiones de 6?
entero aleatorio en el rango [1, n ] para cada uno de los 33 6s'='⍴¨⍨
símbolo de igualdad repetido cada una de esas veces↑
convertir lista de listas a tabla de filas⍉
transponer filas en columnas, columnas en filas⊖
voltear al revésEjecuciones de ejemplo
La entrada tiene sangría en seis espacios:
fuente
Jalea, 14 bytes
Pruébalo aquí
fuente
6ṗ33X
funciona.JavaScript (ES6), 116 bytes
Compruébalo en el fragmento animado a continuación:
fuente
C, 87 bytes
Llamar como
f();
. Esta respuesta se basa en el hecho de que seis llamadas consecutivastime(0)
devuelven el mismo resultado (en segundos). Esto es prácticamente siempre cierto, pero probablemente valga la pena mencionarlo.fuente
x
yy
para evitar declararlos comoint
. Como no hay entrada, ¿está permitido? Si es así, ¡es una buena idea!f();
Eso es bueno! No sabía que C puede hacer eso.Cheddar,
6865 bytes (no competidor)¡O_O Cheddar está realmente bien! Usos
sprintf
yturn
para hacer una gran parte del trabajo.vfuse
es fusible vertical, lo que significa que se une a la matriz pero verticalmente. Esto es muy golfístico pero también bastante rápido. La versión es la versión preliminar 1.0.0-beta.10 , que es posterior al desafío.Explicación
Algunos ejemplos se ejecutan:
fuente
05AB1E , 22 bytes
Sin unión automática, sin relleno automático durante la transposición, osabie está condenada a esto. Código:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Python 2, 95 bytes
fuente
Python 3, 115 bytes
Python nunca tuvo la oportunidad ...
Cómo funciona
Pruébalo en Ideone
fuente
MATL,
20191817 bytes1 byte guardado gracias a @Luis
Pruébalo en línea
fuente
SpecaBAS - 76 bytes
Imprime un signo igual en la coordenada de pantalla correspondiente.
con una mancha de color y un
GOTO
bucle se conviertefuente
K4, 18 bytes
Esencialmente un puerto de la solución APL (como era de esperar).
fuente
C #,
200117 bytes¡Me muevo al algoritmo @Lynn y guardo 83 bytes!
C # lambda sin entrada y donde la salida es una cadena. Pruébalo en línea .
Código:
fuente
Haskell, 164 bytes
Al ser un lenguaje puramente funcional, Haskell estaba condenado desde el principio. Lo hice de todos modos y resulta que la sobrecarga necesaria en realidad no es tan grande.
Uso:
Explicación:
para poder usar
newStdGen
yrandoms
para poder usar
transpose
define una función que imprime un espacio si su primer argumento es mayor que el segundo y un valor distinto
=
. Se llama conmap (f m) [0..5]
un número dadom
y la lista[0,1,2,3,4,5]
. (Vea abajo)Crea un nuevo generador de números aleatorios estándar
toma 33 enteros aleatorios.
Calcula
m = n % 6
y asigna(f m)
a la lista[0,1,2,3,4,5]
, lo que resulta en uno de"======", " =====", ..., " ="
. Estas líneas se asignan a la lista de los 33 enteros aleatorios que dan como resultado una tabla. (Una tabla en Haskell es una lista de listas)cambia columnas y filas de la tabla
imprime cada línea en la tabla
fuente
CJam, 19 bytes
Pruébalo en línea!
Explicación
fuente
Mathematica, 78 bytes
Función anónima. No realiza ninguna entrada y devuelve una cadena como salida. El carácter Unicode es U + F3C7, que representa
\[Transpose]
.fuente
R, 102 bytes
Explicación
m=rep(" ",33)
iniciar un vector vacío para el próximo ciclon=ifelse(m=="=",m,sample(c(" ","="),33,T,c(6-i,i)))
Si hay un=
en la fila de arriba, entonces asegúrese de que el punto de abajo también tenga un=
; de lo contrario elegir al azar. Las selecciones aleatorias se ponderan para asegurarse de que a) la fila inferior sea todo=
yb) tenga una forma ordenada de todo.cat(n,"\n",sep="")
¡envíe esa fila a la consola con una nueva línea al final y sin espacios entre los elementos!fuente
PHP,
959289 bytesBastante feliz con este en realidad. Durante un tiempo tuve una versión que en teoría podría generar cualquier entrada, pero en la práctica solo generaría bloques sólidos de = ¡pero esto es más corto e igualmente distribuido!
Genera 7 avisos de algo indefinido cada vez que lo ejecutas, pero está bien.
edit: bueno, acabo de enterarme de que join es un alias de implode, así que está bien.
fuente
J, 18 bytes
Cosas muy simples. Con una corrección de errores de millas!
fuente
>:?33#6
para obtener enteros aleatorios en el rango [1, 6]. Además, una copia de rango 0 sería más corta usando'='#~"0
. Esto da como resultado,|.|:'='#~"0>:?33#6
pero desafortunadamente, los ahorros de 2 bytes terminan siendo mitigados por la inclusión del operador de incremento.Perl, 64 bytes
Uso
Perl, 68 bytes
Versión alternativa que se basa en códigos de escape ANSI para mover el cursor, primero bajando 6 líneas, luego escribiendo la línea original (todas las
=
s), moviendo una línea hacia arriba e imprimiendo la cadena reemplazada (s/=/rand>.4?$&:$"/ge
) repetidamente hasta que no haga más sustituciones. Esto puede terminar escribiendo más de seis líneas, pero eventualmente se reemplaza con una línea vacía.Nota: los
\x1b
s son en realidad el Esccarácter ASCII .fuente
Rubí,
102998483 bytesEnfoque nuevo y significativamente más corto, donde comienzo con una cadena llena de nuevas líneas.
Versión antigua...
... dio salida con una nueva línea líder. Mi primera presentación en Ruby, usando un enfoque similar al de @ Barbarroja, pero en un solo ciclo.
Lo que me gustó de Ruby mientras trabajaba en este programa:
.times
lazorand()
que es bastante cortoNo me gustó (principalmente en términos de golf):
obligatoriono tan obligatorio en$
para variables globales.times
bucleque se puede reemplazar con un bloque de una sola líneado
yend
palabras clave0
no es falsofuente
JavaScript, 179 bytes
Todavía estoy trabajando en esto un poco. Me gusta esto ya que es sencillo.
Uso:
fuente
.map(n=>{return Math.floor(Math.random() * 6)+1})
con.map(n=>Math.floor(Math.random()*6)+1)
. Lambda are greats :)if (n<=m+1){r[m]+="="}else
puede serif(n<=m+1)r[m]+="=" else
Adelante, 190 bytes
Tuve que crear mi propio PRNG , un cambio xor tomado de aquí . La palabra
f
es la palabra que llamaría varias veces para ver la salida.Pruébelo en línea : tenga en cuenta que la hora del sistema es uno de los dos valores según el servidor (o algo) que ejecuta el código. Aparte de eso, no cambian en el IDE en línea por alguna razón. Entonces solo verá dos salidas posibles. Puede establecer manualmente la semilla cambiando
utime
a un número entero.Sin golf
Ungolfed en línea
fuente
JavaScript, 165 bytes
Las nuevas líneas son innecesarias, pero hacen que sea más fácil ver lo que está sucediendo. No es la solución más óptima, pero tiene sentido al menos para mí.
fuente