"YMCA" ist ein populärer Disco-Song der Village People, der einen bekannten Tanz hat . Schreiben Sie das kürzeste Programm, um die mit dem Chorus des Songs synchronisierten Großbuchstaben "Y", "M", "C" und "A" auszugeben.
In der Regel wird in jeder Zeile, die an die Standardausgabe gesendet wird, ein Buchstabe eingefügt. Dies dient in erster Linie dazu, Programme zu vereinfachen, die der Ausgabepufferung der C-Standardbibliothek unterliegen (durch Drucken einer neuen Zeile wird der Ausgabepuffer geleert). Sie können also einige oder alle dieser neuen Zeilen weglassen, wenn dies zu einer Verkürzung Ihres Programms führen würde.
Ihr Programm, das gleichzeitig mit der Musik gestartet wird, muss nach dem Start innerhalb von jeweils 0,125 s den Buchstaben "Y" ausgeben (in Sekunden; ich habe dies aus dem auf YouTube geposteten Musikvideo ermittelt).
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
Die Buchstaben "M", "C" und "A" kommen jeweils 0,930 s, 1,395 s und 1,628 s nach jedem "Y". Zu Testzwecken werden diese relativen Zeiten in absolute Zeiten umgewandelt, indem sie zur Zeit des vorhergehenden "Y" addiert werden.
Ich habe ein Testprogramm und ein entsprechendes Beispielprogramm in C geschrieben, in dem angenommen wird, dass jedem Buchstaben eine neue Zeile folgt (obwohl dies keine Wettbewerbsregel ist). Es ist für Linux geschrieben und funktioniert nicht unter Windows ohne Cygwin. Wenn du deine Einsendung nicht mit dem Testprogramm testen kannst, überprüfe deine Einsendung zumindest anhand des YouTube-Videos .
Wenn für Ihre Übermittlung eine spezielle Befehlszeilenoption erforderlich ist, um ordnungsgemäß zu funktionieren, wird diese Befehlszeilenoption bei der Berechnung Ihrer Punktzahl berücksichtigt. Die Startzeit eines Interpreters zählt jedoch nicht für Sie, und das Testprogramm kann bei Bedarf geändert werden.
Obwohl ich bezweifle, dass es eine solche gibt, muss ich sagen, dass die Verwendung einer speziell für diese Aufgabe entwickelten Programmiersprachenfunktion oder Bibliothek verboten ist.
Ruby
180 135 124 118 108104quelle
%w(Y M C A)*15
anstatt'Y M C A'.split*15
die Briefe zu generieren? Auch daseach
könnte wohl eine seinmap
, obwohl du die Ausgabe nicht brauchst. Oh, und du kannst schreiben10.0
wie1e1
!Python2.6 (
82) (214) (219) (196) (185) (152)Fest. Ist gegen das Video gelaufen und scheint korrekt zu sein. Sparte leise ein paar Zeichen, indem du in den meisten Fällen die Genauigkeit von 3 auf 2 reduzierst (danke für den Tipp @JPvdMerwe).
Das einzige Problem ist, dass der Tester eine enorme Abweichung in den Timings aufweist. Es startet nicht mehr synchron und versucht, wieder synchron zu werden. In den beiden Testfällen war es zu Beginn mehr als 175 Sekunden nicht synchron und kam innerhalb von 0,342 und 0,451 Sekunden zurück, nachdem es wieder synchron war.
quelle
-u
Befehlszeilenoption in die Zählung aufnehmen müssen.-u
ist für das Testerprogramm (das eine Pipe verwendet) erforderlich, nicht für die direkte Ausgabe an ein Terminal.Mathematica, 157
Ich habe mir das gesamte Video angesehen, um das Timing zu bestätigen. YMC A .... YMC A ...
Mit geringerer Genauigkeit könnte es kürzer sein, aber dann müsste ich mir das Video noch einmal ansehen, um zu bestätigen, dass es am Ende nicht mehr als .125 abgefallen ist. lol
quelle