Dada a entrada de uma sequência composta inteiramente por q
s representando semínimas e
es representando colcheias, produza os índices das semínimas que são sincopadas.
A sincopação é complexa, mas, para os propósitos desse desafio, nossa definição de "sincopado" será muito simples: uma semínima que começa no "off-beat" - ou seja, os tempos contados como "e" em n / 4 Tempo.
Em alternativa, pode ser definido como qualquer semínima precedida por um número ímpar de colcheias. Por exemplo, as notas marcadas *
abaixo são consideradas sincopadas e seus índices também são mostrados:
eqqeqqeqqe
** **
12 78
Output: 1 2 7 8
A entrada sempre consistirá em um número inteiro de medidas em 4/4 de tempo (uma semínima é um quarto de uma medida e uma colcheia é um oitavo de uma medida). (A entrada também nunca estará vazia.) A saída pode ser uma única sequência com elementos separados por qualquer delimitador que não contenha números ou uma matriz / lista / etc. A saída pode ser baseada em 1 (ou seja, o primeiro índice é 1 em vez de 0), se você desejar, e também pode estar em qualquer base numérica (unária, decimal, etc.).
Como esse é o código-golfe , o código mais curto em bytes vence.
Casos de teste:
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'
em vez deeqqqe
Respostas:
Geléia ,
129 bytesComo programa, o código acima requer aspas à volta da entrada. Como isso não é permitido, este é um envio de função. A saída é baseada em 1.
Experimente online!Como funciona
Atualizar
O código acima não funciona mais na versão mais recente do Jelly, pois precisamos do caractere e , mas
“e”
gera uma string. Correção que salva um byte, para um total de 8 bytes .Isso funciona como um programa completo. Experimente online!
fonte
Ruby, 46
Entrada para stdin. Saída para stdout, nova linha separada.
Comentado
fonte
JavaScript ES7,
5048 bytesMuito curto para JS, se você me perguntar.
[for...of]
sintaxe, basicamente mapa e filtro combinados, é útil para esse desafio.Define uma função anônima que gera uma matriz indexada em 1.
Snippet de teste
Isso usa uma versão ungolfed e não ES7 do código.
fonte
J,
20 1917 bytesAgradecemos a randomra por salvar um byte e a Dennis por salvar dois. Este é um verbo monádico sem nome, usado da seguinte maneira:
Experimente aqui.
Explicação
fonte
GNU grep,
3 + 17 = 203 + 15 = 18 bytesO programa requer as opções
boP
. O código éSalve como e
synco
, em seguida, execute comogrep -boPf synco
.O separador de saída é
:q
seguido por uma nova linha. Por exemplo, a saída paraeqqqe
éOs significados das bandeiras são:
P
: Use regexes PCRE.o
: Isso significa imprimir apenas a parte da linha que corresponde à expressão regular, mas não é por isso que é importante.o
é usado porque tem o efeito de permitir várias correspondências por linha.b
: Imprima o deslocamento em bytes do início de cada correspondência desde o início do arquivo.O padrão verifica se não há um número par de colcheias após uma semínima.
fonte
grep
qualifica como uma língua em seu próprio direito? Independentemente disso, +1 para uma grande respostaMATL , 12
1416bytesAgradecemos a Dennis por remover 2 bytes (e por hospedar o MATL em sua incrível plataforma on-line!)
Isso usa a versão atual (9.3.0) do idioma / compilador.
Entrada e saída são através de stdin e stdout. O resultado é baseado em 1.
Exemplo :
Ou experimente online!
Explicação
fonte
Python 2,
9485797566 bytesEDIT: Obrigado Maçaneta e Alex A.
EDIT: Obrigado Alex A.
EDIT: Agora, usando input (), a entrada deve ser uma string com as aspas.
Edição: Obrigado Zgarb por recomendar-me para usar enumerar.
Simplesmente conta o número de e e, se q, verifica se a contagem de e é ímpar e imprime o índice.
Experimente aqui
fonte
if ...
por apenas umelse
para salvar 8 bytes.print
1 byteelse: if e%2:
para apenaselif e%2:
.i[j]<"q"
vez dei[j]=="e"
.Haskell,
5851 bytesExemplo de uso:
f "eeeeeqeeqeeqqqqeqeqeeqe"
->[5,8,11,12,13,14,18,21]
.Percorra a lista e produza o índice atual
i
para cada caractere'q'
se houver um número ímpar de'e'
s antes dele.fonte
Minkolang 0.15 , 28 bytes
Experimente aqui.
Explicação
fonte
C (função), 65
Obrigado a @Dennis pelo golfe extra!
fonte
i,n;f(char*m){for(i=n=0;*m;m++,i++)*m&4?++n:n%2?printf("%d ",i):0;}
deveria funcionar.Python 3,
109958090887668676664 bytesConta o número de se
q
es ee
adiciona o índice da correnteq
se o número dee
s anterior for ímpar.Editar: Agora, imprime uma lista dos índices de s que
q
possuem um número ímpar dee
s antes deles. Oito bytes salvos graças à maçaneta da porta e mais dois graças ao feersum .Ungolfed:
fonte
input
eprint
?enumerate
do querange(len(...
.JavaScript ES6,
636058 bytesFunção anônima que gera uma matriz. Obrigado a user81655 por salvar dois bytes. Aqui está uma versão não destruída que usa uma sintaxe suportada melhor.
fonte
Mathematica, 76 bytes
Algo interessante que eu notei. Todas as partes sincopadas são da forma
eqqq..qqe
, então eu apenas as detecto e dou os índices dosq
s.fonte
Japt,
292321 bytesNão é mais não-concorrente!
Experimente online!
Como funciona
Versão não concorrente, 18 bytes
Experimente online!
fonte
Anterior, 43 bytes
Experimente online!
Explicação
Começamos com dois zeros implícitos na pilha: o número da nota e uma contagem de batidas.
fonte