Świąteczne odliczanie

10

W duchu wakacji i gdy ktoś już rozpoczął zimowy motyw ( Zbuduj bałwana! ), Proponuję nowe wyzwanie.

Wydrukuj liczbę dni, godzin, minut i sekund do Świąt Bożego Narodzenia (północy (00:00:00) 25 grudnia) na samodzielnym oknie (nie na konsoli) w dowolnym jednoznacznym formacie, który uznasz za odpowiedni, i stale aktualizuj go w ten sposób wartości się zmieniają.

Wejście - nic, musi odczytać czas systemowy.

Najkrótszy kod wygrywa :) Ciągi „Dni”, „Godziny”, „Minuty”, „Sekundy” i „Do Bożego Narodzenia” to bezpłatny kod. Możesz je również doprawić, jeśli chcesz. Doprawianie ich jest czysto w celu uzyskania dobrego wyniku. Nie można aromatyzować ciągów znaków w celu utworzenia magicznej liczby w celu zapisania kodu.

Cruncher
źródło
Co dokładnie rozumiesz przez „doprawienie ich”? Czy w danych wyjściowych wymagane są „dni”, „godziny”, „minuty”, „sekundy” i „do Świąt Bożego Narodzenia” , czy tylko wolne opcje? Ile „aromatyzowania” tych strun jest bezpłatne?
Iszi
2
Brak konsoli? Koderzy konsoli zbuntowali się! Żartuję. Dobry pomysł. Wesołych świąt
Darren Stone,
@Iszi Nie są wymagane. Po prostu dałem je za darmo, aby ludzie, którzy chcą stworzyć naprawdę niezły wynik, nie stracą tylu postaci.
Cruncher,
1
Czy północ Bożego Narodzenia nie jest końcem świąt?
DavidC,
2
Nie, zazwyczaj północ to zerowa chwila nowego dnia. „Święta Bożego Narodzenia o północy” to początek świąt Bożego Narodzenia.
breadbox

Odpowiedzi:

5

Rubin z butami , 96–33 = 63

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

Cóż, nigdy nie powiedział, że nie może . ;)

zrzut ekranu

Aktualizuje się raz na każdą klatkę.

Magiczna liczba 1387951200to Boże Narodzenie - 25 grudnia 2013 00:00.

Przykładowa sesja IRB, dla której mam numery:

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>
Klamka
źródło
Dec 25, 2013 00:00jest północ.
Cruncher
@Cruncher Ah, dobrze więc. Edytowanie wtedy wielu niepotrzebnych tekstów
Klamka
3

PowerShell: 279

Liczba postaci nie uwzględnia żadnych gratisów. @Cruncher - dostosuj odpowiednio.

Grał w golfa

($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()

To nie jest najładniejsza rzecz, ani jako kod, ani jako okno, ale działa.

Jedną fajną rzeczą jest to, że nie jest to dobre tylko na 2013 rok - będzie działać w każdym roku, od 00:00 1 stycznia do 00:00 25 grudnia.

Ostrzeżenie: okno może przestać odpowiadać - będzie kontynuowało aktualizację, ale możesz nie być w stanie go przenieść ani zamknąć.

wprowadź opis zdjęcia tutaj

Nie grał w golfa z komentarzami

(
    # $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
Iszi
źródło
3

Mathematica 167–44 = 123

Poniżej stale aktualizuje tabelę pokazującą dni, godziny, minuty i sekundy (w tysięcznych) do początku Bożego Narodzenia. Nie jestem pewien, jak liczyć zniżki na darmowe ciągi.

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"]] ]

odliczanie


Szybkie i brudne rozwiązanie : 104-19 = 85 znaków

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

{{17, „Dzień”}, {10, „Godzina”}, {59, „Minuta”}, {51.4011, „Drugi”}}

DavidC
źródło
"Countdown to Christmas: Days"To może być wolny, "Day", "Hour", "Minute", "Second"może być równie dobrze.
Cruncher,
Dziękuję za wyjaśnienie. Btw, spacje poza ciągami nie są obowiązkowe. Zostały wstawione tylko dla czytelności.
DavidC,
Dlaczego przed liczbami jest „-”? Może to być mylące i wygląda na to, że już minęły nam Święta Bożego Narodzenia. Czy można to naprawić, zmieniając kolejność w DateDifference?
Cruncher,
Usunąłem je i poprawiłem formatowanie, płacąc cenę za dodane znaki.
DavidC,
2

Python 136

Jestem pewien, że ktoś może to zrobić lepiej - nigdy wcześniej nie korzystałem z Tkintera. W szczególności stawiam l.pack()i l["text"]można uniknąć.

tk

Grał w golfa

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()
chmullig
źródło
1

R

Oto rozwiązanie dla R korzystającego z GTK + za pośrednictwem pakietu gWidgets. To dość brzydki kod, ponieważ w ogóle nie znam pakietu gWidgets / GTK +.

Kod

Oto kod:

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)

Wynik

Oto jak wygląda wyjście:

wprowadź opis zdjęcia tutaj

tchakravarty
źródło
Musi ciągle aktualizować - to znaczy automatycznie
Klamka
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
TwiNight
źródło
0

C # 128

Grał w golfa

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

Nie golfił

using D=System.DateTime;
using System.Windows.Forms;
class C
{
    static void Main()
    {
        MessageBox.Show(""+(new D(2013,12,25)-D.Now));
    }
}
James C.
źródło
1
To się nie odlicza ciągle, prawda? Witamy również w codegolf!
Cruncher,
Dzięki, cieszę się, że tu jestem! Chyba źle zrozumiałem, to zaktualizuje się dopiero po ponownym uruchomieniu. Wkrótce dokonam edycji i ponownej publikacji
James C.
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)

To liczy nowe znaki jako 2 znaki.

Timtech
źródło