Cuenta regresiva de navidad

10

En el espíritu de las vacaciones, y como alguien ya comenzó el tema del invierno (¡ Construye un muñeco de nieve! ), Propongo un nuevo desafío.

Imprima el número de días, horas, minutos y segundos hasta Navidad (medianoche (00:00:00) 25 de diciembre) en una ventana independiente (no una consola) en cualquier formato inequívoco que considere adecuado, y actualícelo continuamente como estos Los valores cambian.

Entrada: nada, debe leer la hora del sistema.

El código más corto gana :) Las cadenas "Días", "Horas", "Minutos", "Segundos" y "Hasta Navidad" son código libre. También puedes darles sabor si quieres. Sazonarlos es puramente con el propósito de producir una buena salida. No puede dar sabor a las cadenas con el propósito de hacer un número mágico para guardar el código.

Cruncher
fuente
¿Qué quieres decir exactamente con "darles sabor"? ¿Se requieren "días", "horas", "minutos", "segundos" y "hasta Navidad" en la salida, o simplemente opciones gratuitas? ¿Cuánto "saborizante" de esas cuerdas es gratis?
Iszi
2
¿Sin consola? ¡Codificadores de consola revuelta! Es una broma. Buena idea. Felices vacaciones.
Darren Stone
@Iszi No son necesarios. Acabo de darlos gratis para que si la gente quiere hacer una buena salida real no pierdan tantos personajes.
Cruncher
1
¿No es la medianoche de Navidad el final de la Navidad?
DavidC
2
No, normalmente la medianoche es el instante cero del nuevo día. "Navidad de medianoche" es cuando comienza la Navidad.
breadbox

Respuestas:

5

Rubí con zapatos , 96-33 = 63

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

Bueno, nunca dijiste que no podíamos . ;)

captura de pantalla

Actualizaciones una vez cada fotograma.

El número mágico 1387951200es Navidad - 25 de diciembre de 2013 00:00.

Ejemplo de sesión IRB de donde obtuve los números:

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>
Pomo de la puerta
fuente
Dec 25, 2013 00:00es medianoche
Cruncher
@Cruncher Ah, está bien entonces. Edición de un montón de texto inútil entonces
Pomo de la puerta
3

PowerShell: 279

El recuento de caracteres no tiene en cuenta ningún obsequio. @Cruncher: ajústelo en consecuencia.

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

Esto no es lo más bonito, ya sea como código o como ventana, pero funciona.

Una buena parte es que esto no solo es bueno para 2013: funcionará en cualquier año, desde las 00:00 del 1 de enero hasta las 00:00 del 25 de diciembre.

Advertencia: la ventana puede dejar de responder: continuará actualizándose, pero es posible que no pueda moverla o cerrarla.

ingrese la descripción de la imagen aquí

Sin golf con comentarios

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

Mathematica 167 - 44 = 123

Lo siguiente actualiza continuamente una tabla que muestra los días, horas, minutos y segundos (en milésimas) hasta el comienzo del día de Navidad. No estoy seguro de cómo contar el descuento para las cadenas gratuitas.

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

cuenta regresiva


Una solución rápida y sucia : 104-19 = 85 caracteres

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

{{17, "Día"}, {10, "Hora"}, {59, "Minuto"}, {51.4011, "Segundo"}}

DavidC
fuente
"Countdown to Christmas: Days"Esto puede ser libre, "Day", "Hour", "Minute", "Second"puede ser así.
Cruncher
Gracias por la aclaración. Por cierto, los espacios fuera de las cadenas no son obligatorios. Se insertan solo para legibilidad.
DavidC
¿Por qué hay "-" delante de los números? Puede ser confuso, y parece que ya pasamos la Navidad. ¿Se solucionarían cambiando el orden en DateDifference?
Cruncher
Los eliminé y mejoré el formato, pagando el precio en caracteres agregados.
DavidC
2

Python 136

Estoy seguro de que alguien puede hacer esto mejor, nunca he usado Tkinter antes. En particular, apuesto a que el l.pack()y l["text"]lata son evitables.

tk

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()
chmullig
fuente
1

R

Aquí hay una solución para R usando GTK + a través del paquete gWidgets. Este es un código bastante feo ya que no estoy familiarizado con el paquete gWidgets / GTK +.

Código

Aquí está el código:

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)

Salida

Así es como se ve la salida:

ingrese la descripción de la imagen aquí

tchakravarty
fuente
Tiene que actualizarse continuamente, eso significa automáticamente
Pomo de la puerta
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
fuente
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));}}

Sin golf

using D=System.DateTime;
using System.Windows.Forms;
class C
{
    static void Main()
    {
        MessageBox.Show(""+(new D(2013,12,25)-D.Now));
    }
}
James C.
fuente
1
Esto no cuenta atrás continuamente, ¿verdad? Además, ¡Bienvenido a codegolf!
Cruncher
Gracias, me alegro de estar aquí! Supongo que no he entendido bien, esto solo se actualizará cuando se vuelva a ejecutar. Voy a editar y volver a publicar pronto
James C.
0

Pitón 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)

Esto cuenta las nuevas líneas como 2 caracteres.

Timtech
fuente