Inspirado por este xkcd
Você trabalha para o Shazam e eles têm um projeto para você. Alguns clientes estão reclamando que o aplicativo ocupa muito espaço no telefone, então eles querem que você codifique uma versão básica do aplicativo. Infelizmente, seu código existente pode entender apenas a palavra "na" e você deve enviar em breve. Tudo bem, faremos o melhor com o que temos.
O desafio
Você deve escrever um programa completo que receba uma entrada do usuário ou use um argumento de linha de comando e imprima o título e o artista da música. Como estamos tentando corrigir os clientes que reclamam do tamanho do programa, seu código deve ser o mais curto possível. A entrada será uma string que consiste inteiramente de na's, com um único espaço entre eles. Minúsculas / maiúsculas são arbitrárias. Isso é considerado uma entrada válida: Na Na nA na NA
Esta é uma entrada inválida: nah nah NA naNa banana
você deve determinar qual música está tocando e imprimi-la exatamente neste formato:
Song: <trackname>
Artist: <artist>
Se a entrada for exatamente 8 na, corresponde a duas músicas separadas, portanto, você deve imprimir as duas:
Song: Batman Theme
Artist: Neal Hefti
e
Song: Na Na Hey Hey Kiss Him Goodbye
Artist: Steam
Se a entrada for exatamente 10 na, você deverá imprimir:
Song: Katamari Damacy
Artist: Yuu Miyake
Se a entrada for exatamente 11 na, você deverá imprimir:
Song: Hey Jude
Artist: The Beatles
Se a entrada for 12 ou mais na's, você deverá imprimir
Song: Land Of 1000 Dances
Artist: Wilson Pickett
Por fim, se a entrada for inválida, há menos de 8 na's ou qualquer uma das palavras não é "na", seu programa não consegue entender a música. Então, logicamente, há apenas uma outra música que poderia ser. Você deve imprimir:
Song: Africa
Artist: Toto
Como de costume, as brechas padrão se aplicam e a resposta mais curta em bytes vence.
fonte
na
s? Acabei de ouvi-lo e pensei que fosse (em termos de tamanho das notas)quarter quarter quarter quarter / eighth sixteenth sixteenth quarter-quarter-quarter / eighth sixteenth quarter-quarter-quarter
, ou seja, 12na
segundos.onnnnnnnnne-one-three-one-a-two-threeeeeeeeeee-one-a-two-threeeeeeee-hey-jude
definitivamente 11na na / na na / na na / na na
x2batman
. Percebi que na segunda vez que vi os quadrinhos.Respostas:
Retina , 242
Experimente online!
Como funciona:
Sinalizador IgnoreCase + sinalizador de modo Grep + Regex
^na( na)*$
. Se a entrada for válida, imprima-a como está. Caso contrário, imprima nada.Sinalizador IgnoreCase + Sinalizador de modo de correspondência + Regex
na
. Conte os "na" se imprima o número.Se a sequência for exatamente "8", substitua pela segunda linha.
Se a sequência for exatamente "10", substitua pela segunda linha.
Se a sequência for exatamente "11", substitua pela segunda linha.
Se a sequência corresponder
[0-9].+
, substitua pela segunda linha. Isso não é verdade para números de um dígito10
e ,11
como eles já foram substituídos, nem nenhuma das cadeias de substituição acima.Se nenhuma das opções acima corresponder, a sequência ainda começará com um número. Padrão para Toto, África.
Substitua os espaços reservados
>
e,
porSong:
eArtist:
.fonte
JavaScript (ES6), 276 bytes
Explicação
Opcionalmente, a entrada pode conter um espaço à direita.
Teste
Mostrar snippet de código
fonte
PowerShell, 278 bytes
Ungolfed
Uso
fonte
sh + coreutils, 290
Embora seja mais longo que o meu outro envio, este é direto e praticamente não-destruído, então eu o incluí de qualquer maneira.
Como funciona:
Se a entrada for válida, imprima-a como está. Caso contrário, imprima nada.
Conte as palavras.
Tabela de consulta simples
Song:
eArtist:
são mantidas em variáveis.fonte
^(na ?)+$
.Python
453440406380 bytesEDIT: Agradecimentos a Cyoce por reduzir 13 bytes!
EDIT: Mais uma vez obrigado a Cyoce!
EDIT: Obrigado a RainerP. por me ajudar a melhorar o algoritmo em certos casos inválidos.
Este é um rascunho de um programa Python. Eu acredito que pode ser definitivamente jogado, talvez para 300-400 bytes. Mas vai trabalhar nisso em breve.
Tente aqui!
fonte
"Batman Theme,Neal Hefti,Na Na Hey Kiss Him Goodbye,Steam,Katamari Damacy,Yuu Miyake,Hey Jude,Beatles,Land of the 1000 Dances,Wilson Pickett,Africa,Toto".split(',')
if i not in ["n","a"," "]: ...
eu acredito que você pode usarif i not in 'na ': ...
. Além disso,if f==0: somecode; else: somemorecode
pode ser reduzido paraif f: somemorecode; else: somecode
(0 é falso)"\nArtist:"
três vezes. tente definir uma variável, por exemploA="\nArtist:"
, depois useA
no lugar da string literal. O mesmo pode ser feito com"Song:"
. Além disso, acho que issoif n<8or n==9:f=10
pode ser movido para o topo das instruções if e alterado paraif n!=8:f=10
Batman Theme
vez deAfrica
parana na na nan na na na na
.Julia, 325 bytes
Provavelmente poderia ser jogado mais.
fonte
^(na ?)+$
.<
e>
, em vez de==
:&&(c=length(split(ARGS[1],"na"))-1)<9?(p("Batman Theme","Neal Hefti"),p("Na Na Hey Hey Kiss Him Goodbye","Steam"))c>11?p("Land Of 1000 Dances","Wilson Pickett"):c>10?p("Hey Jude","The Beatles"):c>9?p("Katamari Damacy","Yuu Miyake"):p("Africa","Toto")
. Fora do tópico: eu gosto do seu avatar. Terminou de assistir o SAO na semana passada. ;)Ferrugem,
501477 bytesUngolfed
Editar: removeu uma to_string desnecessária e digite anotações
fonte
Perl 5
-pa
, 248 bytesExperimente online!
fonte
Perl 5 ,
312292 bytesExperimente online!
Ungolfed:
fonte
C (GCC) ,
403395370365 bytes-8 -5 bytes graças ao ceilingcat
Praticamente o mais direto possível.
Experimente online!
fonte
Java 8, 353 bytes
Explicação:
Experimente online.
fonte