Étant donné l'entrée d'une chaîne composée entièrement de q
s représentant des noires et de 8 quarts e
, sortez les indices des noires qui sont syncopés.
La syncopation est complexe, mais pour les besoins de ce défi, notre définition de "syncopé" sera très simple: un quart de note qui commence sur "décalé", c’est-à-dire que les temps comptés sont comptés comme "et" dans n / 4 temps.
Cela peut également être défini comme toute note de quart précédée d'un nombre impair de croche. Par exemple, les notes marquées avec *
ci-dessous sont considérées comme syncopées et leurs indices sont également affichés:
eqqeqqeqqe
** **
12 78
Output: 1 2 7 8
L'entrée consistera toujours en un nombre entier de mesures en 4/4 de temps (une note de quart correspond à un quart de mesure et une croche à un huitième de mesure). (L'entrée ne sera jamais non plus vide.) La sortie peut être une chaîne unique avec des éléments séparés par un délimiteur ne contenant pas de chiffres ou un tableau / liste / etc. La sortie peut être basée sur 1 (le premier index est 1 au lieu de 0) si vous le souhaitez, et elle peut également figurer dans n’importe quelle base numérique (unaire, décimale, etc.).
Puisqu'il s'agit de code-golf , le code le plus court en octets gagne.
Cas de test:
In Out
-----------------------------------------------
eqqqe 1 2 3
qeqeq 2
qqqeqqeeeeqeqeqeqqeqqeqq 4 5 10 14 19 20
eeeeeqeeqeeqqqqeqeqeeqe 5 8 11 12 13 14 18 21
qqqq <none>
eeeeeeee <none>
'eqqqe'
au lieu deeqqqe
Réponses:
Gelée ,
12 à9 octetsEn tant que programme, le code ci-dessus nécessite des guillemets autour de l'entrée. Comme cela n'est pas autorisé, il s'agit d'une soumission de fonction. La sortie est basée sur 1.
Essayez-le en ligne!Comment ça marche
Mise à jour
Le code ci-dessus ne fonctionne plus dans la dernière version de Jelly, car nous avons besoin d'un caractère e , mais
“e”
donne une chaîne. Une fixation qui enregistre un octet, pour un total de 8 octets .Cela fonctionne comme un programme complet. Essayez-le en ligne!
la source
Ruby, 46 ans
Entrée dans stdin. Sortie sur la sortie standard, séparés par une nouvelle ligne.
Commenté
la source
JavaScript ES7,
5048 octetsAssez court pour JS, si vous me demandez.
[for...of]
La syntaxe, qui combine essentiellement la carte et le filtre, est très utile pour relever ce défi.Définit une fonction anonyme qui génère un tableau à 1 index.
Extrait de test
Ceci utilise une version du code non golfée et non-ES7.
la source
J,
20 1917 octetsMerci à randomra pour la sauvegarde d’un octet et à Dennis pour la sauvegarde de deux. Ceci est un verbe monadique sans nom, utilisé comme suit:
Essayez ici.
Explication
la source
GNU grep,
3 + 17 = 203 + 15 = 18 octetsLe programme nécessite les options
boP
. Le code estEnregistrez-le sous
synco
, puis exécutez-legrep -boPf synco
.Le séparateur de sortie est
:q
suivi d'une nouvelle ligne. Par exemple, la sortie poureqqqe
estLes significations des drapeaux sont:
P
: Utilisez les expressions rationnelles PCRE.o
: Cela signifie d’imprimer uniquement la partie de la ligne qui correspond à l’expression régulière, mais ce n’est pas pour cela que c’est important.o
est utilisé car il a pour effet de permettre plusieurs correspondances par ligne.b
: Imprimer le décalage en octets du début de chaque correspondance depuis le début du fichier.Le modèle vérifie qu'il n'y a pas un nombre pair de croche après une noire.
la source
grep
que cette langue est une langue à part entière? Quoi qu'il en soit, +1 pour une bonne réponseMATL , 12
1416octetsMerci à Dennis d'avoir supprimé 2 octets (et d'avoir hébergé MATL sur sa formidable plate-forme en ligne!)
Ceci utilise la version actuelle (9.3.0) du langage / compilateur.
Les entrées et sorties se font par stdin et stdout. Le résultat est 1 basé.
Exemple :
Ou essayez-le en ligne!
Explication
la source
Python 2,
9485797566 octetsEDIT: Merci Doorknob et Alex A.
EDIT: Merci Alex A.
EDIT: Maintenant, en utilisant input (), l’entrée doit donc être une chaîne avec les guillemets.
EDIT: Merci Zgarb de me recommander d’utiliser énumérer.
Compte simplement le nombre de e et si q, vérifie si e compte est impair, puis affiche index.
Essayez-le ici
la source
if ...
par un seulelse
pour économiser 8 octets.print
1 octetelse: if e%2:
justeelif e%2:
.i[j]<"q"
plutôt quei[j]=="e"
.Haskell,
5851 octetsExemple d'utilisation:
f "eeeeeqeeqeeqqqqeqeqeeqe"
->[5,8,11,12,13,14,18,21]
.Parcourez la liste et affichez l'index en cours
i
pour chaque caractère'q'
s'il y a un nombre impair de'e'
secondes devant lui.la source
Minkolang 0,15 , 28 octets
Essayez ici.
Explication
la source
C (fonction), 65
Merci à Dennis pour le golf supplémentaire!
la source
i,n;f(char*m){for(i=n=0;*m;m++,i++)*m&4?++n:n%2?printf("%d ",i):0;}
devrait marcher.Python 3,
109958090887668676664 octetsCompte le nombre de
q
s ete
s et ajoute l'index du courantq
si le nombre dee
s précédents est impair.Éditer: Maintenant, il affiche une liste des indices de s qui sont
q
précédés d’un nombre impair dee
s. Huit octets économisés grâce à Doorknob et deux autres grâce à feersum .Ungolfed:
la source
input
etprint
inutiles?enumerate
querange(len(...
.JavaScript ES6,
636058 octetsFonction anonyme qui sort un tableau. Merci à user81655 d’avoir économisé deux octets. Voici une version non golfée qui utilise une syntaxe mieux supportée.
la source
Mathematica, 76 octets
Quelque chose d'intéressant j'ai remarqué. Toutes les parties syncopées sont de forme
eqqq..qqe
, je les détecte donc et donne les indices duq
s.la source
Japt,
292321 octetsNon plus en compétition!
Essayez-le en ligne!
Comment ça marche
Version non concurrente, 18 octets
Essayez-le en ligne!
la source
Befunge, 43 octets
Essayez-le en ligne!
Explication
Nous commençons avec deux zéros implicites sur la pile: le numéro de note et un nombre de temps.
la source