Різдвяний відлік


10

У дусі свят, і як хтось уже розпочав зимову тему ( Побудуй сніговика! ), Пропоную новий виклик.

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

Вхід - нічого, повинен читати системний час.

Найкоротший код виграє :) Рядки "Дні", "Години", "Хвилини", "Секунди" та "До Різдва" - це безкоштовний код. Ви також можете приправити їх ароматом, якщо хочете. Ароматизація їх є чисто для того, щоб отримати хороший вихід. Не можна ароматизувати струни для того, щоб зробити магічне число для збереження коду.


Що саме ви маєте на увазі під "ароматизацією їх"? Є чи «дні», «годинник», «Хвилина», «секунда» і «до Різдва» потрібно на виході, або просто вільні варіанти? Скільки "ароматизація" цих струн безкоштовна?
Іссі

2
Немає консолі ?? Консольні кодери повстають! Просто шуткую. Хороша ідея. Щасливих свят.
Даррен Стоун

@Iszi Вони не потрібні. Я просто дав їм безкоштовно, так що якщо люди хочуть зробити фактичний приємний вихід, вони не втратять стільки символів.
Cruncher

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 Ага, добре тоді. Тоді
виправляйте

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 року - воно працюватиме в будь-який рік, з 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

Математика 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

Дякуємо за роз’яснення. Btw, пробіли поза рядків не є обов’язковими. Вони вставляються лише для розбірливості.
DavidC

Чому перед цифрами стоїть "-"? Це може бути заплутано, і виглядати так, як ми вже пройшли Різдво. Чи могли б вони бути виправлені, змінивши порядок у DateDifference?
Cruncher

Я видалив їх та покращив форматування, заплативши ціну за додані символи.
DavidC

2

Пітон 136

Я впевнений, що хтось може це зробити краще - я ніколи раніше не використовував Ткінтера. Зокрема, я ставлю на облік l.pack()і що l["text"]можна уникнути.

тк

Гольф

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

Ось рішення для 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

Гольф

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

Дякую, радий бути тут! Напевно, я неправильно зрозумів, це оновиться лише тоді, коли воно буде повторно. Я скоро відредагую та перекладу
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 символи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.