2017 почти здесь!


17

Вызов

Задача проста:

Не принимая никаких входных данных и выведите следующее сообщение:

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

Количество раз, равное количеству часов до или после полуночи UTC 31 декабря 2016 года.

Примеры

Например, если это 19:01 UTC 31 декабря, вы должны вывести:

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

если это 23:24 UTC 31 декабря, вы должны вывести:

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

и если 1:42 UTC 1 января, вы должны вывести:

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

Пояснение: если это 10-11 вечера 31 декабря, вы должны вывести два, 11-12 вечера 31 декабря вывести один, 00-01am января 1-го выхода один, 01-02am января 1-го выхода два и т. Д ...

правила

  • Нет входов
  • Конечные строки или пробелы в порядке.
  • Ваша программа должна работать в любое время или день, когда я ее запускаю (хотя и с большим выходом). Например, 2 января в 00:15 ваш код должен выводиться 25 раз.

(Это мой первый вопрос по Code Golf, поэтому, если я что-то упустил, пожалуйста, дайте мне знать.)

Это Код Гольф, поэтому выигрывают самые короткие биты


Количество часов округляется до ближайшего целого числа? Если это в течение получаса после полуночи Нового года, разве не должно быть никакого выхода?
Грег Мартин

@GregMartin Смотрите мои изменения для уточнения.
Квантовая спагеттификация

Что должно произойти, если я запустите программу 3 января?
бетсег

@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нем возвращается число с плавающей запятой.

Спасибо 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");}

Ungolfed

#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");

Ungolfed

#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.