Wprowadzenie:
W domu mamy zegar, który wybija określoną wartość o każdej godzinie, ale także wybija raz na pół godziny. Tak więc od 0:01 do 12:00 włącznie uderza w następującej kolejności:
1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12
Wyzwanie:
Podając liczbę całkowitą n
, wypisz listę przedziałów czasowych, w których suma ostrzeżeń jest równa n
. Ponadto zawsze zaczynaj co najmniej 1 minutę przed tym przedziałem czasowym i zakończ co najmniej 1 minutę po tym przedziale czasowym (i co najwyżej 29 minut).
Na przykład, jeśli dane wejściowe to n=8
, dane wyjściowe mogą być:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Dla których przedziały czasowe mają następujące sumy, wszystkie równe 8
:
[1+1+2+1+3, 1+2+1+3+1, 3+1+4, 1+6+1, 1+7, 7+1, 8]
Zasady konkursu:
- Wyjście jest elastyczne. Możesz wyprowadzać jako obiekty Time (lub Date / DateTime), znaczniki czasu, ciągi znaków (z zerami wiodącymi lub bez nich), miejsca dziesiętne z
.29
/.31
/.59
/.01
(tj.0.29-3.01
Zamiast00:29-03:01
) itd. O ile jest to jasne, przed i po terminie .
Ponadto możesz sam wybrać kwotę. We wszystkich moich przykładach używam 1 minuty, ale możesz również wybrać 5 minut, 15 minut itp. Oznacza to również, że możesz na przykład użyć.4
/.6
/.9
/.1
(tj.0.4-3.1
Zamiast00:24-03:06
). Lista jest również elastyczna. Może to być lista / kolekcja, tablica, ciąg rozdzielany separatorem, drukowanie w wierszu do STDOUT itp.
Proszę podać, jaki wybór wyjściowy dokonałeś.Uwaga: Nie wolno wyprowadzać sum przedziałów czasowych jak wyżej, jest to tylko wspomniane jako wyjaśnienie. Musisz przedstawić ramy czasowe, w tym nieco przed i po nim. - Strajki owijają się od
12:00
do00:30
. Więc jeślin=14
dwa przedziały czasowe to11:29-00:31
i11:59-01:01
. - Dane wejściowe będą w zakresie
1 <= n <= 90
, w którym 90 jest sumą wszystkich możliwych uderzeń. - Zwracane ramy czasowe mogą być w dowolnej kolejności.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Obowiązują standardowe zasadyDo odpowiedzi , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
(wszystkie używają 1 minuty przed / po przedziałach czasowych i zerach wiodących)
Input: 8
Ouput:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Input: 14
Output:
[00:29-04:01, 00:59-04:31, 02:59-05:01, 04:29-06:31, 05:59-07:01, 11:29-00:31, 11:59-01:01]
Input: 90
Output:
[00:29-00:01, 00:59-00:31, 01:29-01:01, 01:59-01:31, 02:29-02:01, 02:59-02:31, 03:29-03:01, 03:59-03:31, 04:29-04:01, 04:59-04:31, 05:29-05:01, 05:59-05:31, 06:29-06:01, 06:59-06:31, 07:29-07:01, 07:59-07:31, 08:29-08:01, 08:59-08:31, 09:29-09:01, 09:59-09:31, 10:29-10:01, 10:59-10:31, 11:29-11:01, 11:59-11:31]
Input: 1
Output:
[00:29-00:31, 00:59-01:01, 01:29-01:31, 02:29-02:31, 03:29-03:31, 04:29-04:31, 05:29-05:31, 06:29-06:31, 07:29-07:31, 08:29-08:31, 09:29-09:31, 10:29-10:31, 11:29-11:31]
Input: 2
Output:
[00:29-01:01, 00:59-01:31, 01:59-02:01]
code-golf
arithmetic
date
clock
Kevin Cruijssen
źródło
źródło
.4
/.6
/.9
/.1
jest dozwolone (jest to 6 minut, jak powiedziałeś::24
/:36
/:54
/:06
).Odpowiedzi:
APL (Dyalog Classic) , 34 bajty SBCS
Wypróbuj online!
To rozwiązanie wykorzystuje
⎕io←1
(indeksowanie 1).Z prawej do lewej:
⍳12
jest1 2 3...12
⍪
zamienia go w wysoką cienką matrycę 12x11,
dodaje kolumnę 1s po lewej stronie⍪⍨
konkatenuje tę samą matrycę w pionie, więc teraz jest to macierz 24x2,
spłaszcza macierz w kolejności rzędów głównych, staje się wektorem o rozmiarze 48:1 1 1 2 1 3...1 12 1 1 1 2...1 12
+\
sumy częściowe:1 2 3 5 6 9...
∘.-⍨
różnice między każdą parą elementów, matrycą 48x48⍉
transponować⎕=
macierz boolowska 48x48 z 1s wszędzie tam, gdzie występuje oszacowane wejście (⎕
)⍸
pary współrzędnych, gdzie są jedynki.5×
połowę ich.4 .1∘+¨
dodaj 0,4 do pierwszej i 0,1 do drugiej współrzędnej w każdej parze12|
moduł 12∪
wyjątkowyźródło
.1
wynik? Również miła odpowiedź.<sup>SBCS</sup>
podobnie jak odpowiedź Adama.⍸
nie jest w Dyalog Classic. I tak, wiem, że jest to wyraźnie dozwolone, chciałem tylko wiedzieć, ile minut jest0.1
w wyjściu;)JavaScript (ES6), 104 bajty
Drukuje przedziały czasowe w
H.MM,H.MM
formacie.Wypróbuj online!
Używa zasadniczo tego samego algorytmu, co wersja nierekurencyjna poniżej.
Wersja nierekurencyjna, 117 bajtów
Wysyła rozdzielany spacjami ciąg przedziałów czasowych w
H.MM,H.MM
formacie.Przypadki testowe
Pokaż fragment kodu
Skomentował
źródło
APL (Dyalog Unicode) ,
6259 bajtów SBCSPełna treść programu. Monity o
n
. Drukuje listę dwuelementowych list w godzinach dziesiętnych.Wypróbuj online!
⍳24
d ndices 1… 2448⍴
cyklicznie r eshape do długości 48, czyli 1 ... 12,1 ... 12.5×
pomnóż przez to połowę⊂
załącz (aby użyć tej całej tablicy jako prawego argumentu dla każdego lewego argumentu)(
…),/¨
Dla każdego z poniższych zwraca wszystkie podlisty o tej długości:⍳48
d ndices 1… 48l←
Przechowywać wl
(na l engths)Teraz mamy wszystkie możliwe listy przebiegów dla każdej możliwej długości przebiegu.
,/
konkatenacja (dosł. redukcja konkatenacji) list podlist⊃
ujawnij (ponieważ redukcja zmniejszyła rangę z 1 do 0)(
…)¨
Zastosuj następującą funkcję do każdego:⊢/
ostatni (podświetlony prawy element redukujący) (czas zakończenia)⊃,
dodaj pierwszy element (czas rozpoczęcia)¯.1 .1+
dodaj do nich dziesiętne ujemne i dodatnie(
…)/
Filtruj te pary początkowe za pomocą:⍳12
d ndices 1… 121,¨
dodawaj1
do każdego∊
ε nlist (spłaszczyć)48⍴
cyklicznie r eshape do długości 48, tj 1,1,1,2 ... 1,11,1,12⊂
załącz (aby użyć tej całej tablicy jako prawego argumentu dla każdego lewego argumentu)l+/¨
dla każdego zl
(1… 48) zwraca sumy wszystkich podlist o tej długości∊
ϵ nlist (spłaszczyć)⎕=
porównaj z tym wejście numeryczne∪
zwracaj tylko unikalne elementy (pary początkowe)źródło
0.1
0.5
może zostać.1
.5
Python 3 ,
118116 bajtówWypróbuj online!
Czasowych są reprezentowane
(t1, t2)
,t1
it2
będąc dziesiętne reprezentujące godzin. Przesunięcie wynosi.1
lub 6 minut.źródło
Partia, 196 bajtów
Objaśnienie:
t
to czas w pół godziny, zaczynający się0
od00:30
. Liczba uderzeń w czasie t jest wówczas1
,1
,1
,2
,1
,3
itp Odejmując1
daje sekwencję0
,0
,0
,1
,0
,2
itd który jest całkowite przeplatane zerami. Można wówczas uzyskać poprzez termwise pomnożenia sekwencji0
,0
,1
,1
,2
,2
itp z sekwencją0
,1
,0
,1
,0
,1
itd. Obie te sekwencje mogą być łatwo obliczone za pomocą modulo i (całkowita) podziału.Następnie pozostaje zapętlić wszystkie 23 możliwe czasy rozpoczęcia, a następnie wziąć wszystkie 24 czasy uderzenia i odjąć liczbę uderzeń od danych wejściowych, drukując czasy, kiedy wynik jest zerowy.
Kod przechodzi przez pętlę, ale nie wyrządza żadnej szkody, ponieważ wartość wejściowa nie może być większa niż 90.
źródło
APL NARS, 559 bajtów
h (n) lub l (n) zwraca wszystkie reprezentatywne interwały w ciągu 0–24 godzin z n uderzeniami zegara. h (n) ma format zegara jako 0..11.0..59; zamiast tego l (n) ma format zegara jako test 0..23.0..59
źródło