неділя, 25 листопада 2007 р.

До Нового Року ще можна пристрелитись



Зацініть який я файнєцький кавалок коду написав. Сам не можу натішитись :)

$KCODE = "u"

# Перетворює число секунд у зручний формат -- [секунди, хвилини, години, дні]
#
def human_timer(total_sec)
(day ,hour = (tmp, min = (tmp, sec = (total_sec.to_i).divmod(60))[0].divmod(60))[0].divmod(24))
return sec, min, hour, day
end

# Вибирає відмінок в залежності від числа
#
def choose_plural(amount, *variants)
variant = ( (amount % 10 == 1 && amount % 100 != 11) ? 1 : (amount % 10 >= 2 && amount % 10 <= 4 && (amount % 100 < 10 || amount % 100 >= 20) ) ? 2 : 3 )
return variants[variant - 1]
end

# Формує стрічку скільки часу залишилось до Нового Року )))
#
def glue_string
new_year_date = Time.mktime(2008)
total_sec = new_year_date - Time.now
if total_sec > 0
sec, min, hour, day = human_timer(total_sec)
a_string ="До Нового Року залишилось"
a_string << " #{day} #{choose_plural(day, 'день', 'дні', 'днів')}" if !day.zero?
a_string << " #{hour} #{choose_plural(hour, 'година', 'години', 'годин')}" if !hour.zero?
a_string << " #{min} #{choose_plural(min, 'хвилина', 'хвилини', 'хвилин')}" if !min.zero?
a_string << " #{sec} #{choose_plural(sec, 'секунда', 'секунди', 'секунд')}" #if !sec.zero?
else
a_string = "З Новим Роком!"
end
end

puts glue_string


Тільки не кажіть що так писати не можна :). Я ж так старався... Думаю як ще можна спотворити цей витвір...

Ось декілька прикладів виконання:
$ ruby happy_new_year.rb
До Нового 2008 Року залишилось 36 днів 10 годин 36 хвилин 28 секунд
$ ruby happy_new_year.rb
До Нового 2008 Року залишилось 36 днів 10 годин 36 хвилин 24 секунди
$ ruby happy_new_year.rb
До Нового 2008 Року залишилось 36 днів 10 годин 36 хвилин 21 секунда

Немає коментарів: