Wprowadzenie
Dzwonnica będzie dzwonić dzwonkami co godzinę i godzinę n
, przy n
czym jest to bieżąca godzina na 12-godzinnym zegarze.
Na przykład dzwonek zadzwoni 5 razy o 17:00 i 10 razy o 10:00.
Zadanie
Biorąc pod uwagę dwa razy w odpowiednim formacie, wypisz, ile razy zadzwoni dzwonek, w tym czas rozpoczęcia i zakończenia
Przykłady
"10am-12pm"
10+11+12= 33
[01:00, 05:00]
1+2+3+4+5 = 15
[11, 15]
11+12+1+2+3 = 29
[10:00pm, 10:00am]
10+11+12+1+2+3+4+5+6+7+8+9+10 = 88
Jeśli początek jest taki sam jak koniec, po prostu podajesz liczbę dzwonków dla tej godziny:
[5pm, 5pm]
5 = 5
Jak widać, możesz wybrać metodę wprowadzania, ale wynik musi być liczbą całkowitą (lub dopuszczalną alternatywą) dozwolone są końcowe / wiodące znaki nowej linii i spacje.
Uwaga:
- dane wejściowe mogą obejmować okres od popołudnia jednego dnia do rana następnego dnia.
- różnica między tymi dwoma czasami nigdy nie będzie większa niż 24 godziny.
- dane wejściowe są elastyczne, o ile wyraźnie określasz format danych wejściowych.
- twój wkład musi mieć wyraźne rozróżnienie między AM a PM.
pm
doam
, a tym samym przejść do drugiego dnia.Odpowiedzi:
JavaScript (ES6),
3835 bajtówRekurencyjnie dodaje bieżącą liczbę dzwonków do sumy. Nazywany jak
f(11,15)
; północ jest reprezentowana jako24
. Dostałem część~-
sztuczki od odpowiedzi Python @ xnor .Testowy fragment kodu
Pokaż fragment kodu
Wersja nierekurencyjna (Firefox 30+), 56 bajtów
Odpowiednik następującej funkcji ES6:
źródło
Python 2, 46 bajtów
Na podstawie mojej odpowiedzi JS. Formuła rekurencyjna f dla rozwiązania jest zdefiniowana w następujący sposób:
źródło
Python 2,
Równoważny5954 bajtówźródło
a=
części.a=
. To może być czysta lambda.y%24
.05AB1E , 13 bajtów
Z dużą pomocą Emigny .
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Python, 42 bajty
Funkcja rekurencyjna, która przyjmuje dwie liczby od 0 do 23. Poszerzanie
~x
do-x-1
dajeWyrażenie
(a+1)%12+1
konwertuje czas na liczbę dzwonków1
do12
. Następnie dolna granica jest zwiększana modulo 24 i dodawana jest funkcja wyniku rekurencyjnego. To znaczy, chyba że bieżąca godzina jest godziną końcową, w którym to przypadku się zatrzymujemy.Zamiast tego próbowałem napisać rozwiązanie czysto arytmetyczne, ale jak dotąd znalazłem tylko długie i niechlujne wyrażenia.
źródło
or
. Niezłe!Haskell,
4843 bajtówZastosowanie jest takie
startHour % endHour
, że oba dane wejściowe są podawane w formacie 24-godzinnym.edycja: dodano ulepszenie @ xnor, oszczędzając 5 bajtów
źródło
e
kiedye<s
, można filtrować zakress%e=sum[mod(x-1)12+1|x<-[s..e+24],x<=e||s>e]
. Następnie zapisuje bajt do przesunięcia w dół o 1 x:s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]
.C #, 73 bajty
Dopuszczalne dane wejściowe: liczby całkowite w zakresie [0,23].
To rozwiązanie nie korzysta z LINQ.
Pełny program z przypadkami testowymi:
źródło
Galaretka ,
17 16 1514 bajtówTryItOnline
W jaki sposób?
źródło
MATL , 14 bajtów
Format wejściowy jest jak w trzecim przykładzie w wyzwaniu, to znaczy dwie liczby w formacie 24-godzinnym.
Wypróbuj online!
Wyjaśnienie
Weź wejść
22
,10
jako przykład.źródło
PHP, 90 bajtów
Format wejściowy „[1,24]” między 1 a 24
W tym wyzwaniu, którego nie znoszę, dlaczego PHP przegrywa z innymi językami. Wolę pokazać wszystkie moje pomysły. Być może inny crack PHP znajdzie krótsze rozwiązanie.
99 bajtów
113 bajtów na minutę z min. I maks
okej, ten szalony pomysł działa z tablicą 149 bajtów wypełnia tablicę
$y[0]
i$y[1]
jeśli$_GET["b"][0]<=$_GET["b"][1]
tak,$y[1]
tonull
możemy ją zsumowaćarray_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1))
To może być golfowane w dół 124 bajtów
Teraz w tym momencie możemy zmniejszyć tablicę za pomocą tylko dwóch liczb całkowitych 101 bajtów Make 2 sumy
$x[0]
i$x[1]
list($f,$g)=$_GET[b];
jeśli
$v=($f>$g
następnie dodaj wartość do$x[$i<$f&$i>$g]
innej wartości dodanej do$x[$i>=$f&$i<=$g]
wyniku będzie znaleźć przypadekecho$x[!$v];
Po tym znalazłem sposób, aby obliczyć wynik bezpośrednio 112 bajtów
rekurencyjne 103 bajty
źródło
PHP, 69 bajtów
Ekstrakcja listy została zainspirowana odpowiedzią Jörga Hülsermanna, ale pozostałe podobieństwa są wynikiem zbieżnej ewolucji, a ponieważ jest ona znacznie krótsza, a warunki w pętli są wystarczająco różne, zamieszczam ją jako osobną odpowiedź.
Pobiera dane wejściowe jako 24 godziny (w porządku z 0 lub 24). Działaj jak:
źródło
$i>$a?24:0
ma taką samą długość jak($i>$a)*24
wiki.php.net/rfc/short_list_syntax Może chcesz skorzystać ze składni krótkiej listy, która jest nowa w[$x,$i,$a]=$argv;
bajtach 7,1 -2 Zanim nie przetestowałem, że jej nie użyję . W dzisiejszych czasach nienawidzę mnie bardziej, że nie znalazłem tego w ten sposób.Java,
72717876 bajtówEdytuj :
e
/clock
jest inicjowany.Nie golfowany:
źródło
a
, ad
, ib
? Pełna metoda ma sens, ale chyba, że coś poważnie mi brakuje, myślę, że musisz jeszcze raz spojrzeć na swoją golfę i spróbować ją wykonać. Dla dalszego golfa:(time+1)
może się stać++time
.a+=a?
powinien byćb+=a?
. Możeszwhile
też zagrać w golfa o 2 bajty, zmieniając go w bezcielesny,for
taki jak ten:(a,b,c,d)->{int e;b+=a?12:0;d+=c?12:0;for(;b!=d;e+=b%12,b=++b%24);return e;}
QBIC ,
9047 bajtówOto odpowiedź wypisująca tylko całkowitą liczbę dzwonków:
Dane wejściowe mieszczą się w zakresie
1-24
;a
ib
są wejściami (::
w kodzie),c
śledzą am / pm,d
to całkowita liczba dzwonków. Po odliczeniu wszystkich godzin_Xd
program zostaje zakończony i trwa drukowanied
.OK, źle zrozumiałem pytanie i pomyślałem, że
1+2+3...=
tekst jest częścią wyniku, więc napisałem:Teraz koduję poprawną odpowiedź ...
źródło
Pyth - 11 bajtów
Pakiet testowy .
źródło
23, 1
wyjściowych,144
kiedy należy je wydrukować24
. (Taki przypadek powinien oczywiście być w trakcie testów!)C #, 76 bajtów
źródło
a=23
ib=0
wydaje się być najbardziej oczywistym przykładem.Perl, 36 bajtów
Obejmuje +1 dla
-p
Podaj czas rozpoczęcia i zakończenia w formacie 24-godzinnym w linii na STDIN:
toll.pl
:źródło
Java 7, 64 bajty
Metoda rekurencyjna oparta na odpowiedzi Python 2 na @ETHproductions . Wykorzystuje 24-godzinny zegar wejściowy.
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wydajność:
źródło
Partia,
16891 bajtówEdycja: Zapisano 77 bajtów, przechodząc do zamkniętego formularza odpowiedzi.
%1
i%2
są dwoma parametrami wiersza poleceń@
Wyłącz domyślne ustawienie Batch, które polega na powtórzeniu poleceniacmd/c
Fool Batch, aby natychmiast wydrukować wynik obliczeńset/a
Wykonaj obliczenia numerycznex=(%1+23)%%24,
Normalizuj godzinę początkową jako liczbę godzin od 1 w nocy (1PM również by działała, ale 11 nie jest krótszy niż 23)y=x+(%2+24-%1)%%24,
Normalizuj godzinę końcową, aby wyprzedzić godzinę początkową, aw razie potrzeby przejdź do następnego dniaz=y%%12+1,
Liczba dzwonków uderzonych w godzinie zakończenia(y/12-x/12)*78+
Liczba dzwonków ze względu na dodatkowe pół dniaz*~-z/2-
Liczba dzwonków od 1 do godziny zakończenia włącznie(x%%=12)
O jeden mniej niż liczba dzwonów uderzonych w godzinie początkowej*-~x/2
Liczba dzwonków, które zostałyby uderzone od 1 do godziny początkowej, ale nie wliczając godziny początkowejźródło
C, 56 bajtów
źródło
> <> , 48 + 2 = 50 bajtów
Oczekuje się, że dane wejściowe będą obecne na stosie przy starcie programu, więc +2 bajty dla
-v
flagi. Dane wejściowe to dwie liczby całkowite określające godzinę na zegarze 24-godzinnym, więc10am - 10pm
podano je jako10 22
.Wypróbuj online!
źródło
Cubix ,
4544 bajtówZaoszczędzono 1 bajt dzięki produktom @ETH
Mój pierwszy wypad do Cubix ...
Lub skostniałe:
Możesz to wypróbować u tłumacza online . Dane wejściowe są w formacie 24-godzinnym, z pierwszym czasem zakończenia. Na przykład od 17:00 do 1:00 wejście powinno być
1 17
.Poprzednia wersja, 45 bajtów:
źródło
)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;
Qbasic, 112 bajtów
źródło
Python, 73 bajty
Byłoby więc znacznie krócej, jeśli nie muszą wspierać
pm
sięam
. Korzystam z rekurencji, aby to wspierać.Wypróbuj online
Bez obsługi
pm
doam
(45 bajtów):źródło