Noel geri sayım


10

Tatil ruhuna ve kış temasına daha önce ( kardan adam yap! ) Yeni bir meydan okuma öneriyorum.

Uygun gördüğünüz belirsiz bir biçimde tek başına bir pencerede (konsol değil) Noel'e (25 Aralık gece yarısı (00:00:00)) kadar gün, saat, dakika ve saniye sayısını yazdırın ve sürekli olarak güncelleyin değerler değişir.

Girdi - hiçbir şey, sistem saatini okumalıdır.

En kısa kod kazanır :) "Gün", "Saat", "Dakika", "Saniye" ve "Noel'e Kadar" dizeleri ücretsiz koddur. İsterseniz onları da lezzetlendirebilirsiniz. Onları lezzetlendirmek, güzel bir çıktı üretmek için tamamen. Kodları kaydetmek için sihirli bir numara yapmak amacıyla dizeleri lezzetlendiremezsiniz.


"Lezzetlendir" ile tam olarak ne demek istiyorsun? Çıktıda "gün", "saat", "dakika", "saniye" ve "Noel'e kadar" gerekli mi, yoksa yalnızca ücretsiz seçenekler var mı? Bu tellerden ne kadar "aroma" ücretsizdir?
Iszi

2
Konsol yok mu ?? Konsol kodlayıcıları isyan! Şaka yapıyorum. İyi fikir. Mutlu tatiller.
Darren Stone

@Iszi Gerekli değil. Onlara ücretsiz verdim, böylece insanlar gerçekten güzel bir çıktı elde etmek istiyorlarsa çok fazla karakter kaybetmezler.
Cruncher

1
Noel gece yarısı Noel'in sonu değil mi?
DavidC

2
Hayır, tipik olarak gece yarısı yeni günün sıfırıncı anındadır. "Geceyarısı Noel" Noel başladığı zamandır.
breadbox

Yanıtlar:


5

Ayakkabılı Yakut, 96-33 = 63

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

Asla yapamayacağımızı söylemedin . ;)

ekran görüntüsü

Her karede bir kez güncellenir.

Sihirli sayı 1387951200Noel - 25 Aralık 2013 00:00.

Numaraları aldığım yer için örnek IRB oturumu:

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:00gece yarısı.
Cruncher

@Cruncher Ah, tamam o zaman. O zaman işe yaramaz metnin
çoğunu

3

PowerShell: 279

Karakter sayısı hiçbir freebiyi dikkate almaz. @Cruncher - lütfen buna göre ayarlayın.

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

Bu kod ya da pencere olarak en güzel şey değil, ama işe yarıyor.

Güzel bir nokta, bunun sadece 2013 için iyi değil - 1 Ocak'ta 00:00 ile 25 Aralık'ta 00:00 arasında herhangi bir yılda çalışacak.

Uyarı: Pencere yanıt vermeyebilir - güncellenmeye devam eder, ancak onu taşıyamayabilir veya kapatamayabilirsiniz.

resim açıklamasını buraya girin

Yorumlarla birlikte golf oynamak

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

Aşağıdakiler, Noel gününün başlangıcına kadar günleri, saatleri, dakikaları ve saniyeleri (binde bir olarak) gösteren bir tabloyu sürekli olarak günceller. Ücretsiz dizeler için indirim saymak nasıl emin değilim.

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

geri sayım


Hızlı ve kirli bir çözüm : 104-19 = 85 karakter

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

{{17, "Gün"}, {10, "Saat"}, {59, "Dakika"}, {51.4011, "İkinci"}}


"Countdown to Christmas: Days"Bu ücretsiz olabilir, "Day", "Hour", "Minute", "Second"yanı olabilir.
Cruncher

Açıklama için teşekkürler. Btw, karakter dizileri dışındaki boşluklar zorunlu değildir. Sadece okunabilirlik için yerleştirilmişlerdir.
DavidC

Neden sayıların önünde "-" var? Kafa karıştırıcı olabilir ve zaten Noel'den geçtik gibi görünüyor. DateDifference'deki sipariş değiştirilerek düzeltilir mi?
Cruncher

Bunları kaldırdım ve biçimlendirmeyi geliştirdim, eklenen karakterlerle fiyatı ödedi.
DavidC

2

Piton 136

Eminim birisi bunu daha iyi yapabilir - daha önce hiç Tkinter kullanmadım. Özellikle bahse girerim l.pack()ve l["text"]kaçınılabilir.

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

1

R,

İşte gWidgets paketi aracılığıyla GTK + kullanan R için bir çözüm. Hiç gWidgets / GTK + paketine aşina olmadığım için bu oldukça çirkin bir kod.

kod

İşte 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)

Çıktı

Çıktı şöyle görünür:

resim açıklamasını buraya girin


Sürekli güncelleme
yapmalıdır

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

golfed

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
Bu sürekli geri saymaz, değil mi? Ayrıca, codegolf hoş geldiniz!
Cruncher

Teşekkürler, burada olduğum için memnunum! Sanırım yanlış anladım, bu sadece yeniden çalıştırıldığında güncellenir. Yakında düzenleyeceğim ve yeniden yayınlayacağım
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)

Bu, yeni satırları 2 karakter olarak sayar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.