Ciąg muzyczny to dowolny ciąg, który można odtwarzać na klawiaturze fortepianu.
Dla tych z nas, którzy nie byli zmuszeni do nauki gry na pianinie jako dzieci, oto jak wygląda klawiatura.
Tak więc struna feed a dead cabbage
jest struną muzyczną, ponieważ każda pojedyncza litera odpowiada jednemu z tych znaków.
Wyzwanie polega na napisaniu programu, który pobiera ciąg znaków jako dane wejściowe ze STDIN i znajdzie najdłuższy podkład muzyczny. Następnie twój program musi wydrukować podciąg i jego długość. Oto kilka przykładowych wejść / wyjść.
Wejście: „FEED ME! Jestem głodny!”
Wyjście: feed 4
Wejście: Nie nie nie, nie musistrin!
Ouput: 0
Wejście:
"A **bad** !!!fAd82342"
Wyjście: abadfad 7
Dane wejściowe: „Dobry golf!”
Wyjście: dg 2
Zasady
Dane wyjściowe mogą być pisane wielkimi lub małymi literami, ale nie może być interpunkcji ani spacji.
W łańcuchu wejściowym będzie występować wielkie litery i interpunkcja, ale nie ma to wpływu na to, czy podciąg jest uznawany za „muzyczny”, czy nie.
Musi być spacja między podkładem muzycznym a liczbą.
Odpowiedzi:
Pyth,
2523 bajtów2 bajty zapisane dzięki @Jakube.
Demonstracja. Uprząż testowa.
Wyjaśnienie:
rz0
: Dane wejściowe pisane małymi literami.@Grz0
: Usuń wszystkie znaki niealfabetyczne..:@Grz0)
: Wygeneruj wszystkie podciągi.+k.:@Grz0)
: Dodaj pusty ciąg.f ... +k.:@Grz0)
: Filtruj te ciągi.-T<G7
: Filtruj każdy ciąg pod kątem znaków niemuzycznych.!-T<G7
: Neguj wynik. Dzieje się takTrue
wtedy i tylko wtedy, gdy struna ma charakter muzyczny.f!-T<G7+k.:@Grz0)
: Odfiltruj struny muzyczne.ef!-T<G7+k.:@Grz0)
: Weź ostatni taki ciąg..:
sortuje podciągi według rozmiaru, więc jest to również najdłuższy podciąg muzyczny.Jef!-T<G7+k.:@Grz0)
: Przypisz wynik doJ
.pdJ
: DrukujJ
,d
spacją, jako znak końcowy.lJ
: Następnie wydrukuj długośćJ
.źródło
Ruby,
8375 znakówDość oczywiste.
Wykorzystuje fakt, że Ruby może dzielić łańcuchy na regex (
.split(/[^a-g]/)
).źródło
Perl, 58
Posługiwać się:
lub
źródło
Java, 268
Rozszerzony:
źródło
Perl 5 (106)
źródło
R
98 98bajtówNiegolfowane + wyjaśnienie:
Sugestie są mile widziane!
Uwaga: Dane wyjściowe są teraz wieloznaczne, co jest dozwolone na podstawie edycji OP. To zaoszczędziło 4 bajty.
źródło
golflua ,
848584 bajtówNajpierw
wymuszam małe litery, następnieusuwamspacjeze znaków niebędących literami, a następnie usuwam wszystkie niemuzyczne litery z wejścia (standardowe wejście). Następnie skanuję każde pozostałe słowo i porównuję jego długość przed wypisaniem największej i długiej (standardowej). Prawdopodobnie istnieje krótszy sposób wykonania pętli, ale w tej chwili mam to.Byłby nie golfowym kodem Lua
źródło