编写一个程序,跟踪其运行的连续天数。
白天在午夜(运行该程序的计算机的本地时间)重置。
如果一天中没有运行该程序,则将计数器重置为零。
每次运行该程序时,如果这是该天第一次运行该程序,则计数器应增加一天。这意味着程序第一次运行时,应该说:“您有1天的连胜!”
程序的输出格式为: You have a [streak_length] day streak!
您可以选择在外部存储数据或修改源代码。
这是代码高尔夫球,因此以字节为单位的最短代码胜出!
编写一个程序,跟踪其运行的连续天数。
白天在午夜(运行该程序的计算机的本地时间)重置。
如果一天中没有运行该程序,则将计数器重置为零。
每次运行该程序时,如果这是该天第一次运行该程序,则计数器应增加一天。这意味着程序第一次运行时,应该说:“您有1天的连胜!”
程序的输出格式为: You have a [streak_length] day streak!
您可以选择在外部存储数据或修改源代码。
这是代码高尔夫球,因此以字节为单位的最短代码胜出!
Answers:
打高尔夫球
grep `date -d-1day -I` h||>h
date -I>>h
echo You have a `uniq h|wc -l` day streak!
编辑
怎么运行的 !
每次启动时,都会在文件h后面添加一行,其中包含当前日期,例如:
2017-02-03
2017-02-04
2017-02-05
2017-02-05
然后它将uniq
用于过滤出重复项(即同一天内多次发射),并对行数进行计数以获取条纹长度。
uniq h|wc -l
要重置条纹,它将在h中 grep表示“昨天”,如果找不到则将其截断。
grep `date -d-1day -I` h||>h
运行解释器标志-rdate
。
c,t=0,Dae.y
op t.ts,?w
dw{c+=1;t=t.p;Fil.f t.ts}
s"You have a #{c} day streak!"
它的工作原理是在调用该文件的每一天存储一个新文件,然后向后计数连续文件的数量,以获取条纹的长度。它永远不会删除文件,因此最终,它将在非常,非常,非常,非常非常长的时间之后,一次填充少量字节,最终填充硬盘。
这是它的非公开版本:
streak, current_date = 0, Date.today
open(current_date.to_s, 'w')
while File.file?(current_date.to_s)
streak += 1
current_date = current_date.prev_day;
end
puts "You have a #{streak} day streak!"
read d n<f;c=`date -d0 +%s`;echo $c $[c>d?c>d+86399?n=1:++n:n]>f;echo You have a $n day streak!
上面的bash行中有95个字节。
还有另一个名为f的文件,其中仅包含一个字符:
0
(程序写入f。)
因此,我认为总字节数应为97(bash文件的内容为95字节,外部文件的内容为1字节,因为使用了程序以外的1个文件,所以为1字节)。这基于对多文件程序计数字节。
注意:感谢@orlp指出我对此发布的较早答案是胡说八道;我完全误解了问题。(它被发布为另一个答案,我已将其删除。)
(date -f 'd')>>z
gc z|gu|%{$c=(1,++$c)[($d=date $_)-eq$n]
$n=$d+1D}
"You have a $c day streak!"
首先,将当前日期(以短日期格式)写到文件(名为z
)中。>>
照常工作;追加,但创建(如果不存在)。
接下来,我用Get-Content
(gc
)逐行读取文件的内容,通过Get-Unique
(gu
)进行管道传输,因为同一日期可能会有多个条目,然后通过ForEach-Object
(%
)进行管道传输。
在循环中,我创建了一个2元素数组,其中0
第一个元素的值是$c
(+1
)的当前值,第二个元素。使用++$c
使我可以避免$c+1
在括号中加上类似内容。
然后,我通过布尔比较索引到两个元素数组中,这将合并为0
for $false
或1
for $true
。在比较中,我指定给$d
一个[datetime]
从文件当前行读取日期开始创建对象。$n
将该对象与进行比较,因为该对象在第一次运行时尚未分配,因此它永远不会匹配,并且$c
将初始化为1
,因为将索引的值分配了$c
。
接下来$n
,通过添加下一个预期日期来填充1
到当前datetime对象来。这里的关键是这1D
是一个[decimal]
文字。由于某些原因,当您将整数添加到时[datetime]
,它会被解释为刻度,但是当您添加浮点数时,它们会被解释为天。因此,它将$n
为下一次迭代填充。
结果是,每次当前日期与“下一个”日期(前一个日期加1天)不匹配时,计数器都会重置。
最后,消息被输出。