Рождественский обратный отсчет


10

В духе праздников, и как кто-то уже начал зимнюю тему ( Построй снеговика! ), Я предлагаю новый вызов.

Напечатайте количество дней, часов, минут и секунд до Рождества (полночь (00:00:00) 25 декабря) в отдельном окне (не консоли) в любом однозначном формате, который вы считаете подходящим, и постоянно обновляйте его, как эти значения меняются.

Ввод - ничего, должен прочитать системное время.

Самый короткий код выигрывает :) Строки «Дни», «Часы», «Минуты», «Секунды» и «До Рождества» являются свободным кодом. Вы также можете ароматизировать их, если хотите. Ароматизировать их просто для того, чтобы получить хороший результат. Вы не можете ароматизировать строки с целью создания магического числа для сохранения кода.


Что именно вы подразумеваете под "приправить их"? Являются ли «дни», «часы», «минута», «секунда» и «до Рождества» требуется на выходе, или просто свободные варианты? Сколько "ароматизатора" этих строк бесплатно?
Изи

2
Нет консоли ?? Консольные кодеры бунтуют! Просто шучу. Хорошая идея. Счастливых праздников.
Даррен Стоун

@ Iszi Они не обязательны. Я просто дал им бесплатно, так что если люди хотят сделать действительно хороший вывод, они не потеряют так много персонажей.
Кранчер

1
Разве Рождество не полночь, не конец Рождества?
DavidC

2
Нет, обычно полночь является нулевым моментом нового дня. «Полночное Рождество» - это когда начинается Рождество.
хлебница

Ответы:


5

Рубин с Обуви , 96 - 33 = 63

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

Ну, ты никогда не говорил, что мы не можем . ;)

Скриншот

Обновляет один раз каждый кадр.

Волшебный номер 1387951200Рождество - 25 декабря 2013 г. 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

@ Cruncher Ах, хорошо, тогда. Редактирование большого количества бесполезного текста
Doorknob

3

PowerShell: 279

Количество символов не учитывает любые халявы. @ Cruncher - пожалуйста, настройте соответственно.

Golfed

($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 года - он будет работать в любой год, с 00:00 1 января до 00:00 25 декабря.

Предупреждение: окно может перестать отвечать - оно продолжит обновляться, но вы не сможете его переместить или закрыть.

введите описание изображения здесь

Без гольфа с комментариями

(
    # $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, "День"}, {10, "Час"}, {59, "Минута"}, {51.4011, "Второй"}}


"Countdown to Christmas: Days"Это может быть свободным, "Day", "Hour", "Minute", "Second"может быть также.
Cruncher

Благодарю за разъяснение. Кстати, пробелы за пределами строк не являются обязательными. Они вставлены только для разборчивости.
DavidC

Почему перед цифрами стоит "-"? Это может сбивать с толку, и похоже, что мы уже прошли Рождество. Будут ли они исправлены путем изменения порядка в DateDifference?
Cruncher

Я удалил их и улучшил форматирование, заплатив цену добавленными символами.
DavidC

2

Python 136

Я уверен, что кто-то может сделать это лучше - я никогда раньше не использовал Tkinter. В частности, я держу пари, l.pack()и l["text"]можно избежать.

тк

Golfed

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 с использованием GTK + через пакет gWidgets. Это довольно уродливый код, поскольку я совсем не знаком с пакетом 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

Дьялог АПЛ, 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

Golfed

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

Ungolfed

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

Спасибо, рад быть здесь! Я думаю, что я неправильно понял, это будет обновляться только при повторном запуске. Скоро я отредактирую и перепишу
Джеймс С.

0

Python 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 символа.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.