Jak długo zostało?
Ostatnio robiłem pizzę za pomocą 5-minutowego timera na telefonie. Kiedy ktoś wszedł i zapytał mnie, jak długo zostało, na początku byłem przez chwilę zdezorientowany, jak odpowiedzieć na pytanie. Widzicie, jeśli licznik czasu w tej chwili był o 3:47, to zanim przeczytałem głośno „Trzy minuty i czterdzieści siedem sekund”, czas by się zmienił. Dlatego muszę znaleźć czas, timer osiągnie tylko jak skończę czytać ją.
Oto twoje wyzwanie: zautomatyzować ten proces. Biorąc pod uwagę czas w dowolnym odpowiednim formacie (ogranicznik „:” lub jako argument minutowy i drugi), wypisz najwcześniejszy czas od bieżącego momentu, którego odczyt zajmie tyle samo czasu, ile zajęłoby czasowi do. Zakładamy, że odczytanie każdej sylaby zajmuje 1 sekundę.
Dalsze zasady
- Musisz liczyć „minuty” i „sekundy” jako dwie z sylab każda, a także „i” między nimi.
- Gotowanie pizzy nigdy nie zajmie więcej niż 59:59.
- „11 minut i 0 sekund” to nie 10 sylab: musisz uprościć do „11 minut” (tj. 5 sylab). To samo dotyczy minut: „0 minut i 7 sekund” jest również liczone tylko jako 4 sylaby.
- Twój program może przekazać dane wyjściowe w dowolnym formacie: tablicy
[minutes, seconds]
lub nawet jako<minutes> minutes and <seconds> seconds
(normalny tekst wypisany). - Obowiązują standardowe luki.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Przypadki testowe
Wszystkie dane wejściowe jak (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)
Odnośnik do zliczania sylab
Dla odniesienia, oto liczba sylab w każdej liczbie do 59.
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
źródło
Odpowiedzi:
JavaScript (ES6),
112 106105 bajtówKrótsza wersja oparta na sugestii @EmbodimentofIgnorance
6 dodatkowych bajtów zapisanych przez @DaniilTutubalin
Pobiera dane wejściowe jako0
(minutes)(seconds)
. Zwraca[minutes, seconds]
lub jeśli nie ma rozwiązania.Wypróbuj online!
JavaScript (ES6),
126119 bajtówPobiera dane wejściowe jako0
(minutes)(seconds)
. Zwraca[minutes, seconds]
lub jeśli nie ma rozwiązania.Wypróbuj online!
Skomentował
źródło
30774612>>2*n%(n>12?20:26)&3
część, w której byłem zdezorientowany.g=x=>x&&(x%10==7)+(x==11?6:x<13?4:x<21|x%10<1?5:6)
może działać (niesprawdzone, ponieważ Internet nie działa i używa mojego telefonu)g()
Zapisałem kolejny bajt stamtąd, zwracając przeciwny wynik i XOR'ing z~d
.Python 3 ,
287285 bajtówWypróbuj online!
To nie jest bardzo sprytne rozwiązanie - jest przeważnie naprzód. Traktuje
„m: s”m jako oddzielne dane wejściowe(nie muszą być wypełniane)i dane wyjściowe (m, s). Zgłasza błąd, jeśli nie ma prawidłowego wyniku.Program w dużej mierze opiera się na niejawnym rzucaniu wartości logicznych na 0 i 1. Pierwszy wiersz wymaga danych wejściowych. Druga linia definiuje funkcję lambda y, która daje sylaby w liczbie - zakłada podstawę 3 sylab, a następnie dodaje 1, jeśli kończy się na 7, odejmuje 1, jeśli kończy się na 0, i odejmuje 1, jeśli jest w dziesiątkach i 2, jeśli zawiera pojedyncze cyfry. Dwanaście i jedenaście są ręcznie korygowane na końcu. Trzecia linia to lambda dla sylab w całym wyrażeniu. Wreszcie czwarta linia podaje czas po t sekundach. Piąty wiersz jest wyjściem - buduje tablicę wszystkich czasów, które spełniają problem, i wysyła pierwszy.
EDYCJA 1: Dzięki Matthew Andersonowi w komentarzach, 2 bajty zostały ogolone poprzez oddzielne wprowadzenie danych.
źródło
m=int(input()) s=int(input())
możesz zapisać 2 bajty.C # (interaktywny kompilator Visual C #) , 141 bajtów
Wypróbuj online!
źródło
Galaretka , 46 bajtów
Wypróbuj online!
Link monadyczny, przyjmujący za argument czas
[minutes, seconds]
i zwracający odpowiedni czas na wypowiedź jako[minutes, seconds]
lub[seconds]
jeśli mniej niż minutę.źródło
CJam , 102 bajty
Wypróbuj online!
Po prostu nudny stary binarny stół do wyszukiwania liczb magicznych, nic tu nie widać.
źródło