2017 рік майже тут!


17

Виклик

Завдання проста:

Не приймаючи входів і виводячи таке повідомлення:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Кількість разів дорівнює кількості годин до або після півночі UTC 31 грудня 2016 року.

Приклади

Наприклад, якщо це 19:01 UTC 31 грудня, слід вивести:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 

якщо це 23:24 UTC 31 грудня, слід вивести:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 

і якщо це 1:42 UTC 1 січня, ви повинні вивести:

 _     __    __
  |   |  | |   |
  |_  |__| |   | 
 _     __    __
  |   |  | |   |
  |_  |__| |   | 

Уточнення: якщо це 10-11 вечора 31 грудня, ви повинні вивести два, 11-12 вечора 31 грудня вихід один, 00-01 ранку січня 1-й вихід один, 01-02 січня 1-й вихід два тощо ...

Правила

  • Немає входів
  • Поперечні лінії або пробіли в порядку.
  • Ваша програма повинна працювати в будь-який час і день, коли я її запускаю (хоча і з великим результатом). Наприклад, 2 січня о 00:15 ранку ваш код повинен виводитися 25 разів.

(Це мій перший питання Code Golf, тому, якщо я не залишив жодної важливої ​​речі, будь ласка, дайте мені знати.)

Це Code Golf, тому виграють найкоротші біти


Чи округляється кількість годин до найближчого цілого числа? Якщо це за півгодини до Нового року-півночі, чи не повинно бути результату?
Грег Мартін

@GregMartin Дивіться мою редакцію для уточнення.
Квантова спагетікація

Що має відбутися, якщо я запускаю програму 3 січня?
betseg

@betseg, ви я просто про це думав. Дивіться правки :). Він повинен працювати так само, хоча вихід буде великим.
Квантова спагетіфікація

Гарне перше запитання. Про округлення: кількість повторень - це абсолютне значення різниці між поточним часом UCT та 0:00:00 1 січня UTC, округленим. Правильно?
edc65

Відповіді:


6

JavaScript (ES6), 107

Як анонімний метод без параметрів

Примітка 1483228800000єDate.UTC(2017,0)

_=>` _     __    __
  |   |  | |   |
  |_  |__| |   |
`.repeat((Math.abs(new Date-14832288e5)+36e5-1)/36e5)

Тест Це оновлюється кожні 1 хвилини, але вам знадобиться багато терпіння, щоб побачити зміни вихідних даних.

F=_=>`_     __    __
 |   |  | |   |
 |_  |__| |   |
`.repeat((Math.abs(new Date-14832288e5)+36e5-1)/36e5)

update=_=>O.textContent=F()

setInterval(update,60000)

update()
<pre id=O></pre>


4

Python 2 - 97 + 17 = 114 байт

import time
print'_     __    __\n |   |  | |   |\n |_  |__| |   |\n'*int((abs(time.time()-1483228800)+3599)/3600)

Запозичена логіка для стелі з відповіді edc65 .

Python 3,5 - 116 байт

import time,math
print('_     __    __\n |   |  | |   |\n |_  |__| |   |\n'*math.ceil(abs(time.time()/3600-412008)))

math.ceilповертає ціле число, 3.xтоді як в 2.xньому повертається float.

Дякуємо elpedro за збереження 3 байтів.


@ElPedro Дякую Я вже збирався це зробити, у своїх попередніх рішеннях я поспілкувався з datetime.now(pytz.utc).timestamp()необхідним python 3.5.
Гурупад Мамадапур


2

C складено з Clang 3.8.1 327 317 145 байт

172 байти збережено завдяки @ edc65

#include <time.h>
t;main(){time(&t);t=abs(difftime(t,1483228800)/3600);while(t--)puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");}

Безумовно

#include <time.h>
t;
main()
{
time(&t);

t=difftime(t, 1483228800)/3600;

while(t--)
    puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");
}

317 байт

10 байт збережено завдяки @ LegionMammal978

#include <time.h>
t,y,w;main() {struct tm n;time(&t);n=*localtime(&t);n.tm_hour=n.tm_min=n.tm_sec=n.tm_mon=0;n.tm_mday=1;w=n.tm_year;if((w&3)==0&&((w % 25)!=0||(w & 15)==0))w=8784;else w=8760;t=(int)difftime(t, mktime(&n))/3600;t=t<w/2?t:w-t;for(;y++<t;)puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");

Безумовно

#include <time.h>
t,y,w;
main()
{
    struct tm n;
    time(&t);

    n=*localtime(&t);

    n.tm_hour=n.tm_min=n.tm_sec=n.tm_mon=0;
    n.tm_mday=1;
    w=n.tm_year;

    if((w&3)==0&&((w % 25)!=0||(w & 15)==0))w=8784;else w=8760;

    t=(int)difftime(t, mktime(&n))/3600;
    t=t<w/2?t:w-t; 

    for(;y++<t;)
        puts(" _     __    __\n  |   |  | |   |\n  |_  |__| |   |\n");
}

Я додам кілька пояснень, коли зможу.


Хіба ви не можете це зробити n.tm_hour=n.tm_min=...=n.tm_mon=0;?
LegionMammal978

@ LegionMammal978 О так, я забув. Спасибі.
Уейд Тайлер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.