Wie lange ist noch?
Vor kurzem habe ich mit einem 5-Minuten-Timer auf meinem Handy Pizza gemacht. Als jemand hereinkam und mich fragte, wie lange ich noch Zeit hätte, war ich zunächst für einen Moment verwirrt, wie ich die Frage beantworten sollte. Sie sehen, wenn der Zeitgeber zum gegenwärtigen Zeitpunkt um 3:47 war, hätte sich die Zeit geändert, als ich laut 'Drei Minuten und siebenundvierzig Sekunden' vorgelesen hatte. Daher muss ich eine Zeit finden, die der Timer erreicht, sobald ich mit dem Auslesen fertig bin.
Dies ist Ihre Herausforderung: Diesen Prozess zu automatisieren. Wenn Sie eine Zeit in einem geeigneten Format (":" mit Trennzeichen oder als Argument für Minute und Sekunde) angeben, geben Sie die früheste Zeit ab diesem aktuellen Zeitpunkt aus, für deren Auslesen die gleiche Zeit erforderlich ist wie für den Zeitgeber zu. Wir gehen davon aus, dass das Auslesen jeder Silbe 1 Sekunde dauert.
Weitere Regeln
- Sie müssen 'Minuten' und 'Sekunden' jeweils als zwei der Silben sowie ein 'und' dazwischen zählen.
- Die Pizza braucht nie mehr als 59:59, um zu kochen.
- '11 Minuten und 0 Sekunden 'ist nicht 10 Silben: Sie müssen zu '11 Minuten' (dh 5 Silben) vereinfachen. Gleiches gilt für Minuten: '0 Minuten und 7 Sekunden' werden ebenfalls nur als 4 Silben gezählt.
- Ihr Programm kann die Ausgabe in einem beliebigen Format ausgeben: als Array von
[minutes, seconds]
oder sogar als<minutes> minutes and <seconds> seconds
(normal ausgeschriebener Text). - Es gelten Standardlücken.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Testfälle
Alle Eingaben als (minutes, seconds)
(4, 47) = (4, 38) (Four MiNutes And ThirTy Eight SeConds - 9 syllables/seconds)
(1, 1) = (0, 56) (FifTy-Six SeConds - 5 syllables/seconds)
(59, 57) = (59, 46) (FifTy Nine Minutes And Forty Six SeConds - 11 syllables/seconds)
(0, 10) = null/error/0 (no positive answer)
Silbenzahlreferenz
Als Referenz ist hier die Anzahl der Silben in jeder Zahl bis zu 59 angegeben.
0,0 (does not need to be counted)
1,1
2,1
3,1
4,1
5,1
6,1
7,2
8,1
9,1
10,1
11,3
12,1
13,2
14,2
15,2
16,2
17,3
18,2
19,2
20,2
21,3
22,3
23,3
24,3
25,3
26,3
27,4
28,3
29,3
30,2
31,3
32,3
33,3
34,3
35,3
36,3
37,4
38,3
39,3
40,2
41,3
42,3
43,3
44,3
45,3
46,3
47,4
48,3
49,3
50,2
51,3
52,3
53,3
54,3
55,3
56,3
57,4
58,3
59,3
quelle
Antworten:
JavaScript (ES6),
112 106105 ByteEine kürzere Version basierend auf einem Vorschlag von @EmbodimentofIgnorance
6 weitere Bytes, die von @DaniilTutubalin gespeichert wurden
(minutes)(seconds)
[minutes, seconds]
Probieren Sie es online!
JavaScript (ES6),
126119 Bytes(minutes)(seconds)
[minutes, seconds]
Probieren Sie es online!
Kommentiert
quelle
30774612>>2*n%(n>12?20:26)&3
Teil, über den ich verwirrt war.g=x=>x&&(x%10==7)+(x==11?6:x<13?4:x<21|x%10<1?5:6)
funktioniert möglicherweise (ungetestet, da das Internet nicht funktioniert und ich mein Telefon benutze)g()
das entgegengesetzte Ergebnis zurückgegeben und mit XOR'ing gearbeitet habe~d
.Python 3 ,
287285 BytesProbieren Sie es online!
Es ist keine sehr clevere Lösung - es ist meist unproblematisch. Nimmt
'm: s'm und s als separate Eingänge(muss nicht aufgefüllt werden)und Ausgänge (m, s). Löst einen Fehler aus, wenn keine gültige Ausgabe vorliegt.Das Programm ist stark darauf angewiesen, Boolesche Werte implizit auf 0 und 1 zu setzen. Die erste Zeile nimmt Eingaben entgegen. Die zweite Zeile definiert eine Lambda-Funktion y, die die Silben in einer Zahl angibt - sie nimmt eine Basis von 3 Silben an, addiert 1, wenn sie mit 7 endet, subtrahiert 1, wenn sie mit 0 endet, und subtrahiert 1, wenn sie in den 10er und ist 2, wenn es sich um eine einstellige Zahl handelt. Zwölf und elf werden am Ende manuell eingestellt. Die dritte Zeile ist ein Lambda für die Silben im gesamten Ausdruck. Schließlich gibt die vierte Zeile die Zeit nach t Sekunden an. Die fünfte Zeile ist die Ausgabe - sie erstellt ein Array aller Zeiten, die das Problem lösen, und gibt die erste aus.
EDIT 1: Dank Matthew Anderson in den Kommentaren wurden 2 Bytes abgeschnitten, indem die Eingaben separat genommen wurden.
quelle
m=int(input()) s=int(input())
können Sie 2 Bytes sparen.C # (Visual C # Interactive Compiler) , 141 Byte
Probieren Sie es online!
quelle
Jelly , 46 Bytes
Probieren Sie es online!
Ein monadischer Link, der die Zeit als
[minutes, seconds]
und die entsprechende Zeit als[minutes, seconds]
oder in[seconds]
weniger als einer Minute als Argument verwendet .quelle
CJam , 102 Bytes
Probieren Sie es online!
Nur eine langweilige alte Binär-Nachschlagetabelle mit magischen Zahlen, hier nichts zu sehen.
quelle