Sie sind an einen Stuhl gekettet. Unter Ihnen befindet sich ein riesiger Vulkan. Eine 12-Stunden-Uhr neben Ihnen tickt bedrohlich, und Sie sehen, dass Drähte von hinten bis zu einer Kette führen, die Sie in den Erdmittelpunkt fallen lässt. Auf die Uhr geklebt ist ein Hinweis:
Jeder Uhrzeiger hat eine Elektrode. Wenn sich beide Uhrzeiger in derselben Position befinden, fließt der Strom und Sie sterben. Das heißt, es sei denn, Sie können mir den genauen Zeitpunkt, zu dem dies eintreten wird, auf die nächste Minute genau mitteilen.
Sie haben einen Computer, der jede Programmiersprache kennt. Sie müssen das kürzeste Programm erstellen (dies ist Code-Golf und Standardschlupflöcher sind verboten), das Sie können, und dem bösen Wissenschaftler mitteilen, wie spät es sein wird. Ihr Programm sollte Eingaben (in jeder Methode) enthalten, die aus Stunde und Minute bestehen. Es sollte die nächste Stunde und Minute (bei jeder Methode) zurückgeben, in der dies auftritt.
Laut der OEIS-Seite sind die elf Überlappungszeiten:
00:00:00 plus 0/11 s, 01:05:27 plus 3/11 s,
02:10:54 plus 6/11 s, 03:16:21 plus 9/11 s,
04:21:49 plus 1/11 s, 05:27:16 plus 4/11 s,
06:32:43 plus 7/11 s, 07:38:10 plus 10/11 s,
08:43:38 plus 2/11 s, 09:49:05 plus 5/11 s,
10:54:32 plus 8/11 s.
Das nächste Mal wäre 12:00:00. Die Sekunden und ihre Bruchteile werden für diese Herausforderung nicht benötigt. Einfach auf die nächste Minute runden.
Testfälle:
0:00 (Or 12:00) > 1:05
1:00 > 1:05
11:56 > 12:00 (Or 0:00)
6:45 > 7:38
5:00 > 5:27
6:30 > 6:33 (round up)
Das Programm kann eine Funktion oder ein vollständiges Programm sein. Es ist mir egal, ob Sie 0:00
oder wählen 12:00
, und beide sind akzeptabel. Viel Glück!
Antworten:
JavaScript (Node.js) ,
5447 Byte (auf den nächsten gerundet)-7 Bytes. Danke @ user202729
Probieren Sie es online aus!
JavaScript (Node.js) ,
403344 Bytes (Runden in Richtung 0)-3 Bytes dank @Arnauld
-4 Bytes dank @Kevin Cruijssen
Erläuterung
Randnotiz: Ich bin mir ziemlich sicher, dass dies von jemandem mit mehr Kenntnissen in Mathematik Golf gespielt werden kann. Ich weiß kaum, wie man summiert und multipliziert
Probieren Sie es online aus!
quelle
05:00
Die Ausgabe sollte05:27
aber Ausgänge05:25
statt, und06:45
ausgeben sollte07:38
aber Ausgänge07:35
statt. Hier vielleicht eine nützliche Oeis-Sequenz: A17818111:56
scheinen00:05
anstelle von00:00
(oder12:00
) auszugeben .a=(a+=b>=a*5)%12
kann ein wenig verkürzt werden, aber ich bin nicht so gut darinMath.round(x)
nur0|x+.5
?J , 31 Bytes
Probieren Sie es online aus!
Die Möglichkeit, eine Zahl in J zu runden, besteht darin
0.5
, das Wort hinzuzufügen und zu übernehmen (<.
). Nimmt zu viele Bytes ...Erläuterung
12 60&#.
(Mixed Base Conversion) konvertiert von einem Array von [Stunde, Minute] in die seit 0:00 verstrichene Minute.Beachten Sie, dass sich die beiden Zeiger ab 12:00 Uhr alle 12/11 Stunden (dh 720/11 Minuten) einmal überlappen.
Runden Sie den gegebenen Wert daher einfach auf das nächste Vielfache von 720/11 auf (anders als sich selbst). Dies kann dadurch erreicht werden,
*
dass bis 11/720 (J hat ein rationales Zahlenliteral11r720
), das Wort ergreift<.
, inkrementiert>:
und dann mit 720/11 multiplizieren.Beachten Sie, dass "Multiplizieren mit 11/720" und "Multiplizieren mit 720/11" zwei umgekehrte Aktionen sowie "Konvertieren von [Stunde, Minute] in die Anzahl der verstrichenen Minuten" und umgekehrt sind. Glücklicherweise hat J
&.
(under) eingebaut , was nach dem Anwenden einer Transformation einige Aktionen umkehrt.Danach einfach die Rundung machen:
0.5
+
dann<.
.quelle
R , 68 Bytes
Probieren Sie es online aus!
Ausnutzung der Gleichung:
wo
index
ist 0 für die erste überlappende Position (00:00), 1 für die zweite und so weiter ...quelle
(a[...]...c(60,1))
6:30 > 6:33
.R 88 Bytes
Probieren Sie es online aus!
Erhöhen Sie die Zeit um eine Minute. Überprüft den Winkel. Wenn nicht nahe genug, Schleifen, bis eine Lösung gefunden wird.
quelle
Python 3 ,
8078 BytesDies ist meine erste Einreichung, daher ist konstruktive Kritik willkommen :)
-2 Bytes dank @Jo King
Probieren Sie es online aus! (78)
Probieren Sie es online aus! (80)quelle
Java 8,
8982 BytesFest. Mal sehen, ob ich später Golf spielen kann (wahrscheinlich durch Portieren einer anderen Antwort).
Probieren Sie es online aus.
Erläuterung:
MACHEN
quelle
f.apply(56).apply(10)
Renditen11 59
6:30 > 6:33
.Apl (Dyalog Unicode) , 28 Bytes
Probieren Sie es online aus!
Erläuterung
((⍳11),⍪0,+\∊5/⊂5 6)
ist eine Matrix von Zeiten, in denen sich die Zeiger überlappen (gedruckt am Ende des tio-Links)(⍸⌷1⊖⊣)⎕
, das Intervall findet, in dem sich die Eingabe in der Matrix befindet, und die Indizes darunter umlaufen.quelle
C # (.NET Core) , 70 Byte
Probieren Sie es online aus!
Ich denke, es besteht alle Testfälle. Obwohl der Fall h = 11 irgendwie hässlich ist
Erläuterung:
quelle
6:30 > 6:33
.JavaScript, 41 Bytes
Code-Snippet anzeigen
quelle
Gelee , 25 Bytes
Probieren Sie es online aus!
Eine monadische Verknüpfung, die die Zeit als Zwei-Ganzzahl-Liste verwendet und eine Zwei-Ganzzahl-Liste zurückgibt, die dem nächsten Mal entspricht, wenn sich die Hände berühren.
quelle
Perl 6 , 43 Bytes
Probieren Sie es online aus!
Ein anonymes Was auch immer-Lambda, das zwei Ganzzahlen benötigt, die Stunden und Minuten darstellen, und die Stunden und Minuten in umgekehrter Reihenfolge zurückgibt. Im Moment ist es nicht konsistent, wenn Sie eine ausgerichtete Zeit eingeben, ob es die nächste ausgerichtete Zeit ausgibt oder auf derselben bleibt. Ich warte auf OP, um auf diese Angelegenheit zu antworten, aber im Moment behandle ich sie als undefiniert.
Erläuterung
quelle