Inspirado en este xkcd
Trabajas para Shazam y ellos tienen un proyecto para ti. Algunos clientes se quejan de que su aplicación ocupa demasiado espacio en su teléfono, por lo que quieren que codifique una versión lite de la aplicación. Desafortunadamente, su código existente solo puede entender la palabra "na", y debe enviarlo pronto. Está bien, haremos lo mejor con lo que tenemos.
El reto
Debe escribir un programa completo que tome una entrada del usuario, o tome un argumento de línea de comando, e imprima el título y el artista de la canción. Como estamos tratando de arreglar a los clientes que se quejan del tamaño del programa, su código debe ser lo más breve posible. La entrada será una cadena que consiste completamente en na, con un solo espacio entre ellas. Minúsculas / mayúsculas es arbitrario. Esto se considera una entrada válida: Na Na nA na NA
esta es una entrada no válida: nah nah NA naNa banana
debe determinar qué canción se está reproduciendo e imprimirla exactamente en este formato:
Song: <trackname>
Artist: <artist>
Si la entrada es exactamente 8 na, esto coincide con dos canciones separadas, por lo que debe imprimir ambas:
Song: Batman Theme
Artist: Neal Hefti
y
Song: Na Na Hey Hey Kiss Him Goodbye
Artist: Steam
Si la entrada es exactamente 10 na, debe imprimir:
Song: Katamari Damacy
Artist: Yuu Miyake
Si la entrada es exactamente de 11 na, debe imprimir:
Song: Hey Jude
Artist: The Beatles
Si la entrada es de 12 o más na, debe imprimir
Song: Land Of 1000 Dances
Artist: Wilson Pickett
Por último, si la entrada no es válida, hay menos de 8 na, o alguna de las palabras no es "na", su programa no puede entender la música. Entonces, lógicamente, solo hay otra canción que podría ser. Debes imprimir:
Song: Africa
Artist: Toto
Como de costumbre, se aplican las lagunas estándar y gana la respuesta más corta en bytes.
fuente
na
s? Simplemente lo escuché y pensé que era (en términos de duración de las notas)quarter quarter quarter quarter / eighth sixteenth sixteenth quarter-quarter-quarter / eighth sixteenth quarter-quarter-quarter
, que es de 12na
s.onnnnnnnnne-one-three-one-a-two-threeeeeeeeeee-one-a-two-threeeeeeee-hey-jude
definitivamente 11na na / na na / na na / na na
x2batman
. Me di cuenta de que la segunda vez que vi el cómic.Respuestas:
Retina , 242
Pruébalo en línea!
Cómo funciona:
IgnoreCase flag + Grep mode flag + Regex
^na( na)*$
. Si la entrada es válida, imprímala como está. Si no, no imprima nada.IgnoreCase flag + Match mode flag + Regex
na
. Cuente las "na" e imprima el número.Si la cadena es exactamente "8", reemplácela por la segunda línea.
Si la cadena es exactamente "10", reemplácela por la segunda línea.
Si la cadena es exactamente "11", reemplácela por la segunda línea.
Si la cadena coincide
[0-9].+
, reemplácela por la segunda línea. Esto no es cierto para los números de un solo dígito,10
y11
como ya se han reparado ni ninguna de las cadenas de reemplazo anteriores.Si ninguno de los anteriores coincide, la cadena aún comienza con un número. Por defecto a Toto, África.
Reemplace los marcadores de posición
>
y,
porSong:
yArtist:
.fuente
JavaScript (ES6), 276 bytes
Explicación
La entrada puede contener opcionalmente un espacio final.
Prueba
Mostrar fragmento de código
fuente
PowerShell, 278 bytes
Sin golf
Uso
fuente
sh + coreutils, 290
Aunque es más largo que mi otro envío, este es sencillo y casi no tiene nada de golf, así que lo incluí de todos modos.
Cómo funciona:
Si la entrada es válida, imprímala como está. Si no, no imprima nada.
Cuenta las palabras.
Tabla de búsqueda simple,
Song:
yArtist:
se mantienen en variables.fuente
^(na ?)+$
.Python
453440406380 bytesEDITAR: ¡ Gracias a Cyoce por reducir 13 bytes!
EDITAR: Gracias de nuevo a Cyoce!
EDITAR: Gracias a RainerP. por ayudarme a mejorar el algoritmo en ciertos casos no válidos.
Este es un borrador de un programa de Python. Creo que definitivamente se puede jugar golf, quizás a 300-400 bytes. Pero trabajaré en eso pronto.
¡Intenta aquí!
fuente
"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"," "]: ...
creo que puedes usarif i not in 'na ': ...
. Además,if f==0: somecode; else: somemorecode
se puede reducir aif f: somemorecode; else: somecode
(0 es Falsy)"\nArtist:"
tres veces. intente establecer una variable, por ejemploA="\nArtist:"
, luego useA
en lugar del literal de cadena. Lo mismo se puede hacer con"Song:"
. Además, creo queif n<8or n==9:f=10
se puede mover a la parte superior de las declaraciones if y cambiar aif n!=8:f=10
Batman Theme
lugar deAfrica
parana na na nan na na na na
.Julia, 325 bytes
Probablemente podría jugar más golf.
fuente
^(na ?)+$
.<
y>
en lugar 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")
. Fuera de tema: me gusta tu avatar. Terminé de ver SAO la semana pasada. ;)Moho,
501477 bytesSin golf
Editar: eliminó un to_string innecesario y escriba anotaciones
fuente
Perl 5
-pa
, 248 bytesPruébalo en línea!
fuente
Perl 5 ,
312292 bytesPruébalo en línea!
Sin golf:
fuente
C (gcc) ,
403395370365 bytes-8-5 bytes gracias a ceilingcat
Casi tan directo como puede ser.
Pruébalo en línea!
fuente
Java 8, 353 bytes
Explicación:
Pruébalo en línea.
fuente