PHP, 85–15 = 70 байт
?...:...
Основной трюк, используемый здесь, заключается в E
формат даты, на момент написания статьи, Df
returns &&
.
-
©
, ==3
и ¥3
are the values who will be replaced by Ð a
если это Пи-что-то. Обратите внимание, что все эти строки всегда будут заменены строкой длиной из 4 символов.
- Они расположены именно в этом порядке, поскольку
a
will stop searching at the first occurrence of the needle, so we put them in the order of priority.
- Разделитель между
Da
and g
необходимо, потому что мы не хотим D
to match a value that would overlap both (thanks to первородный для сохранения байтов здесь).
- Игла
Ð
because D=Ð)g
будет ошибочно соответствовать 10:31:42 как Пи-секунде.
Часть Y самая сложная. Нам нужен префикс для, чтобы компенсировать первое появление Пи-что-то, что позволит нам различать D=Ð)g ¥3©Df ¥E?"Pi Day":Dd %C¥3©Dc ¥E?`Pi M©e`:Dc ¥3©Db ¥E?`Pi SeÖ:No Pi Te
's return values between from datetime import *
n=datetime.now()
a=n.minute
if n.month==3and n.day==14:print'Pi Day'
elif n.hour==2and a==13:print'Pi Minute'
elif a==2and n.second==13:print'Pi Second'
else:print'No Pi Time'
(не найдено, Пи-ничего) и from datetime import datetime
now = datetime.now()
output = ['Pi Day', 'Pi Minute', 'Pi Second', 'No Pi Time']
if now.month == 3 and now.day == 14:
print output[0]
elif now.hour == 2 and now.minute == 13:
print output[1]
elif now.minute = 2 and now.second == 13:
print output[2]
else:
print output[3]
(found at index 0, Pi-day).
И мы хотим, чтобы этот префикс имел длину 4 или 5 символов, поскольку мы планируем разделить et e# Get the current datetime as an array with the following elements:
e# - Year
e# - Month
e# - Day
e# - Hour
e# - Minute
e# - Second
e# - Millisecond
e# - Weekday
e# - Tickrate or something.
[3E] e# Push the array [3 14].
# e# Find the position of this subarray in the current datetime array. Let's see
e# what results we can get:
e# - Year 3 is in the past and there is no 14th month, so we can't get 0.
e# - Pi day will give result 1.
e# - Day 3, hour 14 would give 2.
e# - Pi minute will give result 3.
e# - Pi second will give result 4.
e# - Second 3, millisecond 14 would give 5.
e# - Weekday and tickrate won't be 14, so we'll never get 6 or 7.
e# - If [3 14] isn't found at all we get -1.
"\Pi Day\\Pi Minute\Pi Second\"
e# Push this string (with linefeeds instead of backslashes.
N/ e# Split into lines.
= e# Select the corresponding element. The non-existent "pi hour" and "pi millisecond"
e# would map to empty strings as well as the -1.
's return value by 4.
Y имеет длину 4 символа, но:
- Когда-нибудь оно будет состоять из 5 символов, и это сломает программу (вспомните год 10314): документация PHP говорит, что
et
will be replaced by 4 digits, but it's not true.
- если вы вернетесь во времени, в 314 год, это сломает программу.
Поскольку PHP не существовал в 314 году и, скорее всего, не будет существовать в 10314 году, я думаю, эти ошибки можно смело игнорировать.
Обратите внимание, что et[3E]#"
Pi Day
Pi Minute
Pi Second
"N/=
can overlap i= # send i (index) to...
[* # convert to array (splat)...
[
(t=Time.new).month, # the current month...
t.day,t.hour,t.min,t.sec # etc... (duh)
]
.each_cons(2) # each consecutive two elements
] # [[month, day], [day, hour], [hour, min], etc]
.index [3,14]; # first occurrence of [3, 14]
i&& # shorthand for "if i"...
$><< # output...
[
'Pi Day', # [month=3, day=14] is Pi Day
'', # [day=3, hour=14] isn't anything
'Pi Minute', # [hour=3, min=14] is Pi Minute
'Pi Second' # [min=3, sec=14] is Pi Second
][i] # index by index (obviously)
с:
-
each_cons
configuration: there's no 31st month.
-
%i[month day hour min sec].map{|x|Time.new.send x}
configuration: there's no 14th month.
-
i=[*[(t=Time.new).month,t.day,t.hour,t.min,t.sec].each_cons(2)].index [3,14];i&&$><<['Pi Day','','Pi Minute','Pi Second'][i]
configuration: there are less than 40 months.
Также есть версия без ошибок, связанных с годом, то есть 86–15 = 71 байт:
x=>
['Pi Day', 'Pi Minute', 'Pi Second'] // array of outputs
.find( // find first element in the array
(x, i)=> // which returns truthy for this function
[/ar 14/, /(03|15):14:/, /03:14/] // array of regex patterns
[i] // get corresponding regex based on index
.test(Date()) // test it against current date, date is automatically cast to string
) || 'No Pi Time' // if no result, then return "No Pi Time"
||answer||
Питон 3, 179 байт
x=>['Pi Day','Pi Minute','Pi Second'].find((x,i)=>[/ar 14/,/(03|15):14:/,/03:14/][i].test(Date()))||'No Pi Time'