¡Soy músico y necesito más polirritmos en mi vida!
Se produce una polirritmia en la música (y en la naturaleza) cuando ocurren dos eventos (aplausos, notas, luciérnagas, etc.) en dos intervalos regulares diferentes. Los dos tipos de eventos ocurren una cantidad diferente de veces en el mismo intervalo.
Si toco con la mano izquierda dos veces y con la mano derecha 3 veces, en el mismo espacio de tiempo, se ve un poco así:
------
R . . .
L . .
Los guiones en la parte superior denotan la longitud del patrón polítmico, que es el múltiplo común más bajo o 2 y 3. Esto puede entenderse como el punto en el que se repite el patrón.
También hay un 'metarritmo', que es el patrón producido cuando cualquiera de las manos toca:
------
R . . .
L . .
M . ...
Esta es una polirritmia simple y muy común, con una proporción de 3: 2.
Digamos que no quiero hacer una simple polirritmia que pueda resolver en mi cabeza, así que necesito algo para resolverlo por mí. Podría hacerlo en formato largo en papel, o ...
Reglas:
- Escriba un código para generar y mostrar un diagrama de polirritmia, como se describió anteriormente.
- Cualquier idioma antiguo, intente con la menor cantidad de bytes.
- Su código toma dos argumentos:
- Número de toques con la mano izquierda (entero positivo)
- Número de toques con la mano derecha (entero positivo)
- Resolverá la longitud, que es el múltiplo común más bajo para los dos argumentos.
- La línea superior constará de dos caracteres de espacio en blanco seguidos de guiones que muestran la longitud (longitud * '-')
- La segunda y tercera líneas mostrarán el patrón para las manos derecha e izquierda:
- Comenzará con una R o L, denote qué mano es, seguido de un espacio.
- El intervalo para esa mano es la longitud dividida por su argumento.
- Los toques comenzarán en el tercer carácter, denotado por cualquier personaje que elija. A partir de entonces, mostrará los mismos caracteres de 'intervalo' de caracteres separados.
- No será más largo que la línea de longitud.
- La cuarta línea es el metarritmo:
- Comenzará con una M mayúscula, seguida de un espacio.
- A partir del tercer personaje, mostrará un personaje (cualquier personaje que elija) en cada posición donde haya un toque en la mano derecha o izquierda.
- El espacio en blanco al final es irrelevante.
Casos de prueba:
r = 3, l = 2
------
R . . .
L . .
M . ...
r = 4, l = 3
------------
R . . . .
L . . .
M . .. . ..
r = 4, l = 5
--------------------
R . . . .
L . . . . .
M . .. . . . ..
r = 4, l = 7
----------------------------
R . . . .
L . . . . . . .
M . . .. . . . .. .
r = 4, l = 8
--------
R . . . .
L ........
M ........
¡Feliz golf!
r
yl
como dos valores separados? ¿Podríamos aceptar una matriz de dos elementos, por ejemplo? ¿Qué tal el orden de ellos, es estrictamenter
seguidol
?Respuestas:
JavaScript (ES6), 131 bytes
Salidas
0
como el carácter de tap .Pruébalo en línea!
¿Cómo?
Utilizamos la misma función auxiliar para dos propósitos diferentes.sol( )
fuente
Java 11
226234233219 bytesTipo de largo; lástima que Java no tenga una
lcm()
función. Pruébelo en línea aquí (TIO todavía no tiene Java 11, por lo que utiliza un método auxiliar en lugar deString.repeat()
).Mi versión inicial tomó el intervalo entre toques en lugar del número de toques. Corregido ahora. Gracias a Kevin Cruijssen por jugar al golf 1 byte.
Sin golf:
fuente
?".":" "
a?'.':32
.Python 2 ,
187185183174166156148147145 bytesUsos
-
como el personaje de tapPruébalo en línea!
Salvado:
fuente
[i%(w/y)and i%(w/z)>0]
podría ser[i%(w/y)!=0<i%(w/z)]
.Perl 6 ,
858078 bytes-2 bytes gracias a Jo King.
Pruébalo en línea!
Devuelve una lista de cuatro líneas.
fuente
Python 2 ,
185 228 223 234249 bytesPruébalo en línea!
fuente
r=4, l=8
funciona bien para mí15,25
, da375
, pero debería ser75
.i%r+i%l+0**i<1
. Además, puede eliminar versiones anteriores del código, ya que se conservarán en su historial de edición de cualquier persona que quiera verlasJalea , 32 bytes
Pruébalo en línea!
Toma la entrada como una lista
[L,R]
.fuente
C (gcc), 204 bytes
Puerto de mi respuesta Java . Llamada con
f(number_of_right_hand_taps, number_of_left_hand_taps)
. Pruébelo en línea aquí .fuente
Pyth, 53 bytes
Definitivamente espacio para golf. Lo haré cuando tenga tiempo.
Pruébalo aquí
Explicación
fuente
C # (compilador interactivo de Visual C #) , 254 bytes
Golfed Pruébalo en línea!
Sin golf
Código completo
Lanzamientos
254 bytes
- Solución inicial.Notas
fuente
Carbón , 52 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Calcule el MCM de las entradas tomando el primer múltiplo de
R
que es divisible porL
.Imprima el LCM, que genera automáticamente la fila necesaria de
-
s. Luego, mueva para imprimir el ritmo de derecha a izquierda.Pase los números del LCM hacia abajo hasta 0 y cree una serie de listas que representen los latidos de las manos derecha e izquierda.
Recorre los ritmos y agrega el metarritmo.
Imprima los latidos invertidos hacia abajo, pero como se trata de una matriz, terminan hacia la izquierda.
Imprime el encabezado.
fuente
Rubí ,
130126 bytesPruébalo en línea!
fuente
Python 2 , 117 bytes
Pruébalo en línea!
fuente
Pyth, 49 bytes
Espera entrada en el formulario
[r,l]
. Utiliza-
para mostrar grifos. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .fuente
R ,
161149146 bytesPruébalo en línea!
Definitivamente siento que hay margen de mejora aquí, pero probé algunos enfoques diferentes y este es el único que se quedó.
Deshacerme de la definición de la función interna me haría muy feliz, y probé un montón de reestructuraciones de cat () para que sucediera.No importa, tan pronto como publiqué me di cuenta de lo que podía hacer. Todavía definitivamente se pueden encontrar algunos ahorros de eficiencia.Hay otras funciones LCM en bibliotecas con nombres más cortos, pero TIO tiene números y lo consideré más valioso en este momento.
fuente
C ++ (gcc) , 197 bytes
Pruébalo en línea!
fuente
++p%a+p%b
lugar de++p%a||p%b