Há quanto tempo foi isso?
As regras
- Cada envio deve ser um programa completo.
- O programa deve receber a entrada como duas datas separadas por vírgula no formulário
YYYY-MM-DD
e imprimir o número de dias que passaram desde a segunda data para STDOUT como se hoje fosse a primeira data (se a segunda data seria no futuro, produza um número negativo) mais uma nova linha à direita opcional e nada mais. Suponha que as duas datas estejam no calendário gregoriano. O programa não deve gravar nada no STDERR.
Observe que deve haver um intérprete para que o envio possa ser testado.
- As submissões são pontuadas em bytes , em uma codificação apropriada (pré-existente), geralmente (mas não necessariamente) em UTF-8. Alguns idiomas, como Pastas , são um pouco difíceis de classificar - em caso de dúvida, pergunte no Meta .
- Isto é código-golfe , então o código mais curto ganha
Exemplos
Entrada:
2015-12-03,2015-12-01
Resultado:
2
Entrada:
2015-12-03,2014-12-01
Resultado:
367
Entrada:
2015-12-03,2013-12-03
Resultado:
730
O Snippet
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma tabela de classificação eb) como uma lista de vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](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>
Respostas:
TeaScript , 24 bytes
Usa
Date.parse
para analisar a data, depois obtém a diferença e divide.Experimente online
Explicação && Ungolfed
fonte
Utilitários Bash + GNU, 37
tr
substitui a vírgula por uma nova linha.date
lê as datas separadas da nova linha e gera o número de segundos desde a época do Unix que a data passada representa. Esses números são então colocados nadc
pilha. Então é uma simples questão de subtração e divida por (24 * 60 * 60). Nesse caso, adc
avaliação aritmética da RPN baseada em pilha é melhor quebc
ou bash$( )
, principalmente porque a sub-ação antes da divisão não precisa de parênteses.Entrada via STDIN:
fonte
Julia, 67 bytes
Ungolfed:
fonte
-diff(d)[1]
você pode usar-(d...)
para salvar alguns bytes. Qual versão Julia você está usando? Na versão 1.2, tive que importar explicitamenteDates
e também não posso converter dias em números inteiros como esse.Scala,
16613912011692 bytesUso:
scala [source filename].scala [date1],[date2]
Nota: A terceira versão (120 bytes) e on usa uma API reprovada. Ainda compila e funciona bem. Nota2: Obrigado aos comentaristas abaixo pelos ótimos conselhos!
fonte
print
vez deprintln
.Object A extends App{...}
peça e salvá-la comoa.scala
e executá-la comscala a.scala 2015-12-3,2015-12-1
;)Ruby,
6966655755 bytes47 bytes + 8 bytes para a opção de linha de comando. Graças a Dane Anderson, economizou 2 bytes.
57 bytes
Código de 49 bytes + 8 bytes para a opção de linha de comando. Economizou 8 bytes com a sugestão do manatwork.
65 bytes
66 bytes
69 bytes
Teste on-line
Ungolfed
Uso:
fonte
','
→?,
,'-'
→?-
,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'
tem 59 caracteres, conforme conto.-e
) é gratuita, todo o resto precisa ser incluído na contagem. Existem opiniões diferentes sobre o que exatamente é isso tudo. Por exemplo, alguns membros incluem o caractere de espaço separador de opções e aspas em torno dos valores dos parâmetros. Na minha opinião, deve-se contar apenas o que realmente é passado ao intérprete, caracteres extras exigidos pela sintaxe do shell não. Mas não consigo lembrar de nenhuma voz levantada para impedir o uso de opções.t=->l{Time.gm(*$F[l,3])};p (t[0]-t[3]).div 86400
Japonês , 41 bytes
Até agora, é o melhor que posso obter, pois todas as variáveis
$
e parênteses realmente matam a contagem de bytes.Experimente online
Explicação
fonte
MATLAB,
4131 bytesA entrada deve ser uma matriz de células separada por vírgula.
datenum
converte a célula de entrada em uma matriz numérica 2x1 com o carimbo de hora.diff
leva a diferença entre os dois.Solução antiga, 41 bytes :
A entrada deve ser uma sequência separada por vírgula:
As curiosas formas de programação. Isso funciona devido à conversão implícita do MATLAB entre tipos de dados.
A saída de
strsplit(input(''))
é uma célula de strings. Você não pode usardiff
em uma célula, mas, felizmente,datenum
funciona, e na verdade lança a entrada da célula de volta para uma matriz numérica 2x1,diff
possibilitando o uso.Você pode especificar vários delimitadores
strsplit
, mas a vírgula é o padrão. Além disso, a entrada padrão paradatenum
está no formatoyyyy-mm-dd
. Por esses motivos, muitas especificações, como: datenum (s, 'aaaa-mm-dd') são evitadas, economizando muitos bytes.Para o registro, isso seria 21 bytes se eu pudesse usar uma função:
fonte
Javascript ES6, 63 bytes
Testado em cromo.
fonte
Date.parse
e substituir o-
com/
2015-12-03
que funcione, mas2015-12-3
não (exceto no Chrome). A pergunta diz que a data estará no formato;YYYY-MM-DD
portanto, se a entrada realmente seguiu, seria compatível com vários navegadores; no entanto, os exemplos parecem dizer o contrário. De qualquer forma, você poderia usar emDate.parse
vez denew Date
salvar 2 bytes:alert((p((a=prompt(p=Date.parse).split`,`)[0])-p(a[1]))/864e5)
PHP, 63
6477bytesConstatou que a abordagem clássica é mais curta que a OOP:
Lê a sequência separada por vírgula
STDIN
.A maneira OOP direta ( 77 bytes ):
Editar% s
strtotime
vez deDateTime
.strtotime
em uma variável. Graças ao Blackhole .fonte
<?=
vez deecho
.VBA, 69 bytes
fonte
psql, 75 bytes
(Código de 74 caracteres + opção de linha de comando de 1 caractere)
psql
é o terminal interativo do PostgreSQL. Para respeitar o "Cada envio deve ser um programa completo". regra, o código lê a entrada em si.Exemplo de execução:
fonte
MATL, 5 bytes
É o mesmo que a resposta de StewieGriffin, exceto que eu o usei
flip
emdiff
vez dediff
negar o resultado.Explicação completa, com as funções correspondentes do Matlab:
fonte
o
para adatenum
função :-DPowerShell v2 +,
5044 bytesPega o argumento de entrada como uma sequência, divide-o na vírgula e canaliza a matriz por meio de um alias interno,
date
abreviado paraGet-Date
converter nossas sequências no formato de data e hora do .NET. Essas duas datas são armazenadas simultaneamente em$a
e$b
. Em seguida, usamos um operador de subtração sobrecarregado para subtrair o segundo do primeiro e produzir o.Days
mesmo.Golfed 6 bytes graças a TessellatingHeckler .
Tecnicamente não concorrente, pois não possui um intérprete on-line disponível, pois a implementação do FOSS do PowerShell, Pash , gira em torno do PowerShell v0.5. Ainda não suporta
-split
, muito menos a complexa funcionalidade de datas do .NET.fonte
Excel, 25 bytes
O Excel manipula automaticamente as seqüências de caracteres como datas.
fonte
Jolf , 33 bytes
Funciona apenas no Chrome. Não-competitivo, pois o idioma atualiza a pergunta pós-data. Vou adicionar uma explicação mais completa mais tarde.
"Explicação"
fonte
MATLAB, 59 bytes
Abordagem muito direta: a entrada deve ser fornecida como uma string na janela de comando. A sequência de entrada é então dividida e o número de dias entre as datas (e nada mais) é calculado a partir dos números de data de série. Tenho certeza de que existe uma maneira de evitar a necessidade de chamar o datenum duas vezes ...
fonte
Python 2,
109113 bytesfonte
T-SQL + SQLCMD, 51 bytes
Testado com o SQL Server 2008R2. O $ (i) é substituído pela entrada fornecida como argumento da linha de comandos.
Exemplo de execução:
fonte
Mathematica, 61 bytes
Subtração de data básica.
fonte
Perl,
9186 + 2 para sinalizadores np, 88 bytesuse Date :: Calc qw (Delta_Days); ($ a, $ b) = divisão (/, /); $ _ = Delta_Days (divisão (/ - /, $ b), divisão (/ - /, $ a))Exemplo
fonte
jq, 50 bytes
(Código de 49 caracteres + opção de linha de comando de 1 caractere)
Exemplo de execução:
Teste on-line (o
-R
URL de passagem não é suportado - a entrada passou como string "2015-12-3,2013-12-3".)fonte
Mathematica, 56 bytes
A maioria das funções de data (todas?) Tentará analisar as entradas de seqüência de caracteres em datas automaticamente.
fonte
Japonês , 13 bytes
Tente
fonte
C # .NET , 148 bytes
Experimente on-line
fonte