Kochasz lunch. Jednak jesteś na diecie i chcesz się upewnić, że przypadkowo nie zjesz lunchu dwa razy w ciągu jednego dnia. Musisz więc stworzyć program, który pomoże ci się upewnić.
Jednak jedną z komplikacji jest to, że jesz lunch według bardzo dziwnego harmonogramu. Czas, w którym jesz lunch, to MIESIĄC: DZIEŃ PM (możesz użyć UTC lub zlokalizowanej strefy czasowej). Zgadza się, jeśli dzień jest 14 lipca , jesz lunch o 19:14 .
W swoim programie musisz użyć bieżącej daty i godziny (nie przyjmuj danych wejściowych) i podać spójną wartość zgodną z prawdą, jeśli zjadłeś już lunch na dany dzień (lub teraz jest czas na lunch), lub spójną wartość fałszowania jeśli nie.
Przykłady: (Czas uruchomienia programu => wyjście)
- 4 maja 11:35 => fałsz (zjesz obiad o 17:04)
- 3 czerwca 17:45 => fałsz (zjesz obiad o 18:03)
- 28 lipca 20:30 => prawda (zjadłeś lunch o 19:28)
- 15 grudnia 15:25 => prawda (zjadłeś lunch o 12:15)
- 29 lutego 14:29 => true (dokładnie w porze lunchu)
- 12 października 12:00 => false (dzień właśnie się rozpoczął)
Odniesienie:
Odpowiedzi:
Swift 3 , 310 bajtów
Sprawdź to!
To drukuje
true
i odpowiedniofalse
dla prawdy i fałszu.źródło
05AB1E ,
1518 bajtówWypróbuj online!
Wyjaśnienie
źródło
Oktawa , 61 bajtów
Wypróbuj online!
Wyjaśnienie:
Najpierw funkcje:
now()
zwraca czas w formacie dziesiętnym. Nawiasy są opcjonalne.datestr
konwertuje liczbę dziesiętną na ciąg znaków w formacie podanym w drugim argumenciestr2num
konwertuje ciąg na liczbędiff
bierze różnicę między dwiema liczbamiAwaria:
Bierzemy to od środka:
datestr(now,'mmddHHMM')
: Najpierw bierzemy aktualny czasnow
jako dane wejściowedatestr
i określamy formatmmddHHMM
. Litery oznaczają:mm = month
,dd = day
,HH = hour
,MM = minutes
iAM
określa, że godziny powinny być w formacie 12-godzinnym. Nie dołączono żadnych separatorów, aby był jak najkrótszy. Wynikad = 07142117
z czasu pisania tego wyjaśnienia. Odniosę się do tej częścix
od teraz.[(d=x)(1:4);d(5:8)]
: Przechowuje ciąg powyżej, ponieważd
, a następnie tworzy tablicę z dwoma elementami, pierwsze cztery znaki, a następnie 5-9 znaków. To daje :Gdzie liczby są przechowywane jako ciągi znaków, a nie liczby. Wywołamy wynik powyżej dla
y
poniżej.str2num(y)
konwertuje tablicę znaków na liczby, przy czym każdy wiersz zamienia się w jedną liczbę. To daje[714; 2122]
. Wywołamy wynikz
.diff(z)>1200
bierze różnicę między dwiema liczbami i sprawdza, czy aktualny czas jest o 1200 wyższy niż bieżąca data. To dotyczy AM / PM. To daje nam pożądany rezultat.źródło
Pyth,
222120 bajtów-1 bajt dzięki @ Mr.Xcoder
Spróbuj tego!
stare podejście,
2220 bajtówSpróbuj!
wyjaśnienie
źródło
&g.d6+.d4 12g.d5.d7
działałby dla 19 bajtów? Nie jestem pewien i jeszcze go nie przetestowałem, ale ...&g.d6+12.d4g.d5.d7
miałby 18 lat. Poza tym w starym podejściu nie sądzę, żebyś go potrzebował`
, a miałoby to 18 bajtów długości. Nie wiem, mogę się mylić.g++720.d5*60.d4+*60.d6.d7
, ale niestety jest ono dłuższe (25 bajtów). Może to jednak być źródłem inspiracji i pomyślałem, że powinienem o tym wspomnieć.C #, 174 bajtów
Wypróbuj online!
źródło
()=>...
),Action<bool>
aby zapisać bajty. Użyj,DateTime.Now
gdy chcesz uzyskać dostęp do miesiąca i dnia. Zasadniczopublic
nie jest potrzebny iProgram
może być tylko jedną literą. Służyusing D=System.DateTime;
do oszczędzania bajtów. Całkiem fajny pomysł, ale można w niego dużo grać. Witamy w PPCG!PHP i inne języki z tymi powszechnymi funkcjami: około 28 do 29 bajtów:
lub alternatywnie
oba zostaną wydrukowane.
prawdopodobnie z
?1:0
zależnością od reprezentacji. Prawdopodobnie odcięte bajty, jeśli używany jest język, który ma ukryte echo lub nie ma końcowego „;”.Dlaczego mielibyśmy przenosić wartości na zmienne i całą resztę, kiedy nie jest to potrzebne :)
date()
pozostawia wszystko jako literały, które nie są zdefiniowane, więc na przykład7 May 2017 17:22:43
przekazuje wyrażenie1722 - 1200 >= 507
do eval (). Zapisano bajt, zmieniając go na ekwiwalent1722 - 1199 > 507
.Kto powiedział, że eval nie żyje? ;-)
źródło
Java, 81 bajtów
Wypróbuj online!
Nie golfowany:
źródło
java.util.Date
do liczby bajtów.Haskell,
135129 bajtówto rozpakowywanie jest dość denerwujące, być może lepiej nadaje się obsługa sznurka
// edycja: wzór chroni bezpieczne 5 bajtów
źródło
Mathematica,
656462 bajtów3 programy
Każdy z nich jest o jeden bajt mniej, jeśli
≥
liczy się jako pojedynczy bajt w Mathematica.Objaśnienia
Date[]
zwraca listę w formularzu{y,m,d,h,m,s}
. PodobnieDate[][[4;;5]]
godziny i minuty bieżącego czasu.p=Date[][[#]]&;
wykonujep
funkcję, która przyjmuje potrzebne nam wskaźniki i podaje te części daty.{60,1}.#&
to anonimowa funkcja, która pobiera iloczyn iloczynu{60,1}
i dane wejściowe, aby uzyskać sposób na porównanie czasów. Jest o jeden bajt krótszy niżTimeObject
.p@2
odpowiadap[2]
liczbie miesiąca.+{12+p@2~Mod~12,0}
dodaje{12,0}
miesiąc i datę, kiedy nie jesteśmy w grudniu, i dodaje{0,0}
inaczej. (Dzięki, michi7x7!)>=
jest operatorem porównania, ale nie możemy porównać {godzin, minut} z {skorygowanym miesiącem, datą} wpisowo .../@
odwzorowuje{60,1}.#&
obie strony nierówności w nawiasach, dzięki czemu możemy poprawnie porównywać czasy.{60,1}.#&
, używają#
do reprezentowania danych wejściowych do dużej anonimowej funkcji i&
do oznaczania końca.@Date[]
Stosuje dużą funkcję w swoim wierszu (który wyodrębnia części listy) do samej listy dat.[Date[][[#]]&]
Stosuje dużą funkcję w swoim wierszu do innej funkcji anonimowej, która wyodrębnia części listy dat.Premia
Nawiasem mówiąc, jeśli zjedlibyśmy lunch między 1:00 a 12:59, moglibyśmy zaoszczędzić 25 bajtów
{60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3)
.Możesz to wszystko przetestować, wklejając kod do piaskownicy Wolfram Cloud i klikając Gear-> Oceń komórkę lub naciskając Shift + Enter lub Numpad Enter.
źródło
13:01
do24:31
Date[]
premię na(Date[]+{0,12,0,0,0,0})
(może być sposób na grę w golfa, ale12UnitVector[6,2]
jest dłuższy). Problem polega na tym, że w datach takich jak 3 grudnia jemy lunch o 12:03, a nie 24:03, więc musimy dodać 12, z wyjątkiem grudnia . Wymaga to od nas: 1. zerknięcia w terminie, aby zobaczyć, czy jesteśmy w grudniu, czy nie (jak w moich odpowiedziach), lub 2. napisania funkcji, która sprawdza, czy poszliśmy do 24: XX po fakcie, co byłoby dłużej.JavaScript (ES6), 75 bajtów
Te długie nazwy funkcji ...
źródło
Python 3 , 104 bajty
Wypróbuj online!
Wszystkie testy daty i godziny. 29 lutego zastąpiłem 28 lutego, ponieważ nieprawidłowa data nie działała.
źródło
R , 92 bajty
Wypróbuj online!
źródło
q, 31 bajtów
Przykład:
Tłumacz jest dostępny tutaj
Stara wersja
źródło
2$
Pad okaże6
się6_
zamiast_6
, więc czego chcesz(-2)$
, ale można zrezygnować z tych dodatkowych 3 znaki za pomocą skrótów nastring
jak($)
... albo zamiast używania $ pad, prepend „0”, a następnie podjąć ostatnią 2 znaki:{x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+
mmdd$\:x}
za 49 bajtówJavaScript, 75 bajtów
Co jest równoważne z następującym kodem:
źródło
t
można użyć podczas modyfikacjit=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
Python 2.7, 130 bajtów
Wypróbuj online
Uwaga: może występować problem ze znakiem. Przepraszam, ponieważ śledzę IST i jest to dość mylące, ponieważ teraz jest 2:28. Popraw znak, jeśli uważasz, że jest zły.
źródło
Perl, 45 znaków
Jeśli będę musiał podać metodę, będzie to 45
sub c{...}
. Jeśli muszę wydrukować, tosay ()||0
nawet 47. Dodam to, jeśli jest to wymagane.źródło
you need to make a program to help you make sure
że fragmenty nie są dozwolone - co oznacza, że jedna z wymienionych metod wyjściowych jest ogólnie uważana za prawidłowąperl -e
ogólnie jest ok, ale inni udostępnili funkcje, więc dokonałem edycji.Excel,
525049 bajtówDane wejściowe to ta formuła w dowolnej komórce.
Wyjście jest albo
TRUE
alboFALSE
.Wbudowana obsługa Excela bardzo pomaga. Funkcja Zwraca dzień czas lunchu jako wartość czasu, który, w przypadku przekształcenia do daty, by wykorzystać . Porównujemy to z
TIME
Jan 0, 1900
NOW - TODAY
aby uzyskać bieżący czas z wartością daty0
lubJan 0, 1900
.Zaoszczędzono 2 bajty dzięki Wernisch
Zaoszczędzono 1 bajt dzięki Adamowi
źródło
now()-today()
namod(now(),1)
JavaScript, 62 znaki
Kod testowy poniżej:
Pokaż fragment kodu
źródło
Excel VBA, 55 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która nie przyjmuje danych wejściowych i generuje wartość logiczną reprezentującą, czy zjadłem lunch w bezpośrednim oknie VBE
źródło
Rubin , 64 + 7 = 71 bajtów
Wymaga
-rtime
flagi, ponieważ z jakiegoś powoduTime::parse
jest to jedyna funkcja wymagająca jej z całegoTime
modułu.Wypróbuj online! (drukuje również bieżący czas)
źródło
Julia 0.6.0 99 bajtów
a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])
Julia ma wbudowaną funkcję korzystania z zegara / kalendarza komputera. Mój komputer działa na Ubuntu 16.04 i ma już 12-godzinny zegar, więc nie mogę powiedzieć, czy to, co zrobiłem, działa na innym komputerze z innym zegarem, ale wydaje się, że działa na moim komputerze.
źródło
JavaScript ES6, 70 bajtów
Może nie tak w ciągu kilku milisekund ...
źródło
Matlab, 241 bajtów
Objaśnienie: Po pierwsze, otrzymuję datę jako ciąg. Następnie izoluję miesiąc i dzień. Ponieważ problem mówi, że zawsze jest interpretowany jako PM, to automatycznie piszę fałsz, jeśli czas jest w AM. Jeśli aktualny czas jest w PM, to kontynuuję i po prostu porównuję liczby czasu.
Uwaga: sformatowałem go tutaj nieco inaczej dla czytelności.
źródło