¿Hace cuánto tiempo fue esto?
Las normas
- Cada presentación debe ser un programa completo.
- El programa debe tomar la entrada como dos fechas separadas por comas en el formulario
YYYY-MM-DD
e imprimir el número de días que han pasado desde la segunda fecha hasta STDOUT como si hoy fuera la primera fecha (si la segunda fecha sería en el futuro, envíe un número negativo) más una nueva línea final opcional, y nada más. Suponga que ambas fechas están en el calendario gregoriano. El programa no debe escribir nada en STDERR.
Tenga en cuenta que debe haber un intérprete para que se pueda probar el envío.
- Las presentaciones se puntúan en bytes , en una codificación apropiada (preexistente), generalmente (pero no necesariamente) UTF-8. Algunos idiomas, como las carpetas , son un poco difíciles de puntuar; si tiene dudas, pregunte por Meta .
- Este es el código de golf , por lo que gana el código más corto
Ejemplos
Entrada:
2015-12-03,2015-12-01
Salida:
2
Entrada:
2015-12-03,2014-12-01
Salida:
367
Entrada:
2015-12-03,2013-12-03
Salida:
730
El fragmento
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como tabla de clasificación yb) como una lista de ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](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>
Respuestas:
TeaScript , 24 bytes
Utiliza
Date.parse
para analizar la fecha, luego obtiene la diferencia y divide.Pruébalo en línea
Explicación && Ungolfed
fuente
Bash + GNU utilidades, 37
tr
reemplaza la coma con una nueva línea.date
lee las fechas separadas por la nueva línea y genera el número de segundos desde la época de Unix que representa la fecha pasada. Estos números se ponen en ladc
pila. Entonces es una simple cuestión de resta y dividir entre (24 * 60 * 60). En este caso, ladc
evaluación aritmética RPN basada en pila es mejorbc
o bash$( )
, principalmente porque la subracción antes de la división no necesita paréntesis.Entrada a través de STDIN:
fuente
Julia, 67 bytes
Sin golf:
fuente
-diff(d)[1]
usar, puede-(d...)
guardar un par de bytes. ¿Qué versión de Julia estás usando por cierto? En 1.2, tuve que importar explícitamenteDates
y tampoco puedo convertir días a enteros como este.Scala,
16613912011692 bytesUso:
scala [source filename].scala [date1],[date2]
Nota: La tercera versión (120 bytes) y en adelante usa una API en desuso. Todavía se compila y funciona bien. Nota 2: ¡Gracias a los comentaristas a continuación por los excelentes consejos!
fuente
print
lugar deprintln
.Object A extends App{...}
pieza y guardarla comoa.scala
y ejecutarla conscala a.scala 2015-12-3,2015-12-1
;)Ruby,
6966655755 bytes47 bytes + 8 bytes para la opción de línea de comando. Gracias a Dane Anderson, ahorró 2 bytes.
57 bytes
Código de 49 bytes + 8 bytes para la opción de línea de comando. Guardado 8 bytes con la sugerencia de manatwork.
65 bytes
66 bytes
69 bytes
Pruébelo en línea
Sin golf
Uso:
fuente
','
→?,
,'-'
→?-
,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'
es 59 caracteres como lo cuento.-e
) es gratuita, todo lo demás debe incluirse en el recuento. Hay diferentes opiniones sobre qué es exactamente todo lo demás. Por ejemplo, algunos miembros incluyen el carácter de espacio separador de opciones y comillas alrededor de los valores de los parámetros. En mi opinión, solo se debe contar lo que realmente se pasa al intérprete, no se requieren caracteres adicionales por la sintaxis de shell. Pero no recuerdo ninguna voz levantada para no permitir el uso de opciones.t=->l{Time.gm(*$F[l,3])};p (t[0]-t[3]).div 86400
Japt , 41 bytes
Hasta ahora, esto es lo mejor que puedo obtener, ya que todas las variables
$
y paréntesis realmente eliminan el recuento de bytes.Pruébalo en línea
Explicación
fuente
MATLAB,
4131 bytesLa entrada debe ser una matriz de celdas separadas por comas.
datenum
convierte la celda de entrada en una matriz numérica de 2x1 con la marca de tiempo.diff
toma la diferencia entre los dos.Solución anterior, 41 bytes :
La entrada debe ser una cadena separada por comas:
Las curiosas formas de programación. Esto funciona debido a la conversión implícita de MATLAB entre tipos de datos.
La salida de
strsplit(input(''))
es una celda de cadenas. No se puede usardiff
en una celda, pero afortunadamentedatenum
funciona, y en realidad convierte la entrada de la celda en una matriz numérica de 2x1, lo que hacediff
posible su uso.Puede especificar una gran cantidad de delimitadores
strsplit
, pero la coma es la predeterminada. Además, la entrada predeterminada adatenum
está en el formatoyyyy-mm-dd
. Por esas razones, se evitan muchas especificaciones como: datenum (s, 'aaaa-mm-dd'), lo que ahorra una gran cantidad de bytes.Para el registro, esto sería 21 bytes si pudiera usar una función:
fuente
Javascript ES6, 63 bytes
Probado en cromo.
fuente
Date.parse
y reemplazar el-
con/
2015-12-03
que funcionará, pero2015-12-3
no lo hará (excepto en Chrome). La pregunta dice que la fecha estará en el formato,YYYY-MM-DD
por lo que si la entrada realmente sigue que sería compatible con todos los navegadores, sin embargo, los ejemplos parecen decir lo contrario. De todos modos, podría usar enDate.parse
lugar denew Date
guardar 2 bytes:alert((p((a=prompt(p=Date.parse).split`,`)[0])-p(a[1]))/864e5)
PHP, 63
6477bytesDescubrí que el enfoque clásico es más corto que el de OOP:
Lee la cadena separada por comas de
STDIN
.La forma directa de OOP ( 77 bytes ):
Ediciones
strtotime
lugar deDateTime
.strtotime
en una variable. Gracias a Blackhole .fuente
<?=
lugar deecho
.VBA, 69 bytes
fuente
psql, 75 bytes
(Código de 74 caracteres + opción de línea de comando de 1 carácter)
psql
es el terminal interactivo de PostgreSQL. Para respetar el "Cada presentación debe ser un programa completo". regla, el código lee la entrada en sí.Ejecución de muestra:
fuente
MATL, 5 bytes
Esto es lo mismo que la respuesta de StewieGriffin, excepto que usé
flip
entonces endiff
lugar dediff
negar el resultado.Explicación completa, con las funciones correspondientes de Matlab:
fuente
o
para ladatenum
función :-DPowerShell v2 +,
5044 bytesToma el argumento de entrada como una cadena, lo divide en la coma, luego canaliza la matriz a través de un alias incorporado
date
corto paraGet-Date
convertir nuestras cadenas en formato de fecha y hora .NET. Esas dos fechas se almacenan simultáneamente en$a
y$b
. Luego usamos un operador de sustracción sobrecargada para restar el segundo del primero y generar el.Days
mismo.Golfó 6 bytes gracias a TessellatingHeckler .
Técnicamente no compite, ya que no tiene un intérprete en línea disponible, ya que la implementación de FOSS de PowerShell, Pash , se basa en PowerShell v0.5. Todavía no es compatible
-split
, y mucho menos la compleja funcionalidad de fecha .NET.fuente
Excel, 25 bytes
Excel maneja automáticamente las cadenas como fechas.
fuente
Jolf , 33 bytes
Solo funciona en Chrome. Sin competencia, ya que el idioma actualiza la pregunta posterior a la fecha. Agregaré una explicación más detallada más adelante.
"Explicación"
fuente
MATLAB, 59 bytes
Enfoque muy sencillo: la entrada debe darse como una cadena desde la ventana de comandos. La cadena de entrada se divide y el número de días entre las fechas (y nada más) se calcula a partir de los números de fecha de serie. Sin embargo, estoy bastante seguro de que hay una manera de evitar la necesidad de llamar a datenum dos veces ...
fuente
Python 2,
109113 bytesfuente
T-SQL + SQLCMD, 51 bytes
Probado con SQL Server 2008R2. El $ (i) se reemplaza con la entrada proporcionada como argumento de línea de comando.
Ejecución de muestra:
fuente
Mathematica, 61 bytes
Resta de fecha básica.
fuente
Perl,
9186 + 2 para banderas np, 88 bytesuse Date :: Calc qw (Delta_Days); ($ a, $ b) = split (/, /); $ _ = Delta_Days (split (/ - /, $ b), split (/ - /, $ a))Ejemplo
fuente
jq, 50 bytes
(Código de 49 caracteres + opción de línea de comando de 1 carácter)
Ejecución de muestra:
Prueba en línea (
-R
no se admite el paso a través de URL; por lo tanto, la entrada se pasa como cadena "2015-12-3,2013-12-3").fuente
Mathematica, 56 bytes
La mayoría de las funciones de fecha (¿todas?) Intentarán analizar las entradas de cadena en fechas automáticamente.
fuente
Japt , 13 bytes
Intentalo
fuente
C # .NET , 148 bytes
Probar en línea
fuente