Ты любишь обедать. Тем не менее, вы находитесь на диете и хотите убедиться, что вы случайно не пообедаете дважды за один день. Поэтому вам нужно составить программу, которая поможет вам убедиться в этом.
Однако, одно осложнение состоит в том, что вы едите обед по очень странному графику. Время обеда - МЕСЯЦ: ДЕНЬ PM (вы можете использовать UTC или местный часовой пояс). Это верно, если день 14 июля , вы едите обед в 7:14 вечера .
Для вашей программы вам нужно использовать текущую дату и время (не вводите данные) и выводить постоянное истинное значение, если вы уже съели обед за день (или сейчас обеденное время), или постоянное ложное значение если нет
Примеры: (Время запуска программы => вывод)
- 4 мая 11:35 => false (вы будете обедать в 17:04)
- 3 июня, 17:45 => false (вы будете обедать в 18:03)
- 28 июля 20:30 => правда (вы ели обед в 7:28 вечера)
- 15 декабря 15:25 => правда (вы пообедали в 12:15)
- 29 февраля 14:29 => правда (это точно обеденное время)
- 12 октября, 12:00 => false (день только начался)
Ссылка:
Ответы:
Swift 3 , 310 байт
Проверьте это!
Это печатает
true
иfalse
для правдивых и фальшивых соответственно.источник
05AB1E ,
1518 байтПопробуйте онлайн!
объяснение
источник
Октава , 61 байт
Попробуйте онлайн!
Объяснение:
Сначала функции:
now()
возвращает время в десятичном формате. Скобки не являются обязательными.datestr
преобразует десятичное число в строку в формате, указанном во втором аргументеstr2num
преобразует строку в числоdiff
берет разницу между двумя числамиСломать:
Мы берем это с середины:
datestr(now,'mmddHHMM')
: Сначала мы берем текущее время вnow
качестве входных данныхdatestr
и указываем форматmmddHHMM
. Буквы означают:mm = month
,dd = day
,HH = hour
,MM = minutes
иAM
указывает , что часы должны быть на 12-часовом формате. Разделители не включены, чтобы сделать его максимально коротким. Это выводитd = 07142117
на момент написания этого объяснения. Я буду ссылаться на эту частьx
с этого момента.[(d=x)(1:4);d(5:8)]
: Сохраняет приведенную выше строку какd
, затем создает массив из двух элементов: первых четырех символов, затем 5-9 символов. Это дает :Где числа хранятся в виде строк, а не чисел. Мы назовем результат выше для
y
ниже.str2num(y)
преобразует массив символов в числа, где каждая строка превращается в одно число. Это дает[714; 2122]
. Мы назовем результат дляz
.diff(z)>1200
берет разницу между двумя числами и проверяет, является ли текущее время на 1200 больше, чем текущая дата. Это составляет AM / PM. Это дает нам желаемый результат.источник
Pyth,
222120 байт-1 байт благодаря @ Mr.Xcoder
Попробуй это!
старый подход,
2220 байтПопытайся!
объяснение
источник
&g.d6+.d4 12g.d5.d7
работать на 19 байтов? Я не уверен и на самом деле еще не проверял это, но ...&g.d6+12.d4g.d5.d7
было бы 18 на самом деле. Кроме того, в старом подходе я не думаю, что вам нужно`
, и это станет длиной 18 байт. Я не знаю, я могу ошибаться.g++720.d5*60.d4+*60.d6.d7
, но это, к сожалению, длиннее (25 байт). Тем не менее, это может быть источником вдохновения, и я решил, что должен упомянуть об этом.C #, 174 байта
Попробуйте онлайн!
источник
()=>...
)Action<bool>
для сохранения байтов. ИспользуйтеDateTime.Now
при доступе к месяцу и дню. В целомpublic
не требуется иProgram
может быть только одна буква. Используйте,using D=System.DateTime;
чтобы сохранить байты. В целом хорошая идея, но можно много играть в гольф. Добро пожаловать в PPCG!PHP и другие языки с этими общими функциями: примерно от 28 до 29 байт:
или в качестве альтернативы
оба из которых будут печатать.
возможно в
?1:0
зависимости от представительства. Возможно сокращение байтов, если используется язык, который имеет неявное эхо или не имеет окончательного символа ';'.Зачем получать значения в переменные, а все остальное, когда это не нужно :)
date()
оставляет что-либо как литералы, которые не определены, например,7 May 2017 17:22:43
передает выражение1722 - 1200 >= 507
в eval (). Байт сохранен, изменив его на эквивалентный1722 - 1199 > 507
.Кто сказал, что Эвал мертв? ;-)
источник
Java, 81 байт
Попробуйте онлайн!
Ungolfed:
источник
java.util.Date
в число байтов.Haskell,
135129 байтовэта распаковка довольно раздражает, может лучше подойдет обработка строк
// редактировать: шаблон защищает 5 байтов
источник
Mathematica,
656462 байта3 программы
Каждый из них на один байт меньше, если
≥
в Mathematica считается одним байтом.Пояснения
Date[]
возвращает список в форме{y,m,d,h,m,s}
. ТакDate[][[4;;5]]
же часы и минуты текущего времени.p=Date[][[#]]&;
создаетp
функцию, которая принимает нужные нам индексы и дает нам те части даты.{60,1}.#&
является анонимной функцией, которая принимает произведение точек{60,1}
и ввод данных для сравнения времени. Это на один байт корочеTimeObject
.p@2
эквивалентноp[2]
номеру месяца.+{12+p@2~Mod~12,0}
добавляет{12,0}
к месяцу и дате, когда мы не в декабре, и добавляет{0,0}
иначе. (Спасибо, michi7x7!)>=
является оператором сравнения, но мы не можем сравнивать {часы, минуты} с {скорректированными месяцем, датой} начально .../@
отображает{60,1}.#&
обе части неравенства в скобках, поэтому мы можем сравнивать время правильно.{60,1}.#&
, они используют#
для представления ввода в большую анонимную функцию и&
для обозначения конца.@Date[]
Применяет большую функцию в своей строке (которая извлекает части списка) к самому списку дат.[Date[][[#]]&]
Применяет большую функцию в своей строке к другой анонимной функции, которая извлекает части списка дат.бонус
Кроме того, если мы съели обед между 1:00 и 12:59 PM, то мы могли бы сэкономить 25 байтов всего
{60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3)
.Вы можете проверить все это, вставив код в изолированную программную среду Wolfram Cloud и нажав Gear-> Evaluate Cell или нажав Shift + Enter или Numpad Enter.
источник
13:01
в24:31
Date[]
бонус в(Date[]+{0,12,0,0,0,0})
(возможно, есть способ сыграть в гольф, но12UnitVector[6,2]
это дольше). Проблема в том, что в такие дни, как 3 декабря, мы едим обед в 12:03, а не в 24:03, поэтому нам нужно добавить 12, кроме декабря . Это требует от нас либо: 1. заглянуть внутрь даты, чтобы увидеть, в декабре мы или нет (как в моих ответах), либо 2. написать функцию, которая проверяет, перешли ли мы к 24: XX после факта, что будет дольше.JavaScript (ES6), 75 байт
Эти длинные имена функций ...
источник
Python 3 , 104 байта
Попробуйте онлайн!
Все тесты даты и времени. Я заменил 29 февраля на 28 февраля, потому что недействительная дата не работала.
источник
R , 92 байта
Попробуйте онлайн!
источник
q, 31 байт
Пример:
Переводчик доступен здесь
Старая версия
источник
2$
Подушка превратится6
в6_
чем_6
, так что вы хотите(-2)$
, но вы можете отменить из этих дополнительных 3 символов с помощью стенографии для ,string
как($)
... или вместо $ раздуть, перед именем «0» , а затем взять последние 2 символы:{x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+
ммdd$\:x}
для 49 байтJavaScript, 75 байт
Что эквивалентно следующему коду:
источник
t
может быть использован при модификацииt=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
Python 2.7, 130 байт
Попробуйте онлайн
Примечание: может быть проблема со знаком. Пожалуйста, извините, потому что я следую IST, и это довольно запутанно, потому что сейчас 2:28. Исправьте знак, если считаете, что это неправильно.
источник
Perl, 45 символов
Если я должен предоставить метод, это будет 45 для
sub c{...}
. Если мне придется печатать, тоsay ()||0
даже получится 47. Я добавлю это, если это будет требованием.источник
you need to make a program to help you make sure
что фрагменты не разрешены - при этом любой из перечисленных методов вывода, как правило, считается допустимымperl -e
целом все в порядке, но другие предоставили функции, поэтому я отредактировал его.Excel,
525049 байтовВвод этой формулы в любой ячейке.
Выход либо
TRUE
илиFALSE
.Встроенная обработка даты в Excel очень помогает. Функция возвращает время обеда дня в качестве значения времени , которое, если преобразуется в дату, будет использовать . Мы сравниваем его с тем, чтобы получить текущее время со значением даты или .
TIME
Jan 0, 1900
NOW - TODAY
0
Jan 0, 1900
Сэкономили 2 байта благодаря Вернишу Сэкономили
1 байт благодаря Адаму
источник
now()-today()
наmod(now(),1)
JavaScript, 62 символа
Тестовый код ниже:
Показать фрагмент кода
источник
Excel VBA, 55 байт
Функция анонимного непосредственного окна VBE, которая не принимает никаких входных данных и выводит логическое значение, представляющее, был ли у меня обед в непосредственном окне VBE
источник
Рубин , 64 + 7 = 71 байт
Требует
-rtime
флаг, потому что по какой-то причинеTime::parse
это похоже на то, что единственная функция требует его из всегоTime
модуля.Попробуйте онлайн! (также распечатывает текущее время)
источник
Юлия 0.6.0 99 байт
a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])
Юлия имеет встроенную функцию, чтобы использовать часы / календарь компьютера. Мой компьютер работает на Ubuntu 16.04 и уже с 12-часовыми часами, поэтому я не могу сказать, работает ли то, что я делал, с другой машиной, использующей другие часы, но, кажется, работает на моей машине.
источник
JavaScript ES6, 70 байт
Может быть, это не так на несколько миллисекунд ...
источник
Matlab, 241 байт
Пояснение: во-первых, я получаю дату в виде строки. Затем я выделяю месяц и день. Поскольку проблема гласит, что она всегда интерпретируется как PM, я автоматически пишу false, если время в AM. Если текущее время в PM, то я продолжаю и просто сравниваю числа времени.
Примечание: я отформатировал его немного по-другому для удобства чтения.
источник