Du liebst das Mittagessen. Sie sind jedoch auf Diät und möchten sicherstellen, dass Sie nicht versehentlich zweimal an einem Tag zu Mittag essen. Sie müssen also ein Programm erstellen, um sich zu vergewissern.
Eine Komplikation ist jedoch, dass Sie nach einem sehr seltsamen Zeitplan zu Mittag essen. Die Zeit, in der Sie zu Mittag essen, ist MONAT: TAG NACHMITTAG (Sie können UTC oder eine lokalisierte Zeitzone verwenden). Das ist richtig, wenn der Tag der 14. Juli ist , isst du um 19:14 Uhr zu Mittag .
Für Ihr Programm müssen Sie das aktuelle Datum und die aktuelle Uhrzeit verwenden (keine Eingabe vornehmen) und einen konsistenten Wahrheitswert ausgeben, wenn Sie an diesem Tag bereits zu Mittag gegessen haben (oder es ist jetzt Mittagszeit), oder einen konsistenten falschen Wert wenn du nicht hast.
Beispiele: (Laufzeit Programm => Ausgabe)
- 4. Mai 11:35 => false (Sie werden um 17:04 Uhr zu Mittag essen)
- 3. Juni 17:45 => false (Sie essen um 18:03 Uhr zu Mittag)
- 28. Juli 20:30 => wahr (du hast um 19:28 zu Mittag gegessen)
- 15. Dezember 15:25 => true (Sie haben um 12:15 Uhr zu Mittag gegessen)
- 29. Februar 14:29 => wahr (es ist genau Mittagspause)
- 12. Oktober 00:00 => false (Tag gerade erst begonnen)
Referenz:
Antworten:
Schnelle 3 , 310 Bytes
Hör zu!
Dies druckt
true
undfalse
, um ehrlich zu sein bzw. um falsch zu sein.quelle
05AB1E ,
1518 BytesProbieren Sie es online!
Erläuterung
quelle
Oktave , 61 Bytes
Probieren Sie es online!
Erläuterung:
Zuerst die Funktionen:
now()
Gibt die Uhrzeit in einem Dezimalformat zurück. Die Klammern sind optional.datestr
konvertiert eine Dezimalzahl in eine Zeichenfolge in dem Format, das im zweiten Argument angegeben iststr2num
wandelt einen String in eine Zahl umdiff
Nimmt den Unterschied zwischen zwei ZahlenNervenzusammenbruch:
Wir nehmen das aus der Mitte:
datestr(now,'mmddHHMM')
: Zuerst nehmen wir die aktuelle Zeitnow
als Eingabedatestr
und legen das Format festmmddHHMM
. Die Buchstaben bedeuten:mm = month
,dd = day
,HH = hour
,MM = minutes
undAM
gibt an, dass die Stunden auf ein 12-Stunden - Format sein sollten. Es sind keine Trennzeichen enthalten, um es so kurz wie möglich zu halten. Es gibtd = 07142117
auf der Zeit , diese Erklärung zu schreiben. Ich werdex
ab sofort auf diesen Teil verweisen .[(d=x)(1:4);d(5:8)]
: Speichert die obige Zeichenfolge alsd
, erstellt dann ein Array mit zwei Elementen, den ersten vier Zeichen und den 5-9 Zeichen. Dies gibt :Wo die Zahlen als Zeichenfolgen gespeichert werden, nicht Zahlen. Wir nennen das Ergebnis oben für
y
unten.str2num(y)
wandelt das Array von Zeichen in Zahlen um, wobei jede Zeile zu einer Zahl wird. Das gibt[714; 2122]
. Wir nennen das Ergebnis fürz
.diff(z)>1200
Nimmt die Differenz zwischen den beiden Zahlen und prüft, ob die aktuelle Zeit 1200 höher als das aktuelle Datum ist. Dies macht AM / PM aus. Dies gibt uns das gewünschte Ergebnis.quelle
Pyth,
222120 Bytes-1 Byte dank @ Mr.Xcoder
Versuche dies!
alter Ansatz,
2220 BytesVersuch es!
Erläuterung
quelle
&g.d6+.d4 12g.d5.d7
für 19 Bytes arbeiten? Ich bin mir nicht sicher und habe es noch nicht wirklich getestet, aber ...&g.d6+12.d4g.d5.d7
wäre eigentlich 18. Auch in der alten Herangehensweise glaube ich nicht, dass Sie die brauchen`
, und das würde 18 Bytes lang werden. Ich weiß nicht, ich könnte mich irren.g++720.d5*60.d4+*60.d6.d7
, die aber leider länger ist (25 Bytes). Es könnte jedoch eine Quelle der Inspiration sein und ich dachte, ich sollte es erwähnen.C #, 174 Bytes
Probieren Sie es online!
quelle
()=>...
)Action<bool>
, um Bytes zu speichern. Verwenden Sie dieseDateTime.Now
Option, um auf den Monat und den Tag zuzugreifen. Im Allgemeinenpublic
wird nicht benötigt undProgram
kann nur ein Buchstabe sein. Verwenden Sieusing D=System.DateTime;
, um Bytes zu speichern. Insgesamt schöne Idee, könnte aber viel Golf gespielt werden. Willkommen bei PPCG!PHP und andere Sprachen mit diesen allgemeinen Funktionen: ca. 28 bis 29 Bytes:
oder alternativ
Beide werden gedruckt.
evtl. mit
?1:0
je nach darstellung. Möglicherweise werden die Bytes gekürzt, wenn eine Sprache verwendet wird, die implizites Echo oder kein abschließendes ';' hat.Warum bekommt man die Werte in Variablen und den Rest, wenn er nicht benötigt wird? :)
date()
Lässt alles als Literale, die nicht definiert sind, und7 May 2017 17:22:43
übergibt den Ausdruck beispielsweise1722 - 1200 >= 507
an eval (). Byte gespeichert, indem es in das Äquivalent geändert wird1722 - 1199 > 507
.Wer sagt, dass eval tot ist? ;-)
quelle
Java, 81 Bytes
Probieren Sie es online!
Ungolfed:
quelle
java.util.Date
in die Byteanzahl aufzunehmen.Haskell,
135129 BytesDieses Auspacken ist ziemlich ärgerlich, vielleicht ist die Handhabung von Saiten besser geeignet
// edit: Pattern Guards schützen 5 Bytes
quelle
Mathematica,
656462 Bytes3 Programme
Dies sind jeweils ein Byte weniger, wenn sie
≥
in Mathematica als ein einzelnes Byte gezählt werden.Erklärungen
Date[]
gibt eine Liste im Formular zurück{y,m,d,h,m,s}
. SoDate[][[4;;5]]
sind die Stunden und Minuten der aktuellen Zeit.p=Date[][[#]]&;
erstelltp
eine Funktion, die die gewünschten Indizes aufnimmt und uns diese Teile des Datums gibt.{60,1}.#&
ist eine anonyme Funktion, die das Skalarprodukt von{60,1}
und die Eingabe verwendet, um eine Möglichkeit zum Vergleichen von Zeiten zu erhalten. Es ist ein Byte kürzer alsTimeObject
.p@2
entsprichtp[2]
der Zahl des Monats.+{12+p@2~Mod~12,0}
Fügt{12,0}
den Monat und das Datum hinzu, wenn wir nicht im Dezember sind, und fügt etwas{0,0}
anderes hinzu . (Danke, michi7x7!)>=
ist der Vergleichsoperator, aber wir können {Stunden, Minuten} nicht mit {bereinigtem Monat, Datum} eingabeweise vergleichen .../@
ordnet{60,1}.#&
beide Seiten der Ungleichung in Klammern zu, damit wir die Zeiten richtig vergleichen können.{60,1}.#&
, stellen sie#
die Eingabe für eine große anonyme Funktion dar und&
kennzeichnen das Ende.@Date[]
Wendet die große Funktion in ihrer Zeile (die Teile einer Liste extrahiert) auf die Datumsliste selbst an.[Date[][[#]]&]
Wendet die große Funktion in ihrer Zeile auf eine andere anonyme Funktion an, die Teile der Datumsliste extrahiert.Bonus
Abgesehen davon, wenn wir zwischen 1 Uhr morgens und 12:59 Uhr mittags aßen, konnten wir mit nur 25 Bytes sparen
{60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3)
.Sie können all dies testen, indem Sie den Code in die Wolfram Cloud-Sandbox einfügen und auf Gear-> Evaluate Cell klicken oder Shift + Enter oder Numpad Enter drücken.
quelle
13:01
zu24:31
Date[]
den Bonus durch ersetzen(Date[]+{0,12,0,0,0,0})
können (es gibt möglicherweise eine Möglichkeit, Golf zu spielen, die jedoch12UnitVector[6,2]
länger ist). Das Problem ist, dass wir an Daten wie dem 3. Dezember um 12:03 Uhr zu Mittag essen und nicht um 24:03 Uhr. Daher müssen wir 12 hinzufügen, außer im Dezember . Dies erfordert, dass wir entweder 1. einen Blick in das Datum werfen, um zu sehen, ob wir im Dezember sind oder nicht (wie in meinen Antworten), oder 2. eine Funktion schreiben, die untersucht, ob wir nachträglich auf 24: XX gegangen sind, was wäre länger.JavaScript (ES6), 75 Byte
Diese langen Funktionsnamen ...
quelle
Python 3 , 104 Bytes
Probieren Sie es online!
Alle datetime-Tests. Ich habe den 29. Februar durch den 28. Februar ersetzt, weil das ungültige Datum nicht funktioniert hat.
quelle
R , 92 Bytes
Probieren Sie es online!
quelle
q, 31 Bytes
Beispiel:
Dolmetscher gibt es hier
Alte Version
quelle
2$
Pad dreht6
sich6_
eher zu als_6
, so dass Sie möchten(-2)$
, aber Sie können diese zusätzlichen 3 Zeichen auslöschen, indem Sie die Abkürzung fürstring
as($)
... verwenden oder anstatt $ zum Auffüllen zu verwenden, "0" voranstellen und dann die letzten 2 nehmen Zeichen:{x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+
mmdd$\:x}
für 49 BytesJavaScript, 75 Byte
Welches entspricht dem folgenden Code:
quelle
t
kann verwendet werden, während ändernt=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
Python 2.7, 130 Bytes
Probieren Sie es online aus
Hinweis: Möglicherweise liegt ein Problem mit dem Schild vor. Bitte entschuldigen Sie das, weil ich IST verfolge und es ziemlich verwirrend ist, weil es jetzt 02:28 Uhr hier ist. Korrigieren Sie das Zeichen, wenn Sie das Gefühl haben, dass es falsch ist.
quelle
Perl, 45 Zeichen
Wenn ich eine Methode angeben muss, beträgt sie 45 für
sub c{...}
. Wenn ich drucken musssay ()||0
macht es 47. Ich werde das hinzufügen, wenn es eine Anforderung ist.quelle
you need to make a program to help you make sure
dass Snippets nicht zulässig sind - das heißt, eine der aufgeführten Ausgabemethoden wird allgemein als gültig angesehenperl -e
im Allgemeinen in Ordnung, aber andere haben Funktionen bereitgestellt, also habe ich sie in bearbeitet.Excel,
525049 BytesEingabe ist diese Formel in einer beliebigen Zelle.
Ausgabe ist entweder
TRUE
oderFALSE
.Die in Excel integrierte Datumsverarbeitung hilft sehr.
Die
TIME
Funktion gibt die Mittagspause des Tages als Zeitwert zurück, der bei einer Umrechnung in ein Datum verwendet wirdJan 0, 1900
. Wir vergleichen es mitNOW - TODAY
, um die aktuelle Zeit mit einem Datumswert von0
oder zu erhaltenJan 0, 1900
.2 Byte dank Wernisch
gespeichert 1 Byte dank Adam gespeichert
quelle
now()-today()
zumod(now(),1)
JavaScript, 62 Zeichen
Testcode unten:
Code-Snippet anzeigen
quelle
Excel VBA, 55 Bytes
Anonyme VBE-Direktfensterfunktion, die keine Eingabe annimmt und einen Booleschen Wert ausgibt, der angibt, ob ich im VBE-Direktfenster zu Mittag gegessen habe
quelle
Ruby , 64 + 7 = 71 Bytes
Benötigt das
-rtime
Flag, da es aus irgendeinem GrundTime::parse
wie die einzige Funktion ist, die es aus dem gesamtenTime
Modul benötigt.Probieren Sie es online! (druckt auch die aktuelle Uhrzeit aus)
quelle
Julia 0.6.0 99 Bytes
a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])
Julia hat eine eingebaute Funktion zur Verwendung der Uhr / des Kalenders des Computers. Mein Computer läuft unter Ubuntu 16.04 und hat bereits eine 12-Stunden-Uhr. Daher kann ich nicht sagen, ob das, was ich getan habe, mit einer anderen Uhr auf einem anderen Computer funktioniert, scheint aber auf meinem Computer zu funktionieren.
quelle
JavaScript ES6, 70 Bytes
Vielleicht nicht so richtig für einige Millisekunden ...
quelle
Matlab, 241 Bytes
Erläuterung: Zuerst erhalte ich das Datum als Zeichenfolge. Dann isoliere ich den Monat und den Tag. Da das Problem besagt, dass es immer als PM interpretiert wird, schreibe ich automatisch false, wenn die Uhrzeit in AM ist. Wenn die aktuelle Zeit in PM ist, fahre ich fort und vergleiche einfach die Zahlen der Zeit.
Hinweis: Ich habe es hier aus Gründen der Lesbarkeit etwas anders formatiert.
quelle