Zainspirowany tym xkcd
Pracujesz dla Shazam, a oni mają dla ciebie projekt. Niektórzy klienci skarżą się, że ich aplikacja zajmuje zbyt dużo miejsca w telefonie, dlatego chcą, abyś napisał wersję lite aplikacji. Niestety Twój istniejący kod może zrozumieć tylko słowo „na” i wkrótce musisz go wysłać. W porządku, zrobimy najlepiej z tym, co mamy.
Wyzwanie
Musisz napisać pełny program, który pobiera dane od użytkownika lub argument wiersza poleceń, i wypisuje tytuł i wykonawcę utworu. Ponieważ próbujemy naprawić klientów narzekających na rozmiar programu, Twój kod musi być możliwie jak najkrótszy. Dane wejściowe będą ciągiem złożonym całkowicie z na, z pojedynczym odstępem między nimi. Małe / wielkie litery są dowolne. Jest to uważane za prawidłowe wejście: Na Na nA na NA
To jest nieprawidłowe wejście: nah nah NA naNa banana
Musisz określić, który utwór jest odtwarzany i wydrukować go dokładnie w tym formacie:
Song: <trackname>
Artist: <artist>
Jeśli wejście ma dokładnie 8 na, pasuje to do dwóch oddzielnych utworów, więc musisz wydrukować oba:
Song: Batman Theme
Artist: Neal Hefti
i
Song: Na Na Hey Hey Kiss Him Goodbye
Artist: Steam
Jeśli dane wejściowe wynoszą dokładnie 10 na, musisz wydrukować:
Song: Katamari Damacy
Artist: Yuu Miyake
Jeśli dane wejściowe wynoszą dokładnie 11 na, musisz wydrukować:
Song: Hey Jude
Artist: The Beatles
Jeśli dane wejściowe to 12 lub więcej na, musisz wydrukować
Song: Land Of 1000 Dances
Artist: Wilson Pickett
Wreszcie, jeśli dane wejściowe są niepoprawne, jest mniej niż 8 na lub którekolwiek ze słów nie są „na”, twój program nie rozumie muzyki. Logicznie rzecz biorąc, jest tylko jedna piosenka, którą mogłaby być. Musisz wydrukować:
Song: Africa
Artist: Toto
Jak zwykle obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach.
źródło
na
s? Właśnie go wysłuchałem i pomyślałem, że to (pod względem długości nut)quarter quarter quarter quarter / eighth sixteenth sixteenth quarter-quarter-quarter / eighth sixteenth quarter-quarter-quarter
, czyli 12na
s.onnnnnnnnne-one-three-one-a-two-threeeeeeeeeee-one-a-two-threeeeeeee-hey-jude
zdecydowanie 11na na / na na / na na / na na
x2batman
. Zauważyłem, że drugi raz widziałem komiks.Odpowiedzi:
Retina , 242
Wypróbuj online!
Jak to działa:
Flaga IgnoreCase + flaga trybu Grep + Regex
^na( na)*$
. Jeśli dane wejściowe są prawidłowe, wydrukuj je bez zmian. Jeśli nie, nie drukuj niczego.Flaga IgnoreCase + flaga trybu dopasowania + Regex
na
. Policz „na” i wydrukuj numer.Jeśli ciąg ma dokładnie „8”, zastąp go drugim wierszem.
Jeśli ciąg ma dokładnie „10”, zastąp go drugim wierszem.
Jeśli ciąg ma dokładnie „11”, zastąp go drugim wierszem.
Jeśli ciąg znaków pasuje
[0-9].+
, zastąp go drugim wierszem. Nie dotyczy to liczb jednocyfrowych,10
a11
ponieważ zostały one już zastąpione, ani żadnego z powyższych ciągów zastępczych.Jeśli żadna z powyższych nie pasuje, ciąg znaków zaczyna się od liczby. Domyślnie Toto, Afryka.
Zastąp symbole zastępcze
>
oraz,
przezSong:
iArtist:
.źródło
JavaScript (ES6), 276 bajtów
Wyjaśnienie
Dane wejściowe mogą opcjonalnie zawierać jedną spację końcową.
Test
Pokaż fragment kodu
źródło
PowerShell, 278 bajtów
Bez golfa
Stosowanie
źródło
sh + coreutils, 290
Chociaż ten jest dłuższy niż moje inne zgłoszenie, ten jest prosty i prawie bez golfa, więc i tak go załączyłem.
Jak to działa:
Jeśli dane wejściowe są prawidłowe, wydrukuj je bez zmian. Jeśli nie, nic nie drukuj.
Policz słowa.
Prosta tabela wyszukiwania
Song:
iArtist:
są przechowywane w zmiennych.źródło
^(na ?)+$
.Python
453440406380 bajtówEDYCJA: Dzięki Cyoce za zmniejszenie 13 bajtów!
EDYCJA: Jeszcze raz dziękuję Cyoce!
EDYCJA: Dzięki RainerP. za pomoc w ulepszeniu algorytmu w niektórych nieważnych przypadkach.
To jest przybliżony szkic programu w języku Python. Wierzę, że można go zdecydowanie zagrać w golfa, może do 300-400 bajtów. Ale wkrótce nad tym popracujemy.
Wypróbuj tutaj!
źródło
"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"," "]: ...
wierzę, że można użyćif i not in 'na ': ...
. Dodatkowoif f==0: somecode; else: somemorecode
można zmniejszyć doif f: somemorecode; else: somecode
(0 to Falsy)"\nArtist:"
trzy razy. spróbuj ustawić zmienną, npA="\nArtist:"
, a następnie używającA
zamiast ciągiem znaków. To samo można zrobić z"Song:"
. Myślę też, żeif n<8or n==9:f=10
można to przenieść na szczyt instrukcji if i zmienić naif n!=8:f=10
Batman Theme
zamiastAfrica
dlana na na nan na na na na
.Julia, 325 bajtów
Prawdopodobnie można by dalej grać w golfa.
źródło
^(na ?)+$
.<
i>
zamiast==
:&&(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")
. Off-topic: Podoba mi się twój awatar. Skończyłem oglądać SAO w zeszłym tygodniu. ;)Rdza,
501477 bajtówBez golfa
Edycja: usunęła niepotrzebny ciąg do i napisała adnotacje
źródło
Perl 5
-pa
, 248 bajtówWypróbuj online!
źródło
Perl 5 ,
312292 bajtówWypróbuj online!
Nie golfowany:
źródło
C (gcc) ,
403395370365 bajtów-8 -5 bajtów dzięki pułapkowi cat
Tak proste, jak to tylko możliwe.
Wypróbuj online!
źródło
Java 8, 353 bajtów
Wyjaśnienie:
Wypróbuj online.
źródło