„YMCA” to popularna piosenka disco autorstwa Village People, która ma dobrze znany taniec . Napisz najkrótszy program, który wypisze wielkie litery „Y”, „M”, „C” i „A” zsynchronizowane z refrenem piosenki.
Zasadniczo jedna litera przypada na każdą linię wysłaną na standardowe wyjście. Ma to przede wszystkim na celu uproszczenie programów podlegających buforowaniu wyjściowemu biblioteki standardowej C (wydruk nowego wiersza opróżnia bufor wyjściowy), więc możesz pominąć niektóre lub wszystkie nowe wiersze, jeśli takie pominięcie spowodowałoby skrócenie programu.
Twój program, który jest uruchamiany w tym samym czasie co muzyka, musi wypisać literę „Y” w ciągu 0,125 s każdego z tych czasów po uruchomieniu (w sekundach; ustaliłem je na podstawie teledysku opublikowanego na YouTube).
45.766 49.611 60.889
64.661 109.816 113.591
124.810 128.687 173.830
177.620 188.950 192.724
204.013 207.739 219.057
Litery „M”, „C” i „A” oznaczają odpowiednio 0,930 s, 1,395 s i 1,628 s po każdym „Y”. Do celów testowych te czasy względne są przeliczane na czasy bezwzględne poprzez dodanie ich do czasu poprzedzającego „Y”.
Napisałem program testowy i odpowiedni przykładowy program w C, który zakłada, że po każdej literze następuje nowa linia (chociaż nie jest to reguła konkurencji). Jest napisany dla systemu Linux i nie będzie działał w systemie Windows bez użycia Cygwin. Jeśli nie możesz przetestować swojego zgłoszenia za pomocą programu testowego, przynajmniej sprawdź swoje przesłanie względem filmu na YouTube .
Jeśli Twoje zgłoszenie wymaga specjalnej opcji wiersza polecenia, aby zachowywać się poprawnie, ta opcja wiersza poleceń liczy się przy obliczaniu wyniku. Jednak czas uruchamiania interpretera nie jest liczony, a program testowy można zmodyfikować w celu dostosowania go w razie potrzeby.
Chociaż wątpię, by istniał, muszę powiedzieć, że używanie funkcji języka programowania lub biblioteki zaprojektowanej specjalnie do tego zadania jest zabronione.
Rubinowy
180135 124 118 108104źródło
%w(Y M C A)*15
zamiast'Y M C A'.split*15
generować litery? Również, żeeach
prawdopodobnie może byćmap
choć nie trzeba wyjście. Och, i możesz pisać10.0
jak1e1
!Python
2.6(82) (214) (219) (196) (185) (152)Naprawiony. Wystąpił przeciwko wideo i wydaje się dokładny. Oszczędność kilku znaków dzięki zmniejszeniu precyzji z 3 do 2 w większości przypadków (dzięki za wskazówkę @JPvdMerwe).
Jedynym problemem jest to, że tester wykazuje ogromną rozbieżność w taktowaniu. Zaczyna się od synchronizacji i próbuje wrócić do synchronizacji. W dwóch przypadkach testowych na początku było ponad 175 sekund braku synchronizacji i powróciło w ciągu 0,342 i 0,451 sekundy od synchronizacji.
źródło
-u
opcję wiersza poleceń w policzeniu.-u
jest niezbędny dla programu testującego (który używa potoku), a nie do wyjścia bezpośrednio do terminala.Mathematica, 157
Obejrzałem cały film, aby potwierdzić czas. YMC A .... YMC A ...
Może być krótszy z mniejszą precyzją, ale musiałbym ponownie obejrzeć wideo, aby potwierdzić, że nie było wyłączone o więcej niż .125 na końcu. lol
źródło