Cela s'est passé il y a combien de temps?
Les règles
- Chaque soumission doit être un programme complet.
- Le programme doit prendre la saisie sous la forme de deux dates séparées par des virgules dans le formulaire
YYYY-MM-DD
et imprimer le nombre de jours écoulés depuis la deuxième date dans STDOUT comme si aujourd'hui était la première date (si la deuxième date devait être dans le futur, afficher un nombre négatif) plus un retour à la ligne de fin facultatif, et rien d'autre. Supposons que les deux dates figurent dans le calendrier grégorien. Le programme ne doit rien écrire dans STDERR.
Notez qu'il doit y avoir un interprète pour que la soumission puisse être testée.
- Les soumissions sont notées en octets , dans un codage approprié (préexistant), généralement (mais pas nécessairement) UTF-8. Certaines langues, comme les dossiers , sont un peu délicates à noter - en cas de doute, veuillez demander sur Meta .
- C'est le code-golf , donc le code le plus court gagne
Exemples
Contribution:
2015-12-03,2015-12-01
Production:
2
Contribution:
2015-12-03,2014-12-01
Production:
367
Contribution:
2015-12-03,2013-12-03
Production:
730
L'extrait
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que classement et b) en tant que liste des gagnants par langue.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](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>
Réponses:
TeaScript , 24 octets
Utilise
Date.parse
pour analyser la date, puis obtient la différence et divise.Essayez-le en ligne
Explication && Ungolfed
la source
Utilitaires Bash + GNU, 37
tr
remplace la virgule par une nouvelle ligne.date
lit les dates séparées par la nouvelle ligne et affiche le nombre de secondes écoulées depuis l'époque Unix que représente la date transmise. Ces numéros sont ensuite mis sur ladc
pile. Ensuite, c'est une simple question de soustraction et de division par (24 * 60 * 60). Dans ce cas, l'dc
évaluation arithmétique RPN basée sur la pile est meilleure quebc
ou bash$( )
, principalement parce que la sous-traction avant la division n'a pas besoin de parenthèses.Entrée via STDIN:
la source
Julia, 67 octets
Non golfé:
la source
-diff(d)[1]
vous pouvez utiliser-(d...)
pour enregistrer quelques octets. Quelle version de Julia utilisez-vous au fait? Sur 1.2, j'ai dû importer explicitementDates
et je ne peux pas simplement convertir des jours en entiers comme celui-ci.Scala,
166139120 12011692 octetsUsage:
scala [source filename].scala [date1],[date2]
Remarque: La troisième version (120 octets) et plus utilise une API obsolète. Il compile toujours et fonctionne bien. Note2: Merci aux commentateurs ci-dessous pour les bons conseils!
la source
print
place deprintln
.Object A extends App{...}
pièce et l'enregistrer sousa.scala
et l'exécuter avecscala a.scala 2015-12-3,2015-12-1
;)Rubis,
6966655755 octets47 octets + 8 octets pour l'option de ligne de commande. Merci à Dane Anderson, enregistré 2 octets.
57 octets
Code de 49 octets + 8 octets pour l'option de ligne de commande. 8 octets enregistrés avec la suggestion de manatwork.
65 octets
66 octets
69 octets
Testez-le en ligne
Non golfé
Usage:
la source
','
→?,
,'-'
→?-
,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 caractères comme je le compte.-e
) est gratuite, tout le reste doit être inclus dans le décompte. Il existe différentes opinions sur ce qu'est exactement tout le reste. Par exemple, certains membres incluent le caractère d'espace séparateur d'options et des guillemets autour des valeurs des paramètres. À mon avis, il ne faut compter que ce qui est réellement passé à l'interpréteur, pas les caractères supplémentaires requis par la syntaxe du shell. Mais je ne me souviens d'aucune voix élevée pour interdire l'utilisation d'options.t=->l{Time.gm(*$F[l,3])};p (t[0]-t[3]).div 86400
Japt , 41 octets
Jusqu'à présent, c'est le mieux que je puisse obtenir car toutes les variables
$
et les parenthèses tuent vraiment le nombre d'octets.Essayez-le en ligne
Explication
la source
MATLAB,
4131 octetsL'entrée doit être un tableau de cellules séparé par des virgules.
datenum
convertit la cellule d'entrée en un tableau numérique 2x1 avec l'horodatage.diff
prend la différence entre les deux.Ancienne solution, 41 octets :
L'entrée doit être une chaîne séparée par des virgules:
Les curieuses façons de programmer. Cela fonctionne en raison de la conversion implicite de MATLAB entre les types de données.
La sortie de
strsplit(input(''))
est une cellule de chaînes. Vous ne pouvez pas l'utiliserdiff
sur une cellule, mais heureusement, celadatenum
fonctionne, et cela remet en fait l'entrée de la cellule dans un tableau numérique 2x1, ce quidiff
permet de l'utiliser.Vous pouvez spécifier un grand nombre de délimiteurs dans
strsplit
, mais la virgule est celle par défaut. De plus, l'entrée par défaut dedatenum
est sur le formatyyyy-mm-dd
. Pour ces raisons, de nombreuses spécifications telles que: datenum (s, 'aaaa-mm-jj') sont évitées, ce qui permet d'économiser beaucoup d'octets.Pour mémoire, ce serait 21 octets si je pouvais utiliser une fonction:
la source
Javascript ES6, 63 octets
Testé en chrome.
la source
Date.parse
et de remplacer le-
par/
2015-12-03
cela fonctionnera mais2015-12-3
pas (sauf dans Chrome). La question dit que la date sera au format,YYYY-MM-DD
donc si l'entrée a vraiment suivi, elle serait compatible avec tous les navigateurs, mais les exemples semblent dire le contraire. Quoi qu'il en soit, vous pouvez utiliserDate.parse
au lieu denew Date
pour enregistrer 2 octets:alert((p((a=prompt(p=Date.parse).split`,`)[0])-p(a[1]))/864e5)
PHP, 63
6477octetsTrouvé que l'approche classique est plus courte que celle de la POO:
Lit la chaîne séparée par des virgules
STDIN
.La méthode OOP simple ( 77 octets ):
Modifications
strtotime
au lieu deDateTime
.strtotime
dans une variable. Merci à Blackhole .la source
<?=
place deecho
.VBA, 69 octets
la source
psql, 75 octets
(Code de 74 caractères + option de ligne de commande de 1 caractère)
psql
est le terminal interactif de PostgreSQL. Pour respecter le "Chaque soumission doit être un programme complet." règle, le code lit l'entrée elle-même.Exemple d'exécution:
la source
MATL, 5 octets
C'est la même chose que la réponse de StewieGriffin, sauf que j'ai utilisé
flip
alorsdiff
plutôt que dediff
nier le résultat.Explication complète, avec les fonctions Matlab correspondantes:
la source
o
pour ladatenum
fonction :-DPowerShell v2 +,
5044 octetsPrend l'argument d'entrée sous forme de chaîne, le divise sur la virgule, puis redirige le tableau via un alias
date
abrégé pourGet-Date
convertir nos chaînes au format .NET datetime. Ces deux dates sont ensuite stockées simultanément dans$a
et$b
. Nous utilisons ensuite un opérateur de soustraction surchargé pour soustraire le second du premier et en sortir.Days
celui - ci.Golfé 6 octets grâce à TessellatingHeckler .
Techniquement non concurrentiel, car il n'a pas d'interprète en ligne disponible, car l'implémentation FOSS de PowerShell, Pash , concerne PowerShell v0.5. Il ne prend pas
-split
encore en charge , sans parler de la fonctionnalité de date .NET complexe.la source
Excel, 25 octets
Excel gère automatiquement les chaînes comme des dates.
la source
Jolf , 33 octets
Fonctionne uniquement dans Chrome. Pas de compétition, car la langue met à jour la question postdate. J'ajouterai une explication plus approfondie plus tard.
"Explication"
la source
MATLAB, 59 octets
Approche très simple: l'entrée doit être donnée sous forme de chaîne à partir de la fenêtre de commande. La chaîne d'entrée est ensuite divisée et le nombre de jours entre les dates (et rien d'autre) est calculé à partir des numéros de date de série. Je suis sûr qu'il existe un moyen d'éviter le besoin d'appeler deux fois le datenum ...
la source
Python 2,
109113 octetsla source
T-SQL + SQLCMD, 51 octets
Testé avec SQL Server 2008R2. $ (I) est remplacé par l'entrée fournie comme argument de ligne de commande.
Exemple d'exécution:
la source
Mathematica, 61 octets
Soustraction de date de base.
la source
Perl,
9186 + 2 pour drapeaux np, 88 octetsutilisez Date :: Calc qw (Delta_Days); ($ a, $ b) = split (/, /); $ _ = Delta_Days (split (/ - /, $ b), split (/ - /, $ a))Exemple
la source
jq, 50 octets
(Code de 49 caractères + option de ligne de commande de 1 caractère)
Exemple d'exécution:
Test en ligne (la
-R
transmission via l'URL n'est pas prise en charge - la saisie a donc été transmise sous la forme "2015-12-3,2013-12-3".)la source
Mathematica, 56 octets
La plupart des fonctions de date (toutes?) Essaieront d'analyser automatiquement les entrées de chaîne dans les dates.
la source
Japt , 13 octets
Essayez-le
la source
C # .NET , 148 octets
Essayez en ligne
la source