\begingroup
在美国,夏令时。
编写执行以下操作的最短的完整程序、函数或代码片段:
- 以年份作为输入。
- 输出两个日期:DST 开始的日期和 DST 结束的日期。
- 对于此挑战,0 或负年份的行为未定义。
测试用例
Year -> Start, End
2021 -> Mar 14, Nov 07
2022 -> Mar 13, Nov 06
2023 -> Mar 12, Nov 05
2024 -> Mar 10, Nov 03
2025 -> Mar 09, Nov 02
2026 -> Mar 08, Nov 01
2027 -> Mar 14, Nov 07
1 -> Mar 11, Nov 04
1234 -> Mar 12, Nov 05
9999 -> Mar 14, Nov 07
\endgroup
4
8 个回答
8
\begingroup
,59字节
[ <year> march 2 over november 1 [ sunday-of-month ] 2bi@ ]
[ ! a function
<year> ! create timestamp from integer year input
march ! change from jan 1 to march 1
2 ! push 2 to indicate we want second sunday
over ! create a copy of the timestamp on top of stack
november ! change from march 1 to november 1
1 ! push 1 to indicate we want first sunday
[ sunday-of-month ] 2bi@ ! change both timestamps to nth sunday of month
] ! end function
\endgroup
3
-
\begingroup
您是否需要包含USING
(如import
在 Python 中)?
\endgroup
– -
1\begingroup
@JonathanAllan。
\endgroup
– -
\begingroup
啊,有道理。
\endgroup
–
|
\begingroup
,63 字节
lambda x:(w:=7-date(x,3,1).weekday(),w+7)
from datetime import*
输出是日期的元组(11 月日期,然后是 3 月日期)。对于 >9999 的年份,此方法无效。
\endgroup
|
\begingroup
,67 字节
y=>[(g=d=>(s=new Date(y+99,-1186,d)).getDay()?g(d-1):s)(14),g(252)]
虽然很蠢,但很管用
,60 字节
不支持部分古代年份(1-2位数字)
y=>[(g=d=>(s=new Date(y,2,d)).getDay()?g(d-1):s)(14),g(252)]
\endgroup
1
-
\begingroup
\endgroup
–
|
\begingroup
,
, 21 20 19
:4:“ıd¢‘_/__3%7+8,1
一个单子链接,它接受年份作为正整数,并输出三月和十一月的天数作为一对整数。
或者查看。
如何?
:4:“ıd¢‘_/__3%7+8,1 - Link: integer Year
:4 - {Year} integer divide by four
: - integer divide by:
“ıd¢‘ - code-page indices = [25, 100, 1]
-> [Year//100, Year//400, Year//4]
_/ - reduce by subtraction
_ - subtract {Year}
_3 - subtract three
%7 - modulo seven
-> Delta = (Year//100 - Year//400 - Year//4 - Year - 3) % 7
+8,1 - add [8, 1]
-> [8+Delta, 1+Delta]
\endgroup
|
\begingroup
-MDate::Manip -a
5,55 字节
say ParseDate"$_@F"for"2nd sun in mar","1st sun in nov"
\endgroup
1
-
1\begingroup
1000 年以下无效
\endgroup
–
|
\begingroup
+ 日期,45 字节
let n=8-`date +%u -d $1/3/8`;echo $((7+n)) $n
链接包含测试用例。说明:给出从表示星期一到表示星期日+%u
的数字,减去表示 11 月第一个星期日的日期;加上 表示 3 月第二个星期日的日期。1
7
8
7
遗憾的是,GNUdate
对工作日的支持似乎仅适用于相对于今天的日期。
\endgroup
|
\begingroup
,30字节
NθI⁺⟦⁸¦¹⟧﹪⁻⁺⁴÷θ¹⁰⁰⁺⁺÷θ⁴⁰⁰÷θ⁴θ⁷
链接为代码的详细版本。说明:
Nθ Input year as a number
⁴ Literal integer `4`
⁺ Plus
θ Input year
÷ Integer divided by
¹⁰⁰ Literal integer `100`
⁻ Subtract
θ Input year
÷ Integer divided by
⁴⁰⁰ Literal integer `400`
⁺ Plus
θ Input year
÷ Integer divided by
⁴ Literal integer `4`
⁺ Plus
θ Input year
﹪ Modulo
⁷ Literal integer `7`
⁺ Vectorised add
⁸ Literal integer `8`
¹ Literal integer `1`
⟦ ⟧ Make into list
I Cast to string
Implicitly print
\endgroup
|
\begingroup
3.8,46 字节
lambda y:[n:=(y//100-y//400-y//4-y-3)%7+8,n-7]
一个未命名的函数,接受年份并返回三月和十一月两天的列表。
\endgroup
|
不同,后者要求以特定格式输入当前年份的下一个开始/结束日期。此挑战不需要特定格式,需要 2 个输出值,并且需要年份作为输入。
\endgroup
–
鉴于月份是固定的并且年份是输入,我们可以将两天输出为整数吗?(特别是如果我们没有“日期”类型?)
\endgroup
–
可能值得注意的是,这并不是美国夏令时的时间,而是美国当前按照公历实施夏令时的时间。(例如,2001 年美国夏令时是从 4 月 1 日到 10 月 28 日;公元 11 月的第一个星期日是 6 日 [当然,当时还没有美国夏令时])
\endgroup
–
@JonathanAllan 输出 2 个整数是可以接受的。
\endgroup
–
|