Wie lange ist das her?
Die Regeln
- Jede Einreichung muss ein vollständiges Programm sein.
- Das Programm muss die Eingabe als zwei durch Kommas getrennte Daten in das Formular aufnehmen
YYYY-MM-DD
und die Anzahl der Tage, die seit dem zweiten Datum vergangen sind, an STDOUT drucken, als ob heute das erste Datum wäre (wenn das zweite Datum in der Zukunft liegen würde, geben Sie a aus negative Zahl) plus einen optionalen nachgestellten Zeilenumbruch und sonst nichts. Angenommen, beide Daten befinden sich im Gregorianischen Kalender. Das Programm darf nichts in STDERR schreiben.
Beachten Sie, dass ein Dolmetscher vorhanden sein muss, damit die Einreichung getestet werden kann.
- Einsendungen werden in Bytes in einer geeigneten (bereits vorhandenen) Codierung bewertet, normalerweise (aber nicht unbedingt) UTF-8. Einige Sprachen, wie Ordner , sind etwas schwierig zu bewerten - im Zweifelsfall fragen Sie bitte bei Meta .
- Dies ist Code-Golf , also gewinnt der kürzeste Code
Beispiele
Eingang:
2015-12-03,2015-12-01
Ausgabe:
2
Eingang:
2015-12-03,2014-12-01
Ausgabe:
367
Eingang:
2015-12-03,2013-12-03
Ausgabe:
730
Das Snippet
Das Stack-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Rangliste und b) als Liste der Gewinner pro Sprache.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihrer Einreichung? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie dort mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder Sie die Strafen für Dolmetscherflaggen separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Sprachnamen auch zu einem Link machen, der dann im Snippet angezeigt wird:
## [><>](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>
Antworten:
TeaScript , 24 Bytes
Wird verwendet
Date.parse
, um das Datum zu analysieren, dann die Differenz zu ermitteln und zu teilen.Probieren Sie es online aus
Erklärung && Ungolfed
quelle
Bash + GNU-Dienstprogramme, 37
tr
ersetzt das Komma durch eine neue Zeile.date
liest die durch Zeilenumbrüche getrennten Daten und gibt die Anzahl der Sekunden seit der Unix-Epoche aus, die das übergebene Datum darstellt. Diese Zahlen werden dann auf dendc
Stapel gelegt. Dann ist es eine einfache Sache der Subtraktion und Division durch (24 * 60 * 60). In diesem Fall ist diedc
stapelbasierte RPN-Arithmetikauswertung besser alsbc
oder bash$( )
, hauptsächlich weil die Subtraktion vor der Division keine Klammern benötigt.Eingabe über STDIN:
quelle
Julia, 67 Bytes
Ungolfed:
quelle
-diff(d)[1]
können Sie-(d...)
ein paar Bytes speichern. Welche Julia-Version benutzt du übrigens? In 1.2 musste ich explizit importierenDates
und ich kann auch nicht einfach Tage in solche Ganzzahlen konvertieren.Scala,
16613912011692 BytesVerwendungszweck:
scala [source filename].scala [date1],[date2]
Hinweis: Die dritte Version (120 Byte) und höher verwendet eine veraltete API. Es kompiliert immer noch und funktioniert gut. Anmerkung 2: Vielen Dank an die Kommentatoren unten für den tollen Rat!
quelle
print
anstelle von verwendenprintln
.Object A extends App{...}
Teil entfernen und speichern untera.scala
und ausführen mitscala a.scala 2015-12-3,2015-12-1
;)Ruby,
6966655755 Bytes47 Bytes + 8 Bytes für die Befehlszeilenoption. Dank Dane Anderson wurden 2 Bytes gespeichert.
57 Bytes
49 Bytes Code + 8 Bytes für Befehlszeilenoption. 8 Bytes mit dem Vorschlag von manatwork gespeichert.
65 Bytes
66 Bytes
69 Bytes
Testen Sie es online
Ungolfed
Verwendungszweck:
quelle
','
→?,
,'-'
→?-
,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 Zeichen, wenn ich sie zähle.-e
), kostenlos ist, alles andere muss in die Zählung einbezogen werden. Es gibt unterschiedliche Meinungen darüber, was genau das alles ist. Einige Mitglieder enthalten beispielsweise das Optionszeichen für Trennzeichen und Anführungszeichen um Parameterwerte. Meiner Ansicht nach sollte nur gezählt werden, was tatsächlich an den Interpreter übergeben wird, zusätzliche Zeichen, die von der Shell-Syntax benötigt werden, nicht. Ich kann mich aber nicht an eine Stimme erinnern, die die Verwendung von Optionen untersagt.t=->l{Time.gm(*$F[l,3])};p (t[0]-t[3]).div 86400
Japt , 41 Bytes
Bisher ist dies das Beste, was ich bekommen kann, da alle Variablen
$
und Klammern die Anzahl der Bytes wirklich zerstören.Probieren Sie es online aus
Erläuterung
quelle
MATLAB,
4131 BytesDie Eingabe muss ein durch Kommas getrenntes Zellenarray sein.
datenum
konvertiert die Eingabezelle in ein numerisches 2x1-Array mit dem Zeitstempel.diff
nimmt den Unterschied zwischen den beiden.Alte Lösung, 41 Bytes :
Die Eingabe muss eine durch Kommas getrennte Zeichenfolge sein:
Die merkwürdigen Programmierweisen. Dies funktioniert aufgrund des impliziten Castings von MATLAB zwischen Datentypen.
Die Ausgabe von
strsplit(input(''))
ist eine Zelle von Zeichenfolgen. Sie können es nichtdiff
für eine Zelle verwenden, aber esdatenum
funktioniert zum Glück und wandelt die Zelleingabe tatsächlich in ein numerisches 2x1-Array zurück, wodurchdiff
die Verwendung möglich wird.Sie können eine ganze Reihe von Trennzeichen angeben
strsplit
, aber das Komma ist die Standardeinstellung. Die Standardeingabe fürdatenum
ist auch das Formatyyyy-mm-dd
. Aus diesen Gründen werden viele Spezifikationen wie: Datum (s, 'JJJJ-MM-TT') vermieden, wodurch eine ganze Menge Bytes eingespart werden.Für den Datensatz wären dies 21 Bytes, wenn ich eine Funktion verwenden könnte:
quelle
Javascript ES6, 63 Bytes
In Chrom getestet.
quelle
Date.parse
, das-
mit/
2015-12-03
funktioniert, jedoch2015-12-3
nicht (außer in Chrome). Die Frage besagt, dass das Datum im Format vorliegen wird.YYYY-MM-DD
Wenn die Eingabe also wirklich folgen würde, wäre sie browserübergreifend kompatibel. Die Beispiele scheinen jedoch etwas anderes zu sagen. Wie auch immer, Sie könntenDate.parse
stattdessen verwendennew Date
, um 2 Bytes zu speichern:alert((p((a=prompt(p=Date.parse).split`,`)[0])-p(a[1]))/864e5)
PHP, 63
6477BytesGefunden, dass der klassische Ansatz kürzer ist als der OOP:
Liest die durch Kommas getrennte Zeichenfolge von
STDIN
.Der einfache OOP-Weg ( 77 Bytes ):
Bearbeitungen
strtotime
anstelle von gespeichertDateTime
.strtotime
in einer Variablen. Danke an Blackhole .quelle
<?=
stattdessen verwendenecho
.VBA, 69 Bytes
quelle
psql, 75 Bytes
(74 Zeichen Code + 1 Zeichen Befehlszeilenoption)
psql
ist das interaktive Terminal von PostgreSQL. Um die "Jede Einreichung muss ein vollständiges Programm sein." In der Regel liest der Code die Eingabe selbst.Probelauf:
quelle
MATL, 5 Bytes
Dies ist das gleiche wie die Antwort von StewieGriffin, außer dass ich das Ergebnis
flip
danndiff
eher verwendet alsdiff
negiert habe.Vollständige Erklärung mit entsprechenden Matlab-Funktionen:
quelle
o
für diedatenum
Funktion verwenden sollen :-DPowerShell v2 +,
5044 ByteNimmt Eingabeargument als String, spaltet es auf dem Komma, dann Rohre das Array über einen integrierten Alias
date
kurz fürGet-Date
unsere Strings in .NET DATETIME- Format zu konvertieren. Diese beiden Daten werden dann gleichzeitig in$a
und gespeichert$b
. Wir verwenden dann einen überladenen Subtraktionsoperator, um den zweiten vom ersten zu subtrahieren und diesen auszugeben.Days
.Golf 6 Bytes dank TessellatingHeckler .
Technisch nicht konkurrierend, da kein Online-Interpreter verfügbar ist, da die FOSS-Implementierung von PowerShell, Pash , auf PowerShell v0.5 basiert. Es wird noch nicht unterstützt
-split
, geschweige denn die komplexe .NET-Datumsfunktionalität.quelle
Excel, 25 Bytes
Excel behandelt die Zeichenfolgen automatisch als Datumsangaben.
quelle
Jolf , 33 Bytes
Funktioniert nur in Chrome. Nicht konkurrierend, da die Sprache die Frage nach dem Datum aktualisiert. Ich werde später eine ausführlichere Erklärung hinzufügen.
"Erläuterung"
quelle
MATLAB, 59 Bytes
Sehr unkomplizierter Ansatz: Die Eingabe muss als Zeichenfolge aus dem Befehlsfenster erfolgen. Die Eingabezeichenfolge wird dann aufgeteilt und die Anzahl der Tage zwischen den Daten (und nichts anderes) wird aus den Seriendatumnummern berechnet. Ich bin mir ziemlich sicher, dass es eine Möglichkeit gibt, die Notwendigkeit zu vermeiden, datenum zweimal aufzurufen ...
quelle
Python 2,
109113 Bytesquelle
T-SQL + SQLCMD, 51 Bytes
Getestet mit SQL Server 2008R2. Das $ (i) wird durch die Eingabe ersetzt, die als Befehlszeilenargument bereitgestellt wird.
Probelauf:
quelle
Mathematica, 61 Bytes
Grundlegende Datumssubtraktion.
quelle
Perl,
9186 + 2 für np-Flags, 88 Bytesbenutze Date :: Calc qw (Delta_Days); ($ a, $ b) = split (/, /); $ _ = Delta_Days (split (/ - /, $ b), split (/ - /, $ a))Beispiel
quelle
jq, 50 Bytes
(49 Zeichen Code + 1 Zeichen Befehlszeilenoption)
Probelauf:
Online-Test (
-R
URL-Weiterleitung wird nicht unterstützt - Eingabe als Zeichenfolge "2015-12-3,2013-12-3" übergeben.)quelle
Mathematica, 56 Bytes
Die meisten (alle?) Datumsfunktionen versuchen, Zeichenfolgeneingaben automatisch in Datumsangaben zu analysieren.
quelle
Japt , 13 Bytes
Versuch es
quelle
C # .NET , 148 Bytes
Versuchen Sie es online
quelle