Вдохновленный этим xkcd
Ты работаешь на Shazam и у них есть проект для вас. Некоторые клиенты жалуются на то, что их приложение занимает слишком много места на телефоне, поэтому они хотят, чтобы вы запрограммировали облегченную версию приложения. К сожалению, ваш существующий код может понимать только слово «na», и вы должны отправить его в ближайшее время. Это нормально, мы сделаем все возможное с тем, что у нас есть.
Соревнование
Вы должны написать полную программу, которая принимает пользовательский ввод или принимает аргумент командной строки, и печатать название и исполнителя песни. Поскольку мы пытаемся разрешить клиентам, которые жалуются на размер программы, ваш код должен быть максимально коротким. На входе будет строка, состоящая целиком из na, с одним пробелом между ними. Строчные / прописные буквы произвольны. Это считается допустимым вводом: Na Na nA na NA
это неверный ввод: nah nah NA naNa banana
вы должны определить, какая песня воспроизводится, и распечатать ее именно в таком формате:
Song: <trackname>
Artist: <artist>
Если вход ровно 8 на, это матчи две отдельные песни, так что вы должны напечатать как:
Song: Batman Theme
Artist: Neal Hefti
а также
Song: Na Na Hey Hey Kiss Him Goodbye
Artist: Steam
Если входное значение ровно 10 нА, вы должны вывести:
Song: Katamari Damacy
Artist: Yuu Miyake
Если вход ровно 11 на это, вы должны напечатать:
Song: Hey Jude
Artist: The Beatles
Если ввод 12 или более на, вы должны напечатать
Song: Land Of 1000 Dances
Artist: Wilson Pickett
И, наконец, если ввод неверен, если число слов меньше 8, или любое из слов не является «na», ваша программа не может понять музыку. Логично, что есть только одна другая песня, которая могла бы быть. Вы должны напечатать:
Song: Africa
Artist: Toto
Как обычно, применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах.
источник
na
с? Я просто слушал его и думал, что это так (с точки зрения длины нот)quarter quarter quarter quarter / eighth sixteenth sixteenth quarter-quarter-quarter / eighth sixteenth quarter-quarter-quarter
, что составляет 12na
с.onnnnnnnnne-one-three-one-a-two-threeeeeeeeeee-one-a-two-threeeeeeee-hey-jude
определенно 11na na / na na / na na / na na
х2batman
. Я заметил, что во второй раз я увидел комикс.Ответы:
Сетчатка , 242
Попробуйте онлайн!
Как это работает:
Флаг IgnoreCase + флаг режима Grep + Regex
^na( na)*$
. Если введенные данные верны, распечатайте их как есть. Если нет, ничего не печатайте.Флаг IgnoreCase + флаг режима матча + Regex
na
. Подсчитайте «н» и выведите число.Если строка ровно «8», заменить на вторую строку.
Если строка ровно «10», заменить на вторую строку.
Если строка ровно «11», замените ее второй строкой.
Если строка совпадает
[0-9].+
, замените ее второй строкой. Это не так для однозначных чисел,10
и11
так как они уже были repaced , ни какой - либо из вышеуказанных строк замены.Если ничего из вышеперечисленного не найдено, строка по-прежнему начинается с цифры. По умолчанию в Тото, Африка.
Замените заполнители
>
и,
наSong:
иArtist:
.источник
JavaScript (ES6), 276 байт
объяснение
Входные данные могут дополнительно содержать один завершающий пробел.
Тест
Показать фрагмент кода
источник
PowerShell, 278 байт
Ungolfed
использование
источник
sh + coreutils, 290
Хотя это и дольше, чем в моем другом представлении, это прямолинейно и в значительной степени ungolfed, поэтому я все равно включил его.
Как это работает:
Если введенные данные верны, распечатайте их как есть. Если нет, ничего не печатайте.
Посчитай слова.
Простая таблица поиска
Song:
иArtist:
хранится в переменных.источник
^(na ?)+$
.Python
453440406380 байтРЕДАКТИРОВАТЬ: Спасибо Cyoce за сокращение 13 байтов!
РЕДАКТИРОВАТЬ: Еще раз спасибо Cyoce!
РЕДАКТИРОВАТЬ: Благодаря RainerP. за помощь в улучшении алгоритма в некоторых недействительных случаях.
Это черновой вариант программы на Python. Я считаю, что это может быть определенно гольф, может быть, до 300-400 байтов. Но скоро над этим поработаем.
Попробуй здесь!
источник
"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"," "]: ...
я считаю, вы можете использоватьif i not in 'na ': ...
. Кроме того,if f==0: somecode; else: somemorecode
может быть уменьшено доif f: somemorecode; else: somecode
(0 - ложь)"\nArtist:"
три раза. попробуйте установить переменную, напримерA="\nArtist:"
, затем использоватьA
вместо строкового литерала. То же самое можно сделать с"Song:"
. Кроме того, я думаю, чтоif n<8or n==9:f=10
это можно переместить в верхнюю часть операторов if и изменить наif n!=8:f=10
Batman Theme
вместоAfrica
дляna na na nan na na na na
.Юлия, 325 байт
Вероятно, может быть в гольфе дальше.
источник
^(na ?)+$
.<
и>
вместо==
:&&(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")
. Не по теме: мне нравится твой аватар. Завершил просмотр SAO на прошлой неделе. ;)Ржавчина,
501477 байтUngolfed
Редактировать: удалил ненужную строку to_string и набрал аннотации
источник
Perl 5
-pa
, 248 байтПопробуйте онлайн!
источник
Perl 5 ,
312292 байтаПопробуйте онлайн!
Ungolfed:
источник
C (gcc) ,
403395370365 байт-8 -5 байт, благодаря функциюcatcat
Довольно прямолинейно, насколько это возможно.
Попробуйте онлайн!
источник
Java 8, 353 байта
Объяснение:
Попробуйте онлайн.
источник