Jak wszyscy wiemy, limeryki to krótkie, pięcioliniowe, czasem lubieżne wiersze ze schematem rymowania AABBA i miernikiem anapestic (cokolwiek to jest):
Pisanie absurdalnego
wiersza pierwszej i piątej Limericka rymuje się słowem
I tak, jak się spodziewałeś
Rymują się z drugim
Czwarta linia musi rymować się z trzecim
Twoim zadaniem jest napisanie najkrótszego programu, który po wprowadzeniu tekstu wejściowego drukuje, czy uważa, że dane wejściowe są poprawnym limerickiem. Dane wejściowe mogą być albo w wierszu poleceń, albo przez standardowe dane wejściowe, zależnie od wyboru, a dane wyjściowe mogą być albo prostym „Y” / „N”, albo wynikiem ufności, ponownie według twojej opcji.
Oto kolejny przykład poprawnego limeryka:
Była Młoda Dama, której oczy
były wyjątkowe pod względem koloru i wielkości.
Kiedy je szeroko otworzyła.
Wszyscy odwrócili się na bok
i zaczęli zaskoczeni
Ale poniższy wiersz wyraźnie nie jest limerykiem, ponieważ nie rymuje się:
Był tam starzec Pszczół,
który został ugodzony w ramię przez osę.
Na pytanie „Czy to boli?”
Odpowiedział: „Nie, to nie,
tak, cieszę się, że to nie był szerszeń”.
To też nie jest, ponieważ licznik jest całkowicie błędny:
Słyszałem o mężczyźnie z Berlina,
który nienawidził pokoju, w którym był.
Zapytałem, dlaczego
powiedziałby z westchnieniem:
„Widzicie, wczoraj wieczorem było kilku chuliganów, którzy świętowali Niedźwiedzie wygrywając cholerę Mistrzostwa Świata i były bardzo głośne, więc nie mogłem spać z powodu zgiełku. ”
Wskazówki
Oto kilka wskazówek, które możesz wykorzystać, aby zdecydować, czy Twój wkład jest limerykiem:
- Limeryki mają zawsze pięć linii.
- Linie 1, 2 i 5 powinny rymować się.
- Linie 3 i 4 powinny rymować się.
- Linie 1, 2 i 5 mają około 3 x 3 = 9 sylab, podczas gdy trzecia i czwarta ma 2x3 = 6 sylab
Zauważ, że żaden z nich oprócz pierwszego nie jest trudny i szybki: ocena 100% poprawności jest niemożliwa.
Zasady
Wpis powinien przynajmniej co najmniej poprawnie kategoryzować przykłady od 1 do 3 w sposób deterministyczny.
Wy są wolno używać dowolnego języka programowania, który chcesz, z wyjątkiem języków programowania kurs specjalnie zaprojektowanych do tego konkursu (patrz tutaj ).
Państwo nie może używać jakichkolwiek biblioteki oprócz swojego języka programowania w standardowych ofert.
Wy są wolno zakładać, że ten plik , słownik pronounciation CMU Sphinx, znajduje się w pliku o nazwie „c” w bieżącym katalogu.
Teraz nie wolno twardym kodu dla wejść testowych: Twój program powinien być ogólny Limerick Klasyfikator.
Wy są wolno zakładać, że wejście jest ASCII, bez specjalnego formatowania (jak w przykładach), ale program nie powinien być mylony przez interpunction.
Bonusy
Dostępne są następujące bonusy:
- Twój program wyświetla wynik jako limeryk? Odejmij 150 znaków bonus długości !
- Twój program również poprawnie identyfikuje sonety? Odejmij 150 znaków bonus dodatkowych !
- Twój program wyświetla wynik jako sonet, gdy jest używany w sonecie? Odejmij 100 znaków dodatkowego bonusu za dodatkową długość!
Wreszcie...
Pamiętaj, aby wspomnieć o bonusach, które Twoim zdaniem zasługujesz, jeśli w ogóle, i odejmij bonus od liczby postaci, aby osiągnąć swój wynik. Jest to konkurs golfa kodowego : wygrywa najkrótszy wpis (tj. Zgłoszenie o najniższym wyniku).
Jeśli potrzebujesz więcej (pozytywnych) danych testowych, sprawdź OEDILF lub Księgę bzdur . Negatywne dane testowe powinny być łatwe do skonstruowania.
Powodzenia!
źródło
code-challenge
z bonusów. Proszę przeczytać opisy znacznikówOdpowiedzi:
Python: 400-150-150 = 100
Najkrótszy scenariusz, jaki mogłem wymyślić, to ten ...
... ale nawet tego nie próbuj. Analizuje dostarczony słownik dla każdego napotkanego słowa, dlatego jest bardzo wolny. Ponadto generowany jest błąd, gdy słowa nie ma w słowniku.
Kod wciąż jednak spełnia wymagania: rozpoznanie, czy tekst przeszedł przez stdin jest limerykiem, sonetem, czy żadnym z nich.
Z jeszcze 20 znakami, oto zoptymalizowana wersja:
cechy
Stosowanie
Możliwe są 3 różne wyjścia:
Rozszerzony kod z objaśnieniami
źródło
sys.stdin.read()
lubopen(sys.argv[1]).read()
gdzieś) i przeliczyć.ECMAScript 6 (138 punktów; spróbuj w Firefox):
288
-150
premia punktowa za włączenie limeryka (ściągnięta z @MathieuRodic).Uwagi:
Oczekuje, że zmienna
c
będzie zawierać zawartość pliku słownika, ponieważ nie można odczytać plików w zwykłym skrypcie ECMAScript.ECMAScript nie ma standardowego wejścia, ale
prompt
jest ogólnie uważany za „standardowe wejście”; jednak ponieważprompt
konwertuje podział wierszy na spacje w większości (jeśli nie wszystkich) przeglądarek, akceptuję dane wejściowe ze zmienneji
.Nieskluczony kod:
źródło