Weihnachts-Countdown


10

Im Geiste der Feiertage und als jemand bereits mit dem Winterthema ( Schneemann bauen! ) Begann, schlage ich eine neue Herausforderung vor.

Drucken Sie die Anzahl der Tage, Stunden, Minuten und Sekunden bis Weihnachten (Mitternacht (00:00:00), 25. Dezember) in einem eigenständigen Fenster (keine Konsole) in einem eindeutigen Format, das Sie für richtig halten, und aktualisieren Sie es kontinuierlich Werte ändern sich.

Eingabe - nichts, muss die Systemzeit lesen.

Der kürzeste Code gewinnt :) Die Zeichenfolgen "Tage", "Stunden", "Minuten", "Sekunden" und "Bis Weihnachten" sind kostenloser Code. Sie können sie auch würzen, wenn Sie möchten. Das Aromatisieren dient lediglich dem Zweck, eine schöne Ausgabe zu erzielen. Sie können keine Zeichenfolgen verwenden, um eine magische Zahl zum Speichern von Code zu erstellen.


Was genau meinst du mit "würzen"? Sind in der Ausgabe "Tage", "Stunden", "Minuten", "Sekunden" und "bis Weihnachten" erforderlich oder nur kostenlose Optionen? Wie viel "Aroma" dieser Saiten ist kostenlos?
Iszi

2
Keine Konsole? Konsolencodierer revoltieren! War nur Spaß. Gute Idee. Schöne Ferien.
Darren Stone

@Iszi Sie sind nicht erforderlich. Ich habe sie nur kostenlos gegeben, damit die Leute nicht so viele Charaktere verlieren, wenn sie eine wirklich schöne Ausgabe machen wollen.
Cruncher

1
Ist Weihnachten Mitternacht nicht das Ende von Weihnachten?
DavidC

2
Nein, normalerweise ist Mitternacht der nullte Moment des neuen Tages. "Midnight Christmas" ist, wenn Weihnachten beginnt.
Brotkasten

Antworten:


5

Rubin mit Schuhen , 96 - 33 = 63

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

Du hast nie gesagt, dass wir das nicht können . ;)

Bildschirmfoto

Aktualisiert einmal pro Frame.

Die magische Zahl 1387951200ist Weihnachten - 25. Dezember 2013 00:00.

Beispiel einer IRB-Sitzung, bei der ich die Nummern erhalten habe:

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:00ist Mitternacht.
Cruncher

@ Cruncher Ah, okay dann. Dann viel nutzlosen Text herausschneiden
Türknauf

3

PowerShell: 279

Die Zeichenanzahl berücksichtigt keine Werbegeschenke. @ Cruncher - bitte entsprechend anpassen.

Golf gespielt

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

Dies ist nicht das Schönste, weder als Code noch als Fenster, aber es funktioniert.

Ein schönes Stück ist, dass dies nicht nur für 2013 gut ist - es wird in jedem Jahr funktionieren, von 00:00 am 1. Januar bis 00:00 am 25. Dezember.

Warnung: Das Fenster reagiert möglicherweise nicht mehr. Es wird weiterhin aktualisiert, Sie können es jedoch möglicherweise nicht verschieben oder schließen.

Geben Sie hier die Bildbeschreibung ein

Nicht mit Kommentaren Golf gespielt

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

Im Folgenden wird eine Tabelle mit den Tagen, Stunden, Minuten und Sekunden (in Tausendstel) bis zum Beginn des Weihnachtstages fortlaufend aktualisiert. Ich bin mir nicht sicher, wie ich den Rabatt für die kostenlosen Zeichenfolgen zählen soll.

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

Countdown


Eine schnelle und schmutzige Lösung : 104-19 = 85 Zeichen

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

{{17, "Tag"}, {10, "Stunde"}, {59, "Minute"}, {51.4011, "Sekunde"}}


"Countdown to Christmas: Days"Dies kann frei sein, "Day", "Hour", "Minute", "Second"kann auch sein.
Cruncher

Danke für die Klarstellung. Übrigens sind Leerzeichen außerhalb von Zeichenfolgen nicht obligatorisch. Sie werden nur zur besseren Lesbarkeit eingefügt.
DavidC

Warum steht "-" vor den Zahlen? Es kann verwirrend sein und so aussehen, als wären wir schon Weihnachten vorbei. Würden sie durch Ändern der Reihenfolge in DateDifference behoben?
Cruncher

Ich entfernte sie und verbesserte die Formatierung, indem ich den Preis in hinzugefügten Zeichen bezahlte.
DavidC

2

Python 136

Ich bin sicher, jemand kann das besser - ich habe Tkinter noch nie benutzt. Insbesondere wette ich, dass die l.pack()und l["text"]können vermeidbar sind.

tk

Golf gespielt

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.

Hier ist eine Lösung für R mit GTK + über das gWidgets-Paket. Dies ist ein ziemlich hässlicher Code, da ich mit dem Paket gWidgets / GTK + überhaupt nicht vertraut bin.

Code

Hier ist der Code:

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)

Ausgabe

So sieht die Ausgabe aus:

Geben Sie hier die Bildbeschreibung ein


Es muss ständig aktualisiert werden - das heißt automatisch
Türknauf

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

Golf gespielt

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
Das zählt nicht ständig herunter, oder? Willkommen auch bei Codegolf!
Cruncher

Danke, ich bin froh, hier zu sein! Ich glaube, ich habe es falsch verstanden, dies würde nur aktualisiert, wenn es erneut ausgeführt wird. Ich werde bald bearbeiten und neu veröffentlichen
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)

Dies zählt Zeilenumbrüche als 2 Zeichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.