Dada la entrada de una cadena que consiste enteramente en q
s que representan notas negras ys que e
representan corcheas, genera los índices de las notas negras que se sincopan.
La síncopa es compleja, pero para los propósitos de este desafío, nuestra definición de "síncopa" será muy simple: un cuarto de nota que comienza en "fuera de ritmo", es decir, los latidos cuentan como "y" en n / 4 hora.
Alternativamente, esto puede definirse como cualquier nota negra precedida por un número impar de corcheas. Por ejemplo, las notas marcadas a *
continuación se consideran sincopadas y también se muestran sus índices:
eqqeqqeqqe
** **
12 78
Output: 1 2 7 8
La entrada siempre consistirá en un número entero de medidas en 4/4 veces (un cuarto de nota es un cuarto de una medida, y una octava nota es un octavo de una medida). (La entrada nunca estará vacía). La salida puede ser una sola cadena con elementos separados por cualquier delimitador que no contenga números o una matriz / lista / etc. La salida puede estar basada en 1 (es decir, el primer índice es 1 en lugar de 0) si lo desea, y también puede estar en cualquier base numérica (unario, decimal, etc.).
Como se trata de código golf , gana el código más corto en bytes.
Casos de prueba:
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'
en lugar deeqqqe
Respuestas:
Jalea ,
129 bytesComo programa, el código anterior requiere comillas alrededor de la entrada. Como eso no está permitido, esta es una presentación de función. La salida está basada en 1.
Pruébalo en línea!Cómo funciona
Actualizar
El código anterior ya no funciona en la última versión de Jelly, ya que necesitamos un carácter e , pero
“e”
produce una cadena. Corrección que guarda un byte, para un total de 8 bytes .Esto funciona como un programa completo. Pruébalo en línea!
fuente
Ruby, 46
Entrada a stdin. Salida a stdout, nueva línea separada.
Comentado
fuente
JavaScript ES7,
5048 bytesBastante corto para JS, si me preguntas.
[for...of]
La sintaxis, básicamente mapa y filtro combinados, es útil para este desafío.Define una función anónima que genera una matriz indexada 1.
Fragmento de prueba
Esto utiliza una versión no codificada, no-ES7 del código.
fuente
J,
20 1917 bytesGracias a randomra por guardar un byte, y a Dennis por salvar dos. Este es un verbo monádico sin nombre, que se utiliza de la siguiente manera:
Pruébalo aquí.
Explicación
fuente
GNU grep,
3 + 17 = 203 + 15 = 18 bytesEl programa requiere las opciones
boP
. El código esGuárdelo como
synco
, luego ejecute comogrep -boPf synco
.El separador de salida es
:q
seguido por una nueva línea. Por ejemplo, la salida paraeqqqe
esLos significados de las banderas son:
P
: Use expresiones regulares PCRE.o
: Esto significa imprimir solo la parte de la línea que coincide con la expresión regular, pero no es por eso que sea importante.o
se usa porque tiene el efecto de permitir múltiples coincidencias por línea.b
: Imprime el desplazamiento en bytes del comienzo de cada coincidencia desde el comienzo del archivo.El patrón verifica que no haya un número par de corcheas después de un cuarto de nota.
fuente
grep
Califica como idioma por derecho propio? De todos modos, +1 para una gran respuestaMATL , 12
1416bytesGracias a Dennis por eliminar 2 bytes (¡y por alojar MATL en su increíble plataforma en línea!)
Esto usa la versión actual (9.3.0) del lenguaje / compilador.
La entrada y salida son a través de stdin y stdout. El resultado está basado en 1.
Ejemplo :
O pruébalo en línea!
Explicación
fuente
Python 2,
9485797566 bytesEDITAR: Gracias Doorknob y Alex A.
EDITAR: Gracias Alex A.
EDITAR: ahora usando input (), por lo que la entrada debe ser una cadena con las comillas.
EDITAR: Gracias Zgarb por recomendarme usar enumerate.
Simplemente cuenta el número de e's y si q, verifica si e cuenta es impar, luego imprime el índice.
Pruébalo aquí
fuente
if ...
con solo unelse
para guardar 8 bytes.print
de 1 byteelse: if e%2:
por justoelif e%2:
.i[j]<"q"
lugar dei[j]=="e"
.Haskell,
5851 bytesEjemplo de uso:
f "eeeeeqeeqeeqqqqeqeqeeqe"
->[5,8,11,12,13,14,18,21]
.Ir a través de la lista y generar el índice actual
i
para cada carácter'q'
si hay un número impar de'e'
s antes.fuente
Minkolang 0.15 , 28 bytes
Pruébalo aquí.
Explicación
fuente
C (función), 65
¡Gracias a @Dennis por el golf extra!
fuente
i,n;f(char*m){for(i=n=0;*m;m++,i++)*m&4?++n:n%2?printf("%d ",i):0;}
debería funcionar.Python 3,
109958090887668676664 bytesCuenta el número de
q
sys ye
agrega el índice de la corrienteq
si el número dee
s anteriores es impar.Editar: ahora imprime una lista de los índices de s que son
q
y tienen un número impar dee
s que los preceden. Ocho bytes guardados gracias a Doorknob y dos más gracias a feersum .Sin golf:
fuente
input
y seanprint
innecesarias?enumerate
en lugar derange(len(...
.JavaScript ES6,
636058 bytesFunción anónima que genera una matriz. Gracias a user81655 por guardar dos bytes. Aquí hay una versión no protegida que usa una sintaxis mejor soportada.
fuente
Mathematica, 76 bytes
Algo interesante que noté. Todas las partes sincopadas son de forma
eqqq..qqe
, así que solo las detecto y doy los índices deq
s.fuente
Japt
292321 bytes¡Ya no compite!
Pruébalo en línea!
Cómo funciona
Versión no competitiva, 18 bytes
Pruébalo en línea!
fuente
Befunge, 43 bytes
Pruébalo en línea!
Explicación
Comenzamos con dos ceros implícitos en la pila: el número de nota y un conteo de tiempos.
fuente