100-дневный обратный отсчет


25

Обычно отсчет времени начинается за 100 дней до события, возможно, из-за нашей базовой системы 10. Примеры этого можно найти везде:

  • 100 дней до твоего дня рождения
  • 100 дней до свадьбы
  • 100 дней до выборов
  • 100 дней до нашего выпуска
  • 100 дней до ее срока
  • 100 дней до футбольного сезона
  • 100 дней, пока вы не получите значок Fanatic

Вы получаете картину. Кажется, что 100-й день до события занимает второе место только после фактического события. Итак, для этой задачи мне нужно знать, какой будет дата через 100 дней, чтобы я мог определить, с чего мне тоже начать обратный отсчет.

вход

Нет ввода

Выход

Дата 100 дней от текущей даты на основе стандартного григорианского календаря (обязательно учитывайте високосные годы). Выход гибок, пока формат дата люди чтение в состоянии (например 2016-10-8, 10-8-16, [ 2016, 10, 8 ], 10/8/16 12:00:00 AM).

выигрыш

Код гольф: самый короткий код в байтах


Примеры

100 дней с сегодняшнего дня (5 апреля 2017 г.) - пятница, 14 июля 2017 г.

Current                Future
-------                ------
01/01/2001 +100        04/11/2001
01/01/2004 +100        04/10/2004
01/01/1900 +100        04/11/1900
01/01/2000 +100        04/10/2000

07/04/2017 +100        10/12/2017
10/31/2017 +100        02/08/2018
12/25/2017 +100        04/04/2018

08/29/1941 +100        12/07/1941
06/03/2001 +100        09/11/2001

2
Могу ли я добавить текущее время к выходу?
Тит

1
@ Титус нет, только будущая дата
NonlinearFruit

1
Большинство ответов включают дату и время, я думаю, это должно быть разрешено.
ГБ

1
@GB Когда вы выводите будущую дату, формат является гибким (может включать метку времени), пока он удобочитаем. Однако текущее время / дата не принимаются.
Нелинейный

5
" Из-за нашей системы Bas 10 "? Нет, если бы мы посчитали в двоичном виде, мы, вероятно, отсчитали бы от 100 - за исключением того, что это займет всего четыре дня, а не сто ...
Тоби Спейт

Ответы:


42

Excel, 10

=NOW()+100

демонстрация

введите описание изображения здесь


1
Также работает в Google Sheets.
Okx

11
Excel всегда хорош для кода гольф, который включает в себя разбор дат.
Тост инженера

2
Существует ли языковой пакет для Excel, в котором функция NOW прописана всего двумя буквами? В этом случае вы можете сэкономить 1 байт.
iFreilicht

13
Да, у голландца есть nu ()
Tominator

2
Хотя, для части даты , вы должны будете использовать =TODAY()+100или=TEXT(NOW()+100,"MM/dd/yyyy")
KyleMit

20

Баш, 17 16 15 14 13 байт

date -d100day

Оказывается, dateкоманда принимает довольно гибкий ввод для относительного времени. Вы также можете сделать вещи , как 1 year, 1 week ago, yesterdayи т.д. Это очень здорово.

-1 байт, понимая, что bash не заботится о грамматике.
-1 байт, потому что пробел между 100и dayне нужен.
-1 байт, потому что мне больше не нужны кавычки, потому что у меня нет пробела в строке.
-1 байт, удалив пробел после -d(спасибо только ASCII!)


Новая любимая команда +1
Нелинейный

@NonlinearFruit Ха, да, наверное, это одна из моих любимых команд. Благодарность!
HyperNeutrino

Вам не нужно место после-d
только ASCII

@ Только для ASCII О, ладно. Благодарность!
HyperNeutrino

10

PowerShell, 10 байт

(date)+1e2

Спасибо ConnorLSW за трюк + 1e2.

Похоже, что двойники ( 1e2это двойные) также добавляются как дни.

Предыдущая версия, 12 байт:

(date)+"100"

Видимо, вы можете добавить строки к датам в PowerShell. Строка "100"конвертируется в 100 дней TimeSpan.


2
Хорошо , не спрашивайте меня , почему, но даже если (date)+100не работает, то (date)+1e2делает ... Я предполагаю , что 1e2это на самом деле в doubleто время как 100это число , пока он не компилируется, то есть вы не можете позвонить , 100.GetType()но вы можете 1e2.GetType()- вот -2 и приводит нас к ничья с Excel!
colsw

@ConnorLSW Если это помогает или добавляет к путанице 100, рассматривается как добавление 100 тиков, где в качестве строки "100"берется число дней. Оба действительны PS, но только один делает то, что нам нужно.
Мэтт

@Matt 1e6все еще число и добавляется как дни, хотя?
colsw

Это интересно тогда. Возможно, под капотом происходит нечто большее, когда это число превышает порог .... Я не знаю
Мэтт,

Я думаю, что это как-то связано со старым типом DATE, который представляет собой 8-байтовое число с плавающей запятой, дни которого представлены в виде целых приращений. Я думаю, это то, что использует Excel.
Данко Дурбич


6

PHP, 28 байт

<?=date(Y_m_d,time()+864e4);

версия для чтения человеком, 35 ​​байт:

<?=date(Y_m_d,strtotime("100day"));

почти читаемый, 34 байта:

<?=date(Y_m_d,strtotime(1e2.day));

-4 байта, если также печатается время: замените Y_m_dна rили c.

Это национальный праздник во Франции через 100 дней.


Подчеркивание заставило меня сделать «Почему подчеркивает, это константа? Нет, строка ОН ЖДИТЕ« ПРОСТРАНСТВА »!!» Умная.
Мартин

@Martijn Включите, E_NOTICEи вы узнаете: Y_m_dэто неопределенная константа, а PHP принимает строку. Это работает с любым допустимым словом (включая все имена функций), кроме ключевых слов , предопределенных констант и без учета регистра true, falseи null.
Тит

5

Рубин , 16 байт

p Time.now+864e4

Попробуйте онлайн!


Собирался ответить на это, милая. Но я получаю разные результаты 864e4и 8640000я даже не знаю , почему. Я обвиняю TIO. РЕДАКТИРОВАТЬ: когда вы используете p, два значения дают разные результаты. Но когда вы используете puts, они одинаковы.
улитка

Я не понимаю, я получаю одинаковый результат с обоими. Можете ли вы опубликовать пример? Может это зависит от локали?
ГБ

p Time.now+864e4около 4 дней позади p Time.now+8640000на TIO. Я пробовал это несколько раз. Однако, если вы используете puts, это различие не существует. Я действительно не знаю, имеет ли значение моя локаль, Восток США должен быть вполне нормальным: PI, думаю, я попробую запустить его на своем ПК, когда вернусь домой.
snail_

5

Javascript, 29 26 25 байт

Сохранено 3 байта благодаря @ ASCII-only!

Сохранено 1 байт благодаря @JohanKarlsson

new Date(+new Date+864e7)

document.body.innerHTML=new Date(+new Date+864e7)


1
Вы можете использовать 864e7вместо864*10e6
ASCII-only

1
Вы можете сохранить 1 байт, используя +new DateвместоDate.now()
Йохан Карлссон

1
Это фрагмент. Вы должны включитьconsole.log
mbomb007


4

Vim, 27 байт

:r!date "+\%F" -d"+100 day"

попробуйте это онлайн!

введите описание изображения здесь

Редактировать: Удален ненужный пробел.


2
Если вы используете Linux date, то на этой странице вы date -d100dayне уверены, поможет ли это, хотя
только ASCII

Я проверяю это с :r!date +\%F -d100dayэтим также работает (по крайней мере, на моем ПК (C)), но это то же самое, что HyperNeutrinoуже используется в Bash.
12431234123412341234123

Вы можете сохранить байты, просто удалив vim и сделав это в bash.
Дэвид Конрад

4

MATL , 9 байт

Z'100+1XO

Выходной формат 15-Jul-2017(который я считаю наиболее читабельным). Перейдите 1XOна, 2XOчтобы получить формат, используемый в примерах 07/15/17.

Попробуйте онлайн!

объяснение

Z'      % Push current date and time as a serial date number
100+    % Add 100
1XO     % Convert to string with format 'dd-mmm-yyyy'. Implicitly display

4

SQL (Microsoft), 35 31 байт

SELECT DATEADD(D,100,GETDATE())

Вы можете использовать dвместо DAYи удалить пробелы внутри DATEADD.
mbomb007

Даже я не знал, что ты можешь использовать d. Я использую ddили dayна практике. Я просто попробовал, и это сработало.
mbomb007

3

Java 8, 77 , 61 байт

()->System.out.print(java.time.LocalDate.now().plusDays(100))

Попробуйте онлайн!


Есть ли причина, по которой вы не включили шаблон? (т. е. 'class A {public static...'). Я полагаю, что для Java необходима полная программа. Вы могли бы сделать лямбду ()->java.time.LocalDate.now().plusDays(100).
Нелинейный

У меня было это до редактирования моего ответа. Это было 94 байта вместе с шаблоном. Я новичок в гольф с Java. следовательно, я не уверен, нужно ли мне это включать!
Киртана Прабхакаран

2
Представления (если не указано иное) могут быть либо полной программой (выполняемой некоторым интерпретатором без изменений), либо функцией.
Нелинейно-

3

C #, 103 97 байт

Спасибо разнагул за сохранение 6 байтов!

using System;class P{static void Main(){Console.Write(DateTime.Now.AddDays(100).ToString("d"));}}

Полная программа, которая читает текущую дату, добавляет 100 дней и отображает результат в M/d/YYYYформате.

Вы можете изменить формат даты, добавив еще несколько байтов:

using System;class P{static void Main(){Console.Write(DateTime.Now.AddDays(100).ToString("d-M-yyyy"));}}

Для устранения стандартного кода - точно не известно, что C # очень компактен - можно использовать анонимную функцию:

C # лямбда, 49 43 байта

()=>DateTime.Now.AddDays(100).ToString("d")

Полная программа:

using System;

class P
{
    static void Main()
    {
        Func<string> f = 
        ()=>DateTime.Now.AddDays(100).ToString("d");

        Console.WriteLine(f());
    }
}

Для полной программы я думаю, что вы можете написать System.DateTime.Now ... чтобы избежать "использования системы";
Taemyr

1
@Taemyr: это будет дольше, так как он также нуждается в этом Console.Write.
Разнагул

2
@adrianmp: вы можете сохранить сохранить 6 байтов, используя .ToString("d")вместо .ToShortDateString().
Разнагул

3

Noodel , 8 байт

]5@LaƇ⁺ƈ

Попытайся:)


Как это работает

]5@LaƇ⁺ƈ
]5@La    # The string "]5@La" gets pushed onto the stack which in base 98 represents 8,640,000,000.
     Ƈ   # Pushes an integer that represents the current time where highest resolution is milliseconds.
      ⁺  # Add the time and the string which will be interpreted as 8,640,000,000ms.
       ƈ # Convert the integer to human readable time.
         # Implicitly output to the screen.

<div id="noodel" code="]5@LaƇ⁺ƈ" input="" cols="80" rows="2"/>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


Символ Ƈ является символом Unicode U + 0187, который слишком велик для отображения в одном байте. То же самое касается ƈ (U + 0188). Таким образом, хотя длина этого символа составляет 8 символов, минимальная длина байта равна 10.
iFreilicht

1
@iFreilicht, Noodel использует свою собственную кодировку. Редактор делает все в UTF-16, чтобы визуально работать лучше, но перед синтаксическим анализом кодируется на основе кодовой страницы Noodel .
17

3

Mathematica, 26 21 байт

-5 байт благодаря @KiranLinsuain!

Today+Quantity@"100d"

Если время разрешено, то мы можем сэкономить 2 байта:

Now+Quantity@"100d"

1
«Сейчас + количество [« 100d »]» несколько сокращает его, но может не всегда работать на всех версиях.
кл

3

C 87 46 44 байтов

сэкономил 2 байта благодаря Альберту Реншоу

f(){time_t t=time(0)+864e4;puts(ctime(&t));}

Я понял, что вывод достаточно гибкий, чтобы учесть день недели и время, поэтому нет необходимости использовать его localtimeили tmструктуру.

Старый ответ

f(){time_t t=time(0)+8640000;char b[9];strftime(b,9,"%d-%m-%y",localtime(&t));puts(b);}

Основано на ответе Халеда. , но вместо того, чтобы возиться со tmструктурой, к time_tзначению добавляется число секунд, эквивалентное 100 дням . Он также печатает только дату, без времени или дня недели.

Как и должно быть в программе для гольфа, при компиляции генерируются некрасивые предупреждения.

Попробуйте онлайн!

Ungolfed:

f(){
    // Current time + 100 days
    time_t t=time(0)+8640000;
    // Buffer for printing formatted time
    char b[9];
    // Print the time in format dd-mm-yy to buffer
    strftime(b,9,"%d-%m-%y",localtime(&t));
    // print buffer
    puts(b);
}

2
Побрей 2 байта, заменив 8640000на864e4
Альберт Реншоу

2

JavaScript, 42 байта

(d=new Date()).setDate(d.getDate()+100)&&d

setInterval(_=>document.body.innerHTML=(d=new Date()).setDate(d.getDate()+100)&&d,1000)


Я использовал ваш ответ как источник вдохновения для моего codegolf.stackexchange.com/questions/115436/100-day-countdown/… ;)
Томас В.,

2

IBM / Lotus Notes Formula, 29 байт

@Adjust(@Today;0;0;100;0;0;0)

К сожалению, @Adjustтребует отставания 0'sдля пропавших без вести hh:mm:ss.

Если бы нам было позволено также отображать время, то при переходе @Todayна @Now2 было бы сэкономлено 2 байта.


2

JavaScript (ES6), 44 байта

_=>new Date(Date.now()+864e7).toDateString()

25 байтов, если приемлемо возвращение даты со временем:

_=>Date(Date.now()+864e7)



2

Swift 3, 39 байт

print(Date(timeIntervalSinceNow:864E4))

Я бы сказал, что вам не нужно import foundation;. Swift работает только на iOS, и он автоматически импортируется туда.
Альберт Реншоу

Здесь пока не так много ответов Свифта, поэтому не уверен, что такое консенсус. Но я думаю, что у вас есть хорошая мысль, я
Мэтт

@Albert Swift также работает на Mac OS и Linux. Я не знаю, что это значит для того, требуется ли импорт, хотя.
Дэвид Конрад

2

C 120 113 байтов

#include <time.h>
f(){time_t t=time(0);struct tm*tm=localtime(&t);tm->tm_mday+=100;t=mktime(tm);printf("%s",ctime(&t));}

Live Demo

#include <stdio.h>
#include <time.h>

void PrintDatePlus100days()
{
    // obtain current time
    time_t t = time( 0 );

    // convert to datetime struct
    struct tm *tm = localtime( &t );

    // add 100 days
    tm->tm_mday += 100;

    // convert to time_t
    t = mktime( tm );

    // print time in readable format
    puts( ctime( &t ) );
}

Если я не ошибаюсь, вам не нужно учитывать #include ...шаблон при отправке функций. (Java-ответы, например, importв этом случае не нужны )
Кассио Ренан,

@ CássioRenan в Java, вам не нужно считать импорт по умолчанию, как java.lang.*, например, как мы не учитываем stdio.hи stdlib.hв C. Но даже в java вам нужно либо учитывать пользовательский импорт, либо указывать путь в имени класса, например java.util.Date, и это засчитывается в ваш счет.
Khaled.K

2
Почему использование не printf()будет puts()работать?
12431234123412341234123

2

PowerShell, 23

(get-date).adddays(100)

Это моя первая попытка, поэтому, пожалуйста, дайте мне конструктивный отзыв. Благодарность!


2

R (REPL), 14 байтов

Sys.Date()+100

Попробуйте это на Ideone .


1
Это фрагмент. Ваш код должен выводить результат, либо как результат функции, либо как STDOUT как полная программа.
mbomb007


@ mbomb007 REPL ответы будут разрешены , но они считают отдельным языком.
Денис

@Dennis Это не было перечислено как REPL прежде.
mbomb007

1

Python, 63 байта

from datetime import*
print(datetime.now()+timedelta(days=100))

Очень простое решение на самом деле. Поскольку datetime.now()результат совпадает typeс результатом timedelta, он счастливо складывает их вместе.


Это не должно быть функцией. Вы можете удалить, lambda:и это все равно будет полная программа.
Нелинейный

@NonlinearFruit Да, но printдолжен быть добавлен, и это делает его таким же количеством байтов.

Если вы используете Python 2, вы можете убрать квадратные скобки, printчтобы сохранить 1 байт
Мертвый опоссум

days=не является обязательным, что позволит сэкономить 5 + 1 байт (python2 printскобки «s)
Фелипе Nardi Батиста

Гольф до 57 байт:from datetime import*;print datetime.now()+timedelta(100)
Mr. Xcoder




1

Питон 2 + Панды 0.19.1, 56 51 байт

from pandas import*
print Timestamp('now','D')+100
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.