Countdown Natal


10

Dalam semangat liburan, dan sebagai seseorang sudah memulai tema musim dingin ( Bangun manusia salju! ) Saya mengusulkan tantangan baru.

Cetak jumlah hari, jam, menit, dan detik hingga Natal (tengah malam (00:00:00) tanggal 25 Desember) pada jendela yang berdiri sendiri (bukan konsol) dalam format apa pun yang Anda inginkan, dan terus perbarui karena ini nilai berubah.

Input - tidak ada, harus membaca waktu sistem.

Kode terpendek menang :) Senar "Hari", "Jam", "Menit", "Detik", dan "Hingga Natal" adalah kode gratis. Anda juga bisa menambahkannya jika mau. Membumbui mereka benar-benar bertujuan untuk menghasilkan output yang bagus. Anda tidak dapat membumbui string untuk tujuan membuat angka ajaib untuk menyimpan kode.


Apa yang sebenarnya Anda maksudkan dengan "menambahkannya"? Apakah "hari", "jam", "menit", "detik", dan "hingga Natal" diperlukan dalam output, atau hanya opsi gratis? Berapa banyak "bumbu" dari senar-senar itu gratis?
Iszi

2
Tidak ada konsol ?? Coders konsol memberontak! Hanya bercanda. Ide bagus. Selamat berlibur.
Darren Stone

@Iszi Mereka tidak perlu. Saya hanya memberi mereka gratis sehingga jika orang ingin membuat output yang bagus sebenarnya mereka tidak akan kehilangan begitu banyak karakter.
Cruncher

1
Bukankah Natal tengah malam adalah akhir Natal?
DavidC

2
Tidak, biasanya tengah malam adalah momen instan dari hari baru. "Natal Tengah Malam" adalah saat Natal dimulai.
kotak roti

Jawaban:


5

Ruby with Shoes , 96 - 33 = 63

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

Yah, kau tidak pernah bilang kita tidak bisa . ;)

tangkapan layar

Pembaruan sekali setiap frame.

Angka ajaib 1387951200adalah Natal - 25 Des 2013 00:00.

Contoh sesi IRB untuk tempat saya mendapatkan angka:

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:00tengah malam.
Cruncher

@Cruncher Ah, baiklah kalau begitu. Mengedit banyak teks yang tidak berguna
Doorknob

3

PowerShell: 279

Hitungan karakter tidak memperhitungkan gratisan apa pun. @Cruncher - harap sesuaikan.

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

Ini bukan hal yang paling cantik, baik sebagai kode atau sebagai jendela, tetapi ini berfungsi.

Satu hal yang menyenangkan adalah bahwa ini tidak hanya baik untuk tahun 2013 - ini akan bekerja pada tahun apa saja, dari pukul 00:00 pada 1 Januari hingga 00:00 pada tanggal 25 Desember.

Peringatan: Jendela mungkin menjadi tidak responsif - itu akan terus diperbarui, tetapi Anda mungkin tidak dapat memindahkan atau menutupnya.

masukkan deskripsi gambar di sini

Berhenti bermain golf dengan komentar

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

Berikut ini secara terus-menerus memperbarui tabel yang menunjukkan hari, jam, menit, dan detik (dalam ribuan) hingga awal hari Natal. Saya tidak yakin bagaimana cara menghitung diskon untuk string gratis.

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

hitungan mundur


Solusi cepat dan kotor : 104-19 = 85 karakter

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

{{17, "Hari"}, {10, "Jam"}, {59, "Minute"}, {51.4011, "Second"}}


"Countdown to Christmas: Days"Ini bisa bebas, "Day", "Hour", "Minute", "Second"bisa juga.
Cruncher

Terimakasih atas klarifikasinya. Btw, ruang di luar string tidak wajib. Mereka dimasukkan hanya untuk keterbacaan.
DavidC

Kenapa ada "-" di depan angka? Mungkin membingungkan, dan sepertinya kita sudah melewati Natal. Apakah mereka akan diperbaiki dengan mengubah urutan di DateDifference?
Cruncher

Saya menghapusnya dan meningkatkan format, membayar harga dalam karakter yang ditambahkan.
DavidC

2

Python 136

Saya yakin seseorang dapat melakukan ini dengan lebih baik - Saya belum pernah menggunakan Tkinter sebelumnya. Secara khusus saya bertaruh l.pack()dan l["text"]bisa dihindari.

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

Ini adalah solusi untuk R yang menggunakan GTK + melalui paket gWidgets. Ini adalah kode yang jelek karena saya tidak terbiasa dengan paket gWidgets / GTK + sama sekali.

Kode

Ini kodenya:

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)

Keluaran

Berikut ini hasilnya:

masukkan deskripsi gambar di sini


Itu harus terus memperbarui - itu berarti secara otomatis
Gagang Pintu

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));}}

Tidak disatukan

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

1
Ini tidak terus menghitung mundur kan? Juga, Selamat Datang di codegolf!
Cruncher

Terima kasih, senang berada di sini! Saya kira saya salah paham, ini hanya akan diperbarui ketika dijalankan kembali. Saya akan mengedit dan mem-posting ulang segera
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)

Ini menghitung baris baru sebagai 2 karakter.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.