Как давно это было?
Правила
- Каждое представление должно быть полной программой.
- Программа должна принять входные данные как две разделенные запятыми даты в форме
YYYY-MM-DD
и вывести количество дней, прошедших со второй даты, в STDOUT, как если бы сегодня была первая дата (если вторая дата будет в будущем, выведите отрицательное число) плюс дополнительный завершающий перевод строки и ничего больше. Предположим, что обе даты в григорианском календаре. Программа не должна ничего писать в STDERR.
Обратите внимание, что должен быть переводчик, чтобы представление можно было проверить.
- Представления оцениваются в байтах в соответствующей (ранее существующей) кодировке, обычно (но не обязательно) UTF-8. Некоторые языки, такие как папки , немного сложнее - если есть сомнения, пожалуйста, спросите на Meta .
- Это Код-гольфтак выигрывает самый короткий код
Примеры
Входные данные:
2015-12-03,2015-12-01
Вывод:
2
Входные данные:
2015-12-03,2014-12-01
Вывод:
367
Входные данные:
2015-12-03,2013-12-03
Вывод:
730
Фрагмент
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде таблицы лидеров и б) в виде списка победителей по языкам.
Чтобы убедиться, что ваш ответ отображается, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=65989,OVERRIDE_USER=46167;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?([\d.]+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Ответы:
TeaScript , 24 байта
Использует
Date.parse
для анализа даты, а затем получить разницу и делит.Попробуйте онлайн
Объяснение && Ungolfed
источник
Утилиты Bash + GNU, 37
tr
заменяет запятую на новую строку.date
читает разделенные новой строкой даты и выводит количество секунд, прошедших с начала эпохи Unix, которые представляет перенесенная дата. Эти числа затем помещаются вdc
стек. Тогда это просто вопрос вычитания и делить на (24 * 60 * 60). В этом случаеdc
арифметическая оценка RPN на основе стека лучше, чемbc
или bash$( )
, в основном потому, что для вычитания перед делением не нужны скобки.Ввод через STDIN:
источник
Юлия, 67 байт
Ungolfed:
источник
-diff(d)[1]
вы можете использовать-(d...)
для сохранения пару байтов. Кстати, какую версию Юлии вы используете? На 1.2 мне пришлось явно импортировать,Dates
и я также не могу просто конвертировать дни в целые числа, как это.Scala,
16613912011692 байтаПрименение:
scala [source filename].scala [date1],[date2]
Примечание. Третья версия (120 байт) использует устаревший API. Он все еще компилируется и работает нормально. Примечание 2: Спасибо комментаторам ниже за отличный совет!
источник
print
вместоprintln
.Object A extends App{...}
часть и сохранить ее какa.scala
и запустить ееscala a.scala 2015-12-3,2015-12-1
;)Рубин,
6966655755 байт47 байт + 8 байт для параметра командной строки. Благодаря Дейну Андерсону, сэкономлено 2 байта.
57 байт
49-байтовый код + 8 байт для опции командной строки. Сохранено 8 байтов с предложением manatwork.
65 байт
66 байт
69 байт
Протестируйте это онлайн
Ungolfed
Применение:
источник
','
→?,
,'-'
→?-
,to_i/
→div
.ruby -naF[,-] -e 'p (Time.new(*$F[0,3])-Time.new(*$F[3,3])).div 86400' <<< '2015-10-11,2015-07-11'
это 59 символов, как я считаю.-e
), бесплатна, все остальное должно быть включено в счет. Есть разные мнения о том, что именно это все остальное. Например, некоторые члены включают символ пробела разделителя параметров и кавычки вокруг значений параметров. На мой взгляд, следует учитывать только то, что фактически передается интерпретатору, а дополнительные символы, необходимые для синтаксиса оболочки, - нет. Но не могу вспомнить ни одного голоса, поднятого, чтобы запретить использование опций.t=->l{Time.gm(*$F[l,3])};p (t[0]-t[3]).div 86400
Japt , 41 байт
Пока это лучшее, что я могу получить, так как все переменные
$
и скобки действительно убивают количество байтов.Попробуйте онлайн
объяснение
источник
MATLAB,
4131 байтВходные данные должны быть массивом ячеек, разделенных запятыми.
datenum
преобразует входную ячейку в числовой массив 2x1 с отметкой времени.diff
берет разницу между двумя.Старое решение, 41 байт :
Ввод должен быть через запятую:
Любопытные способы программирования. Это работает из-за неявного приведения MATLAB между типами данных.
Выходом
strsplit(input(''))
является ячейка строк. Вы не можете использоватьdiff
ячейку, но, к счастью, онаdatenum
работает, и она фактически возвращает вход ячейки обратно в числовой массив 2x1, делаяdiff
возможным использование.Вы можете указать множество разделителей
strsplit
, но запятая используется по умолчанию. Кроме того, по умолчанию вводdatenum
в форматеyyyy-mm-dd
. По этим причинам многие спецификации, такие как: datenum (s, 'yyyy-mm-dd'), избегают, сохраняя большое количество байтов.Для записи, это было бы 21 байт, если бы я мог использовать функцию:
источник
Javascript ES6, 63 байта
Проверено в хром.
источник
Date.parse
и заменить-
с/
2015-12-03
будет работать, но2015-12-3
не будет (кроме Chrome). Вопрос действительно говорит о том, что дата будет в формате,YYYY-MM-DD
поэтому, если ввод действительно следует, что он будет кроссбраузерно-совместимым, однако примеры, похоже, говорят об обратном. В любом случае, вы можете использоватьDate.parse
вместо того,new Date
чтобы сохранять 2 байта:alert((p((a=prompt(p=Date.parse).split`,`)[0])-p(a[1]))/864e5)
PHP, 63
6477байтУстановлено, что классический подход короче ООП:
Читает разделенную запятыми строку из
STDIN
.Прямой путь ООП ( 77 байт ):
Правки
strtotime
вместоDateTime
.strtotime
в переменной. Благодаря Черной дыре .источник
<?=
вместоecho
.VBA, 69 байт
источник
PSL, 75 байт
(Код из 74 символов + 1 символ командной строки)
psql
интерактивный терминал PostgreSQL Для соблюдения «Каждая заявка должна быть полная программа». Как правило, код читает сам ввод.Образец прогона:
источник
MATL, 5 байтов
Это то же самое , как ответ Стьюи Гриффин, за исключением я
flip
тогда ,diff
а неdiff
то отрицая результат.Полное объяснение с соответствующими функциями Matlab:
источник
o
дляdatenum
функции :-DPowerShell v2 +,
5044 байтаПринимает входной аргумент в виде строки, разделяет его на запятую, а затем передает массив через встроенный псевдоним,
date
сокращающий дляGet-Date
преобразования наших строк в формат даты и времени .NET. Эти две даты затем сохраняются одновременно в$a
и$b
. Затем мы используем перегруженный оператор вычитания, чтобы вычесть второе из первого и вывести.Days
его.Гольф 6 байтов благодаря TessellatingHeckler .
Технически неконкурентоспособен, так как не имеет онлайн-переводчика, поскольку реализация FOSS PowerShell, Pash , находится вокруг PowerShell v0.5. Он еще не поддерживает,
-split
не говоря уже о сложной функциональности даты .NET.источник
Excel, 25 байт
Excel автоматически обрабатывает строки как даты.
источник
Джольф , 33 байта
Работает только в Chrome. Неконкурентоспособен, так как языковые обновления ставят вопрос задним числом. Я добавлю более подробное объяснение позже.
«Объяснение»
источник
MATLAB, 59 байт
Очень простой подход: ввод должен быть задан в виде строки из командного окна. Затем входная строка разделяется, и количество дней между датами (и ничего больше) вычисляется из чисел серийных дат. Я вполне уверен, что есть способ избежать необходимости дважды вызывать datenum ...
источник
Python 2,
109113 байтовисточник
T-SQL + SQLCMD, 51 байт
Протестировано с SQL Server 2008R2. $ (I) заменяется вводом в качестве аргумента командной строки.
Образец прогона:
источник
Mathematica, 61 байт
Основное вычитание даты.
источник
Perl,
9186 + 2 для флагов np, 88 байтиспользуйте Date :: Calc qw (Delta_Days); ($ a, $ b) = split (/, /); $ _ = Delta_Days (split (/ - /, $ b), split (/ - /, $ a))пример
источник
JQ, 50 байт
(49 символов кода + 1 символ опции командной строки)
Образец прогона:
Он-лайн тест (передача
-R
через URL не поддерживается - поэтому ввод передается в виде строки "2015-12-3,2013-12-3".)источник
Mathematica, 56 байт
Большинство (все?) Функций даты будут пытаться автоматически разбирать строковые входные данные на даты.
источник
Japt , 13 байт
Попробуй это
источник
C # .NET , 148 байт
Попробуйте онлайн
источник