Compte à rebours de Noël


10

Dans l'esprit des vacances, et comme quelqu'un a déjà commencé le thème de l'hiver ( Construisez un bonhomme de neige! ) Je vous propose un nouveau challenge.

Imprimez le nombre de jours, d'heures, de minutes et de secondes jusqu'à Noël (minuit (00:00:00) le 25 décembre) sur une fenêtre autonome (pas une console) dans un format non ambigu que vous jugez approprié, et mettez-le à jour en permanence comme suit les valeurs changent.

Entrée - rien, doit lire l'heure du système.

Le code le plus court gagne :) Les chaînes "Jours", "Heures", "Minutes", "Secondes" et "Jusqu'à Noël" sont du code gratuit. Vous pouvez également les parfumer si vous le souhaitez. Les aromatiser est purement et simplement dans le but de produire une belle sortie. Vous ne pouvez pas aromatiser les chaînes dans le but de créer un nombre magique pour enregistrer le code.


Qu'entendez-vous exactement par «les parfumer»? Des "jours", "heures", "minutes", "secondes" et "jusqu'à Noël" sont-ils requis dans la sortie, ou simplement des options gratuites? Quelle «saveur» de ces cordes est gratuite?
Iszi

2
Pas de console ?? Les codeurs de console se révoltent! Je rigole. Bonne idée. Joyeuses fêtes.
Darren Stone

@Iszi Ils ne sont pas obligatoires. Je viens de leur donner gratuitement pour que si les gens veulent faire une belle sortie réelle, ils ne perdront pas autant de personnages.
Cruncher

1
Noël n'est-il pas minuit, c'est la fin de Noël?
DavidC

2
Non, minuit est généralement l'instant zéro du nouveau jour. "Noël de minuit", c'est quand Noël commence.
boîte à pain

Réponses:


5

Rubis avec des chaussures , 96 - 33 = 63

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

Tu n'as jamais dit que nous ne pouvions pas . ;)

capture d'écran

Met à jour une fois par image.

Le numéro magique 1387951200est Noël - 25 décembre 2013 à 00h00.

Exemple de session IRB pour savoir où j'ai obtenu les chiffres:

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:00est minuit.
Cruncher

@Cruncher Ah, d'accord alors. Modification de beaucoup de texte inutile ensuite
Poignée de porte

3

PowerShell: 279

Le nombre de personnages ne prend pas en compte les cadeaux. @Cruncher - veuillez ajuster en conséquence.

Golfé

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

Ce n'est pas la plus jolie chose, que ce soit sous forme de code ou de fenêtre, mais cela fonctionne.

Une bonne chose est que ce n'est pas seulement bon pour 2013 - cela fonctionnera chaque année, de 00h00 le 1er janvier à 00h00 le 25 décembre.

Avertissement: la fenêtre peut ne plus répondre - elle continuera à se mettre à jour, mais vous ne pourrez peut-être pas la déplacer ou la fermer.

entrez la description de l'image ici

Non golfé avec commentaires

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

Ce qui suit met continuellement à jour un tableau indiquant les jours, heures, minutes et secondes (en millièmes) jusqu'au début du jour de Noël. Je ne sais pas comment compter la remise pour les chaînes gratuites.

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

compte à rebours


Une solution rapide et sale : 104-19 = 85 caractères

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"Cela peut être libre, "Day", "Hour", "Minute", "Second"peut être aussi bien.
Cruncher

Merci pour la clarification. De plus, les espaces en dehors des chaînes ne sont pas obligatoires. Ils sont insérés uniquement pour la lisibilité.
DavidC

Pourquoi y a-t-il "-" devant les chiffres? Cela peut être déroutant, et on dirait que nous avons déjà passé Noël. Seraient-ils corrigés en modifiant l'ordre dans DateDifference?
Cruncher

Je les ai supprimés et amélioré la mise en forme, en payant le prix en caractères ajoutés.
DavidC

2

Python 136

Je suis sûr que quelqu'un peut faire mieux - je n'ai jamais utilisé Tkinter auparavant. En particulier, je parie que le l.pack()et l["text"]peut être évitable.

tk

Golfé

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

Voici une solution pour R utilisant GTK + via le package gWidgets. C'est un code assez laid car je ne connais pas du tout le paquet gWidgets / GTK +.

Code

Voici le 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)

Production

Voici à quoi ressemble la sortie:

entrez la description de l'image ici


Il doit être mis à jour en permanence - cela signifie automatiquement
Poignée de porte

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é

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

Non golfé

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

1
Cela ne compte pas continuellement, n'est-ce pas? Bienvenue également à codegolf!
Cruncher

Merci, heureux d'être ici! Je suppose que j'ai mal compris, cela ne se mettrait à jour que lorsqu'il sera réexécuté. Je modifierai et republierai bientôt
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)

Cela compte les nouvelles lignes comme 2 caractères.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.