Zegar analogowy ma 2 wskazówki *: Godzina i minuta.
Z upływem czasu wskazówki te okrążają tarczę zegara. Każdy pełny obrót wskazówki minutowej powoduje 1/12 obrotu wskazówki godzinowej. 2 pełne obroty wskazówki godzinowej oznaczają cały dzień.
Ponieważ te dłonie są przymocowane do tego samego punktu centralnego i obracają się wokół tego punktu, zawsze możesz obliczyć kąt między dłońmi. W rzeczywistości istnieją dwa kąty w danym momencie; Większy i mniejszy (czasem oba będą równe 180, ale to nie jest ważne)
* Nasze hipotetyczne zegary nie mają używanych wskazówek
Zadanie
Biorąc pod uwagę czas w formacie 24-godzinnym, wyprowadzaj mniejszy kąt między dłońmi, w stopniach. Jeżeli dłonie są naprzeciwko siebie nawzajem (takich jak na 6:00
, 18:00
itp) Wyjście 180
Zasady
Wejście może być traktowana jako: - Separator oddziela łańcuch: 6:32
, 14.26
- 2 oddzielne wartości, łańcuchy lub ints: 6, 32
, 14, 26
- Tablica 2 Wartości, łańcuchów lub wskazówki: [6, 32]
,[14, 26]
Można też ewentualnie określić, że odpowiedź wymaga wejścia być wzmocniony do 2 cyfr (zakładając, że ma strun), czyli: 06:32
, 06, 32
,[06, 32]
Można ewentualnie również w odwrotnej kolejności z wejść przy minutę i godziny, to znaczy: 32:6
, 32, 6
,[26, 14]
Godzina będzie liczbą całkowitą pomiędzy 0
i 23
(włącznie) Minuta będzie wartością całkowitą pomiędzy 0
i 59
(włącznie)
Możesz założyć, że wskazówka minutowa przeskakuje co 6 stopni wzdłuż twarzy (jedna równa pozycja dla każdej wartości minutowej)
Możesz założyć, że wskazówka godzinowa zaskoczy co 0,5 stopnia wzdłuż twarzy (jedna równomiernie ustawiona pozycja dla twarzy wartość każdej minuty na godzinę)
Dane wyjściowe należy podawać w stopniach, a nie w radianach. Możesz podać końcowe .0
liczby całkowite
Punktacja
To jest golf golfowy, więc wygrywa najmniej bajtów w każdym języku !
Przypadki testowe
Input: 06:32
Output: 4
Input: 06:30
Output: 15
Input: 18:32
Output: 4
Input: 06:01
Output: 174.5
Input: 00:00
Output: 0
Input: 00:01
Output: 5.5
Input: 12:30
Output: 165
Input: 6:00
Output: 180
Input: 23:59
Output: 5.5
00:59 -> 35.5
(mała wartość przy dużej wartości m może spowodować, że niektóre implementacje zakończą się niepowodzeniem).Odpowiedzi:
JavaScript (ES6),
41 4039 bajtówPrzyjmuje dane wejściowe jako
(h)(m)
.Wypróbuj online!
W jaki sposób?
Zamiast pracować bezpośrednio w zakresie[0..360] , definiujemy zmienną tymczasową x w zakresie [0..4] :
Kąt w stopniach podaje:
Jednak formuła jest zaimplementowana nieco inaczej w kodzie JS, ponieważ zdecydowanie chcemy uniknąć używania długich
Math.abs()
iMath.min()
.Zamiast obliczać wartość bezwzględną, wymuszamy wartość dodatnią w[ 0..12 ] , obliczając:
I zamiast obliczać minimum, określamy, w którym przypadku robimy po prostu bitowe AND z2) - i dlatego właśnie wybraliśmy przedział ograniczony siłą 2) .
źródło
Galaretka ,
1412 bajtówWypróbuj online!
Monadyczny link, który zajmuje czas jako listę dwóch liczb całkowitych: godzina, minuta.
Dzięki @JonathanAllan za zapisanie 2 bajtów!
Wyjaśnienie
źródło
(-180, 180]
która jest równoważna (mod 360). Te wbudowane ...Ø°
for360
i“<¿‘
for60,11
. Tak jakד<¿‘Iæ%Ø°AH
TIOMATL, 18 bajtów
Akceptuje dwa wejścia godzin, a następnie minuty. Używa tej samej metody co ta odpowiedź
Wypróbuj w MATL Online
Wyjaśnienie
źródło
180
zamiast0
?Wolfram Language (Mathematica) ,
302928 bajtówWypróbuj online!
wersja bez golfa:
Argument funkcji
# = {h,m}
zawiera godzinę i minutę. Ta długość dwóch lista jest interpretowany jako nosiciela i kropka produktem z{30,-5.5}
oblicza:#.{30,-5.5} = 30*h-5.5*m
. Następnie obliczamy moduł symetryczny 360 zMod[#.{30,-5.5}, 360, -180]
podaniem kąta w przedziale -180 .. + 180.Abs
przyjmuje jego wartość bezwzględną.Ponieważ wszyscy zaangażowani operatorzy są liniowi, możemy pomnożyć i podzielić wszystkie pojawiające się liczby, jednak są one najwygodniejsze. Wyciągając czynnik z
5
wyrażenia i dzieląc wszystkie liczby w wyrażeniu przez 5, liczba bajtów jest minimalizowana.źródło
Alchemik , 134 bajty
Wypróbuj online!
Wyjaśnienie
Początkowe ustawienia. Wprowadza godziny i minuty do
h
orazm
, ustawia bieżący kątd
na 360 stopni (720 pół stopnia), ustawiaa
obliczanie kąta głównego i ustawia flagę wyjściową.Każda godzina dodaje 30 stopni, a każda minuta odejmuje 5,5 stopnia.
Chociaż
r
flaga (rewers) nie jest ustawiona, każdyd
atom powinien przenieść jedena
atom dob
. Dzieje się tak po wyczerpaniu minut, aby uniknąć „warunków wyścigu”. Gdy nie ma juża
atomów, ustawr
odwrócenie tego przepływu.Pamiętaj, że ta druga reguła może być wyzwalana wiele razy, a nawet może zostać uruchomiona przed regułą konfiguracji początkowej. Nic to nie szkodzi, więc nie trzeba temu zapobiegać.
0x
Stan obsługi przez przypadek kant: gdy wejście jest 6:00, nie maa
atomów chwili gdy koniec zakończony program, ale sąx
atomy jeśli wynik końcowy jest co najmniej jeden stopień.Odwrotna sytuacja: gdy podpisany kąt jest większy niż 180 stopni, przesuń
b
atomy,a
aby zmniejszyć kąt wyjściowy. Przestań cofać, gdy kąt osiągnie „360”.Kiedy wszystkie atomy stopnia zostaną zużyte, podziel przez 2, aby uzyskać kąt wyjściowy.
Po wykonaniu tej czynności wypisuj dane dokładnie raz, używając
f
flagi z początkowej konfiguracji.źródło
Python 3.8 (wersja wstępna) ,
4543 bajtów-2 bajty dzięki Erikowi .
Wypróbuj online!
h%12
- godzina w formacie 12-godzinnymh%12*30
- kąt wskazówki godzinowej o pełnej godziniem/2
- kąt przesunięcia wskazówki godzinowej wm
minutachh%12*30+m/2
- aktualna pozycja wskazówki godzinowej jako kątm*6
- kąt wskazówki minutowej (360°/60 = 6°
)źródło
Stax , 15 bajtów
Uruchom i debuguj
m =
liczba minut od północyd = 5.5 * m
min(d % 360, -d % 360)
.źródło
C # (interaktywny kompilator Visual C #) ,
4745 bajtówWypróbuj online!
źródło
Węgiel drzewny , 22 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe jako dwie liczby całkowite. Wyjaśnienie:
źródło
Perl 6 , 28 bajtów
Wypróbuj online!
Wykorzystuje kilka sztuczek skradzionych z innych odpowiedzi i oblicza
źródło
Python 3 , 40 bajtów
Wypróbuj online!
h*30
- kąt między południem a godziną, wh
której jest minuta0
; jeśli godzina jest równa lub większa niż 12, kąt ten może być równy lub większy niż 360 °m*6
- kąt między południem a minutową wskazówkąm*.5
- kąt, w którym wskazówka godzinowa przesunęła się do przodu od pełnej godziny pom
minutach (np. jeśli jest 4:24, wskazówka godzinowa przesunęła się o 12 stopni do przodu od pozycji, w której znajdowała się o godzinie 4)h*30-m*5.5
- jeden z dwóch kątów między wskazówką godzinową a wskazówką minutową; współczynnik dlam
Is5.5
, BOm*6-m*.5=m*5.5
; to wciąż nie jest odpowiedź, ponieważ może to być wartość większa niż 360 ° (np .: ifh,m=13,0
) lub mniejsza niż 0 ° (np: ifh,m=12,30
)(h*30-m*5.5)%360
- ten moduł uwzględnia przypadki, w których powyższa obliczona wartość nie mieści się w przedziale od 0 do 360 °; to wciąż nie jest odpowiedź, ponieważ może to być wzmacniacz dwóch kątów, a my chcemy jak najściślej180-abs(180-(h*30-m*5.5)%360)
- to jest wynik końcowy; ogólna zasada jestx-abs(x-y)
równoważnamin(y,x-y)
, co dałoby prawidłowy wynikźródło
Tcl ,
71745954 bajtówWypróbuj online!
zapisano 5 bajtów za pomocą wyrażenia lambda
źródło
Python 3,
5857 bajtów-1 / -2 Dzięki @Shaggy
Naiwne wdrożenie przyjmuje dane w formie
[6,32]
. Niektóre bajty można prawdopodobnie szczególnie zgolić z ostatniej linii.Python 2,
5250 bajtówźródło
30*h-5.5*m
powinien zaoszczędzić kilka bajtów.def
stylu powinna również zapisać niektóre bajty.Perl 5
-MList::Util=min -p
, 37 bajtówWypróbuj online!
Pobiera dane wejściowe jako godziny, a następnie minuty w osobnym wierszu, ponieważ zapisał kilka bajtów.
źródło
[R], 45 bajtów
źródło
Japt , 16 bajtów
Spróbuj
źródło
> <> , 17 bajtów
Wypróbuj online! (6:32)
Pobiera dane wejściowe jako stos h, m na stosie.
Wyjaśnienie
źródło
05AB1E , 16 bajtów
Zajmuje godziny jako pierwsze wejście, minuty jako drugie.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zasadniczo implementuje następującą formułę:
źródło
Pyret, 59 bajtów
źródło