Je suis musicien et j'ai besoin de plus de polyrythmies dans ma vie!
Un polyrythmie se produit dans la musique (et dans la nature) lorsque deux événements (applaudissements, notes, lucioles clignotantes, etc.) se produisent à deux intervalles réguliers différents. Les deux types d'événements se produisent un nombre différent de fois dans le même intervalle.
Si je tape avec ma main gauche deux fois, et avec ma main droite 3 fois, dans le même espace de temps, cela ressemble un peu à ceci:
------
R . . .
L . .
Les tirets en haut indiquent la longueur du motif polyrthmique, qui est le plus petit commun multiple ou 2 et 3. Cela peut être compris comme le point auquel le motif se répète.
Il y a aussi un `` rythme rythmique '', qui est le motif produit lorsque l'une des mains tape:
------
R . . .
L . .
M . ...
Il s'agit d'un polyrythmie simple et très courant, avec un rapport de 3: 2.
Disons simplement que je ne veux pas faire un polyrythmie simple que je peux travailler dans ma tête, j'ai donc besoin de quelque chose pour le faire pour moi. Je pourrais le faire en long sur papier, ou ...
Règles:
- Écrivez du code pour générer et afficher un diagramme de polyrythmie, comme décrit ci-dessus.
- N'importe quelle langue ancienne, essayez le moins d'octets.
- Votre code prend deux arguments:
- Nombre de tapotements avec la main gauche (entier positif)
- Nombre de tapotements avec la main droite (entier positif)
- Il calculera la longueur, qui est le plus petit commun multiple pour les deux arguments.
- La ligne du haut sera composée de deux caractères blancs suivis de tirets affichant la longueur (longueur * '-')
- Les deuxième et troisième lignes montreront le motif pour les mains droite et gauche:
- Il commencera par un R ou un L, indiquez de quelle main il s'agit, suivi d'un espace.
- L'intervalle pour cette main est la longueur divisée par son argument.
- Les tapotements commenceront au troisième caractère, indiqué par n'importe quel caractère que vous choisissez. A partir de là, il affichera les mêmes caractères «intervalle» de caractère.
- Il ne sera pas plus long que la ligne de longueur.
- La quatrième ligne est le métarythme:
- Il commencera par un majuscule M, suivi d'un espace.
- À partir du troisième personnage, il affichera un personnage (n'importe quel personnage que vous choisissez) dans chaque position où il y a un tap sur la main droite ou la main gauche.
- L'espace de fuite n'est pas pertinent.
Cas de test:
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 ........
Bon golf!
r
etl
comme deux valeurs distinctes? Pourrions-nous accepter un tableau à deux éléments à la place, par exemple? Qu'en est-il de leur ordre, est-ce strictementr
suivil
?Réponses:
JavaScript (ES6), 131 octets
Sort
0
comme le caractère tap .Essayez-le en ligne!
Comment?
Nous utilisons la même fonction d'aide à deux fins différentes.g( )
la source
Java 11,
226234233219 octetsUn peu long; dommage Java n'a pas de
lcm()
fonction. Essayez-le en ligne ici (TIO n'a pas encore Java 11, donc cela utilise une méthode d'assistance à la place deString.repeat()
).Ma version initiale a pris l'intervalle entre les tapotements au lieu du nombre de tapotements. Fixé maintenant. Merci à Kevin Cruijssen d' avoir joué au golf 1 octet.
Non golfé:
la source
?".":" "
en?'.':32
.Python 2 ,
187185183174166156148147145 octetsUtilise
-
comme caractère tapEssayez-le en ligne!
Enregistré:
la source
[i%(w/y)and i%(w/z)>0]
pourrait être[i%(w/y)!=0<i%(w/z)]
.Perl 6 ,
858078 octets-2 octets grâce à Jo King.
Essayez-le en ligne!
Renvoie une liste de quatre lignes.
la source
Python 2 ,
185 228 223 234249 octetsEssayez-le en ligne!
la source
r=4, l=8
fonctionne bien pour moi15,25
, ça donne375
, mais ça devrait l'être75
.i%r+i%l+0**i<1
. En outre, vous pouvez supprimer les versions précédentes du code, car elles seront conservées dans votre historique d'édition de quiconque veut les voirGelée , 32 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste
[L,R]
.la source
C (gcc), 204 octets
Port de ma réponse Java . Appelez avec
f(number_of_right_hand_taps, number_of_left_hand_taps)
. Essayez-le en ligne ici .la source
Pyth, 53 octets
Certainement de la place pour jouer au golf. Je le ferai quand j'aurai le temps.
Essayez-le ici
Explication
la source
C # (Visual C # Interactive Compiler) , 254 octets
Golfé Essayez-le en ligne!
Non golfé
Code complet
Communiqués
254 bytes
- Solution initiale.Remarques
la source
Fusain , 52 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Calculez le LCM des entrées en prenant le premier multiple
R
divisible parL
.Imprimez le LCM, qui sort automatiquement la ligne nécessaire de
-
s. Ensuite, déplacez pour imprimer le rythme de droite à gauche.Faites une boucle sur les nombres du LCM jusqu'à 0 et créez un tableau de listes représentant les battements des mains droite et gauche.
Faites une boucle sur les temps et ajoutez le métarythmie.
Imprimez les temps inversés vers le bas, mais comme il s'agit d'un tableau, ils se retrouvent à gauche.
Imprimez l'en-tête.
la source
Ruby ,
130126 bytesEssayez-le en ligne!
la source
Python 2 , 117 octets
Essayez-le en ligne!
la source
Pyth, 49 octets
Attend l'entrée dans le formulaire
[r,l]
. Utilise-
pour afficher les taps. Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .la source
R ,
161149146 octetsEssayez-le en ligne!
J'ai vraiment l'impression qu'il y a place à amélioration ici, mais j'ai essayé quelques approches différentes et c'est la seule qui est restée.
Se débarrasser de la définition de la fonction interne me rendrait très heureux, et j'ai essayé un tas de restructurations de cat () pour y arriver.Peu importe, dès que j'ai posté, j'ai réalisé ce que je pouvais faire. Encore certainement des économies d'efficacité à trouver.Il existe d'autres fonctions LCM dans les bibliothèques avec des noms plus courts, mais TIO a des nombres et j'ai considéré que c'était plus utile à ce stade.
la source
C ++ (gcc) , 197 octets
Essayez-le en ligne!
la source
++p%a+p%b
au lieu de++p%a||p%b