圣诞节倒计时


10

本着假期的精神,并且已经有人开始冬季主题(建造一个雪人!),我提出了一个新的挑战。

在您认为合适的任何明确格式(不是控制台)上,在独立的窗口(不是控制台)上打印直到圣诞节(12月25日午夜(00:00:00)12月25日)之前的天数,小时数,分钟数和秒数,并根据这些内容不断进行更新价值观改变。

输入-什么都没有,必须读取系统时间。

最短的代码胜出:)字符串“ Days”,“ Hours”,“ Minutes”,“ Seconds”和“ Until Christmas”是免费代码。您也可以根据需要对其进行调味。为了产生良好的输出,纯粹对它们进行调味。您不能为制作魔术数字来保存代码而对字符串加味。


您“加味”到底是什么意思?是“天”,“小时”,“分”,“秒”和“直到圣诞节” 所需的输出,或只是自由选择?这些字符串有多少“调味”是免费的?
Iszi 2013年

2
没有控制台?控制台编码器起义!开玩笑。好主意。节日快乐。
Darren Stone

@Iszi不需要它们。我只是免费提供了它们,这样,如果人们想要获得实际的出色输出,他们就不会丢失太多字符。
Cruncher

1
圣诞节不是午夜圣诞节结束吗?
DavidC

2
不,通常午夜是新一天的第零时刻。圣诞节开始是“午夜圣诞节”。
面包盒

Answers:


5

红宝石配,96-33 = 63

Shoes.app{p=para
animate{p.text="0 days 0 hours 0 minutes #{1387951200-Time.new.to_f} seconds"}}

好吧,您从未说过我们不能。;)

屏幕截图

每帧更新一次。

魔术数字1387951200是圣诞节-2013年12月25日00:00。

我在哪里获得号码的示例IRB会话:

irb(main):211:0> "0 days 0 hours 0 minutes  seconds".size
=> 33
irb(main):212:0> Time.new(2013,12,25,00,00,00).to_i
=> 1387951200
irb(main):213:0>

Dec 25, 2013 00:00是午夜。
Cruncher 2013年

@Cruncher啊,那好吧。然后编辑掉许多无用的文字
Doorknob

3

PowerShell的:279

字符数不考虑任何免费赠品。@Cruncher-请进行相应调整。

打高尔夫球

($t=($a='New-Object Windows.Forms')+".Label"|iex).Text=($i={((New-TimeSpan -en 12/25|Out-String)-split"`n")[2..6]});$t.Height=99;($x=iex $a".Form").Controls.Add($t);$x.Text='Time Until Christmas';($s=iex $a".Timer").add_tick({$t.Text=&$i;$x.Refresh()});$s.Start();$x.ShowDialog()

无论是作为代码还是作为窗口,这都不是最漂亮的东西,但是它可以工作。

不错的一点是,这不仅对2013年有好处,而且可以在任何一年中使用,从1月1日的00:00到12月25日的00:00。

警告:该窗口可能无响应-它将继续更新,但是您可能无法移动或关闭它。

在此处输入图片说明

取消评论

(
    # $t will be the label that displays our countdown clock on the form.
    $t=(
        # $a is used as a shortcut to address the Forms class later.
        $a='New-Object Windows.Forms'
    # Tack ".Label" onto the end with iex to finish making $t.
    )+".Label"|iex

# Set the text for our label.
).Text=(
    # $i will be a script block shortcut for later.
    $i={
        (
            (
                # Get the current "Time until Christmas", and output it as a string.
                New-TimeSpan -en 12/25|Out-String
            # Break the string into newline-delimeted array.
            )-split"`n"
        # Only output elements 2..6 - Days, Hours, Minutes, Seconds, Milliseconds.
        )[2..6]
    }
);

# Make sure the label is tall enough to show all the info.
$t.Height=99;

(
    # Use iex and $a as shortcut to make $x a "New-Object Windows.Forms.Form".
    $x=iex $a".Form"

# Add the label to the form.
).Controls.Add($t);

# Put 'Time Until Christmas' in the title bar for flavor.
$x.Text='Time Until Christmas';

(
    # Use iex and $a as shortcut to make $s a "New-Object Windows.Forms.Timer".
    $s=iex $a".Timer"

# Tell the timer what to do when it ticks.
).add_tick(
    {
        # Use the $i script block to update $t.Text.
        $t.Text=&$i;
        # Reload the form so the updated text displays.
        $x.Refresh()
    }
);

# Start the timer.
$s.Start();

# Show the form.
$x.ShowDialog();

# Variable cleanup - omit from golfed code.
rv t,a,x,i,s

3

Mathematica 167-44 = 123

以下内容会不断更新一个表格,显示直到圣诞节开始之前的天,小时,分钟和秒(以千分之一为单位)。我不确定如何计算免费字符串的折扣。

Dynamic[Grid[Join[{{"Countdown", "until Christmas"}}, 
{DateDifference[Date[], {2013, 12, 25, 0, 0, 0}, {"Day", "Hour", "Minute", "Second"}], 
Clock[{1, 1}, 1]}[[1]] /. d_String :> d <> "s"]] ]

倒数


快速而肮脏的解决方案:104-19 = 85个字符

Dynamic@{DateDifference[Date[], {2013, 12, 25, 0, 0, 0}, {"Day", "Hour", "Minute", 
 "Second"}], Clock[{1, 1}, 1]}[[1]]

{{17,“ Day”},{10,“ Hour”},{59,“ Minute”},{51.4011,“ Second”}}


"Countdown to Christmas: Days"这可能是免费的,"Day""Hour""Minute""Second"可以为好。
Cruncher 2013年

感谢您的澄清。顺便说一句,字符串之外的空格不是必须的。仅出于清晰起见插入它们。
DavidC 2013年

为什么数字前面有“-”?这可能会令人困惑,并且看起来我们已经过圣诞节了。是否可以通过在DateDifference中更改顺序来解决?
Cruncher 2013年

我删除了它们并改进了格式,并以添加的字符为代价。
DavidC 2013年

2

Python 136

我确定有人可以做得更好-我以前从未使用过Tkinter。我敢打赌,l.pack()l["text"]可以避免。

k

打高尔夫球

from Tkinter import*
from datetime import datetime as d
r=Tk()
l=Label(r)
l.pack()
while 1:
    l["text"]=d(2013,12,25)-d.now()
    r.update()

1

[R

这是通过gWidgets软件包使用GTK +的R解决方案。这是非常丑陋的代码,因为我根本不熟悉gWidgets / GTK +软件包。

这是代码:

library(gWidgets)
options(guiToolkit="RGtk2")

# FUNCTION compute the hours minutes and seconds from time in seconds
fnHMS = function(timeInSec) {
  hours = timeInSec %/% 3600
  minutes = (timeInSec %% 3600) %/% 60
  seconds = (timeInSec %% 3600) %% 60
  return(list(hours = hours, minutes = minutes, seconds = seconds))
}

# test the function
fnHMS(1478843)

# container for the label and the button widget
christmasCountdownContainer = gwindow('Christmas Countdown!!', visible = TRUE)
christmasCountdownGroup = ggroup(horizontal = FALSE,
                                 container = christmasCountdownContainer)
ccWidget1 = glabel(sprintf('%4.0f hours, %4.0f minutes, %4.0f seconds till Christmas!!', 
                           (liHMS <- fnHMS(as.double(difftime(as.POSIXct(strptime('25-12-2013 00:00:01', 
                                      format = '%d-%m-%Y %H:%M:%S')),
                  Sys.time(), units = 'secs'))))[[1]], liHMS[[2]], liHMS[[3]]), 
                            container = christmasCountdownGroup)

ccWidget2 = gbutton("Update!", handler = function(h, ...) {
  # retrieve the old value of the ccWidget1
  oldValue = svalue(ccWidget1)
  liHMS = fnHMS(as.double(difftime(as.POSIXct(strptime('25-12-2013 00:00:01', 
                                                       format = '%d-%m-%Y %H:%M:%S')),
                                   Sys.time(), units = 'secs')))
  svalue(ccWidget1) = sprintf('%4.0f hours, %4.0f minutes, %4.0f seconds till Christmas!!',
                              liHMS[[1]], liHMS[[2]], liHMS[[3]])
  }, container = christmasCountdownGroup)

输出量

输出如下所示:

在此处输入图片说明


它必须不断更新-这意味着自动
门把手

1

Dyalog APL,61岁

{⎕SM[1;]←1 1,⍨⊂⍕(1 4⍴2↓2013 12 24 23 59 59 1000-⎕TS)⍪'Days' 'Hours' 'Minutes' 'Seconds'⋄∇1}1

0

C#128

打高尔夫球

using D=System.DateTime;using System.Windows.Forms;class C{static void Main(){MessageBox.Show(""+(new D(2013, 12, 25)-D.Now));}}

不打高尔夫球

using D=System.DateTime;
using System.Windows.Forms;
class C
{
    static void Main()
    {
        MessageBox.Show(""+(new D(2013,12,25)-D.Now));
    }
}

1
这不会持续倒数吗?另外,欢迎来到codegolf!
Cruncher 2013年

谢谢,很高兴来到这里!我想我误会了,这只会在重新运行时才会更新。我会尽快编辑和重新发布
James C.

0

蟒蛇2,115

from datetime import datetime as d
n=d.now()
print str(24-n.day),str(23-n.hour),str(59-n.minute),str(60-n.second)

这会将换行符视为2个字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.