Imprimir las fechas de todos los domingos en el año 2017 con el siguiente formato: dd.mm.yyyy
.
Rendimiento esperado:
01.01.2017
08.01.2017
15.01.2017
22.01.2017
29.01.2017
05.02.2017
12.02.2017
19.02.2017
26.02.2017
05.03.2017
12.03.2017
19.03.2017
26.03.2017
02.04.2017
09.04.2017
16.04.2017
23.04.2017
30.04.2017
07.05.2017
14.05.2017
21.05.2017
28.05.2017
04.06.2017
11.06.2017
18.06.2017
25.06.2017
02.07.2017
09.07.2017
16.07.2017
23.07.2017
30.07.2017
06.08.2017
13.08.2017
20.08.2017
27.08.2017
03.09.2017
10.09.2017
17.09.2017
24.09.2017
01.10.2017
08.10.2017
15.10.2017
22.10.2017
29.10.2017
05.11.2017
12.11.2017
19.11.2017
26.11.2017
03.12.2017
10.12.2017
17.12.2017
24.12.2017
31.12.2017
code-golf
kolmogorov-complexity
date
ShinMigami13
fuente
fuente
Respuestas:
Python 2 , 81 bytes
Pruébalo en línea!
Sin bibliotecas de fechas, calcula las fechas directamente. El truco principal es tratar el
dd.mm
como un valor decimal. Por ejemplo,16.04.2017
(16 de abril) corresponde al número16.04
. El número se imprime formateado comoxx.xx
con el.2017
anexo.El día y el mes se calculan aritméticamente. Cada semana agrega 7 días hechos como
x+=7
. Tomar elx
módulo30.99
maneja el rollover restando30.99
cada vez que el número de día es demasiado grande. Esto se combina-31
para restablecer los días e+0.01
incrementar el mes.El rollover supone que cada mes tiene 31 días. Los meses con menos días se ajustan empujando
x
hacia arriba en ciertos números de semana con+[8,8,8,17,25,38,47].count(x/7)
. Esta lista es de los números de la semana que terminan estos meses cortos, con8
triplicado porque febrero es 3 días menos que 31Esta lista podría comprimirse en una cadena tomando valores ASCII más 40. El cambio de
+40
podría evitarse mediante el uso de caracteres no imprimibles, y podría accederse más brevemente como un objeto de bytes en Python 3.fuente
'888z!}+'.count(chr(x%146))
ahorra un byte.PHP, 48 bytes
PHP, 46 bytes (para compensaciones UTC no negativas)
fuente
gmdate
por la seguridad de la zona horaria? Falla en onlinephpfunctions.com. ¡Gran trabajo en todos los demás aspectos!Python 2 ,
9079 bytes-5 bytes con la ayuda de xnor (evite contar las semanas ellos mismos)
-1 byte gracias a xnor (agregue de nuevo en e para 605000 como 605e3)
Pruébalo en línea!
0
segundos desde la época son las 00:00:00 del 1 de enero de 1970, que, como 2017, no fue un año bisiesto.605000
segundos es 1 semana, 3 minutos, 20 segundos. Agregar 52 de estas "semanas" no nos lleva más allá de la medianoche.fuente
605e3
. Aunque tengo algunas ideas :)Bash + coreutils, 44 bytes
puede ahorrar 2 bytes
-u
si se supone GMT-f
parámetro para eldate
cual ahorra 10 bytes;@0
es 1970-1-1605000
es una semana (604800
) más 200 segundos@32000000
es solo un poco más de un añofuente
seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Y
te ahorra 10 bytes. Sin embargo, probablemente debería reclamar esto como Bash + coreutils .PowerShell,
5147Bastante sencillo. 2017-01-01 es un domingo, así es cada siete días siguientes. Podemos guardar dos bytes si solo necesitamos que el script funcione en mi vida:
fuente
(date 2017-1-1)+7.*$_
. Ver esta respuestaint
garrapatas y cuerdas durante días hasta ahora. Bueno saber.Excel VBA
1069179 bytesahorró 15 bytes gracias a @Radhato
Asumiendo que 1/1/2017 es domingo, ahorrará 12 bytes más.
Gracias @Toothbrush 66 bytes
Editar: (Sub y End Sub no son necesarios) 52 bytes
fuente
Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub
es un código VBA perfectamente válido y tiene solo 66 bytes. El hecho de que el Editor de VBA agregue espacios adicionales es irrelevante.PHP, 67 bytes
Utilizando el hecho de que PHP asigna automáticamente el valor 1 a las variables de bucle no declaradas, y utilizando los tiempos de época de Linux,
fuente
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);
debería estar bienphp -r
de modo que no es necesario<?php
y?>
por lo que puede contar esto como59 bytes
como @JonathanAllan dijo correctamente. No necesitas los soportes alrededor$t
. Algunos otros campos de golf y que terminan confor(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);
a51 bytes
(en mi zona horaria). Puede reemplazar "\ n" con un salto de línea real que es solo 1 byte, por lo tanto, es 51 byte.gmdate
lugar dedate
para la seguridad de la zona horaria.k6, 32 bytes
Breve explicacion:
Desgraciadamente, esto parece funcionar solo en el intérprete de código cerrado y solo a pedido.
fuente
Pyke ,
2624 bytesPruébalo en línea!
O 11 bytes
Si se le permite ignorar el formato de salida
Pruébalo en línea!
fuente
R,
796758 bytesPrimero que enero es un domingo, este fragmento crea una secuencia de días, cada 7 días a partir del 01-01-2017 hasta el 31-12-2017, formateelos al formato deseado e imprímalos.
fuente
print(as.Date("2017-01-01")+seq(7,365,7))
Befunge-98 (PyFunge) ,
99959385 bytes, deja la nueva línea al finalTodas las optimizaciones fueron hechas por @JoKing muchas gracias a ellos
Pruébalo en línea!
Sentí que nos estábamos perdiendo algo de esa esterilidad aquí, así que hice una solución en mi idioma esostérico favorito.
Explicación :
>8><><>><><>
Codifica la duración de los 12 mesess
Almacene el día anterior en el espacio en blanco:1g2/
Obtenga un valor ASCII de la fila inferior y divídalo por dos, esto nos da la duración de un mes dado Ej: 8 = 56 en ASCII => 56 / 2 = 28 => El mes (febrero) tiene 28 días10g\%
Obtenga el día guardado previamente y modúlelo por la duración del mes que nos permite pasar la fecha al mes siguiente:d1p
Guardar una copia del nuevo día actualizado10g\`+
Probar si la fecha anterior > nueva fecha => pasamos al siguiente mes => agregue 1 al contador de mes:b`
Pruebe si el contador de mes> 11 significa que llegamos al final del año (usando indexación 0)#@_
Basado en el anterior si termina el programa:1\0d1g
Reordenar la pila así se ve así:Month, 1, Month, 0, Day
#
omita la siguiente instrucción (duh)1+:a/'0+,a%'0+,'.,
Convierta el número a indexación 1, imprima, agregue un.
al finalj;
Use el 0 de la pila para no saltar y use;
para ir al calendario de impresión nuevamente y luego use el 1 para saltar al;
siguiente horaa"7102"4k,
Imprimir2017\n
d1g
Obtener el valor del día nuevamente7+
Agregar una semana antes de repetirfuente
JavaScript,
111106 bytesNota: la consola de Stack Exchange no es lo suficientemente larga como para mostrar la lista completa, así que aquí está la primera mitad como un fragmento separado:
El formato personalizado me cuesta 40 bytes ...
fuente
Perl 5 , 64 bytes
Pruébalo en línea!
La tarea asignada fue 2017, no cualquier año, por lo que codifiqué:
POSIX es un módulo central y siempre se instala con Perl5. Haciendo lo mismo sin usar módulos en 101 bytes, eliminando espacios en blanco:
fuente
Ruby, 75 bytes
Solución sencilla para calcular las fechas con
Time
.fuente
t=Time.new 1
y luego hacert.strftime"%d.%m.2017"
de -1 bytes.SAS,
5250 bytesGuardado 2 bytes gracias a @ user3490.
fuente
data;
lugar dedata c;
y eso ahorra 2 bytes. Creo que sí necesitas un pensamientorun;
.data _null_
? Además, larun
declaración está implícita si falta.datan
convención de nomenclatura.Mathematica
9084 bytesBastante prolijo. numbermaniac y Scott Milner guardaron 5 y 1 bytes, respectivamente.
fuente
Most@
? La salida parece ser idéntica sin ella.Most
estaba allí para evitar el primer domingo de 2018. Originalmente había probado el código, sinMost
, durante años, 2011, 2012, en cuyo caso el primer domingo de 2012 está incluido en la salida. (Es por eso que lo incluí en el código). Curiosamente,Most
no es necesario para 2017-18. TampocoMost
tiene ningún efecto aparente en el resultado. ¡Misterioso!VBA, 81 bytes (quizás 64)
Mi primer post Basándose en la solución de Newguy eliminando el cheque de lunes a viernes y simplemente especificando cada 7mo día. Eliminar las fechas ahorra 12 bytes por pieza. 42736 es 1/1/2017. El formato de fecha de salida depende de la configuración del sistema. eso está permitido? Si es así, son 64 bytes porque no necesita el método de formato .
fuente
For i=0To 52
yFormat(42736+i*7,"dd.mm.yyyy")
. Además, puede usar enNext
lugar deNext i
.AHK , 67 bytes
Nada mágico sucede aquí. Traté de encontrar un medio más corto que
FormatTime
pero fallé.fuente
Java 8+,
10410099 bytesJava 5+,
109105104 bytesUtiliza las capacidades de fecha del
printf
formato.¡Pruébalo tú mismo!
Ahorros
fuente
T-SQL, 94 bytes
si no le gusta SQL GOTO o WHILE, aquí hay una solución CTE de 122 bytes
fuente
08.01.2017
no01.01.2017
Ruby, 60 + 7 = 67 bytes
Usa la
-rdate
bandera.fuente
Groovy,
8177636056 bytesLo anterior se puede ejecutar como script maravilloso.
Mi primer código de entrada de golf. Afortunadamente, el año 1970 no fue bisiesto, por lo tanto, puede usarlo como base.
Gracias a Dennis, aquí hay un: ¡ Pruébelo en línea!
fuente
53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}
, 52 bytes. Defiende el honor de Groovy aquí ...C #,
138111102 bytes¡Ahorré 9 bytes más gracias a Johan du Toit !
¡ Ahorré 27 bytes gracias a las sugerencias de Kevin Cruijssen !
Función anónima que imprime todos los domingos en 2017.
Programa completo con método sin golf:
fuente
.AddDays(7*i++)
? Entonces no hay necesidad del.DayOfWeek<1
cheque. Sabemos que el 01-01-2017 es un domingo, y desde allí podemos seguir agregando 7 días.System
s de allí -System.DateTime
ySystem.Console.Write
?()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
using
declaraciones deben incluirse en el recuento de bytes.using
declaraciones necesarias para ejecutar el código. Vea esta pregunta Meta: ¿Necesito usar importaciones o puedo llamar a una clase explicita?C #,
110109 bytesPuedes disfrutar de este programa en línea aquí
En esta solución nosotros:
Utilice la fecha de automatización OLE (OADate) para evitar "AddDay ()" de datetime.
FromOADate()
parece grande pero es igual anew DateTime(2017,1,1)
Inicie el ciclo el último domingo de 2016. para permitirnos incrementar
+=
solo con el operador . Este operador devuelve el valor después de que se realiza el incremento.Aumente en 7 días para saltar de domingo a domingo antes de imprimir la fecha.
Nos detenemos una vez que el último domingo de 2017 ha sido golpeado.
Use enDebug
lugar deConsole
guardar dos caracteresEvite tener declaración explícita de variables y asignación
fuente
using System;
y cambiar aConsole
fromDebug
(que es un poco dudoso en sí mismo, pero puedo no encuentre ningún comentario sobre meta al respecto).Debug
porConsole
puestoDebug
se requiere una específica incluyen. Sin embargo, no cumplí con el 'sistema de uso' porque mi competidor en este idioma no lo hace. Además, no puede codificar fuera de una clase que en sí misma debe definirse dentro de un espacio de nombres. Estoy bastante seguro de que la mayoría de las respuestas de C # en este sitio no incluyen eso. ¿Y ahora qué, arrojamos todas estas respuestas a la basura? ¿Los rechazamos a todos para obligarlos a cumplir? Si es así, entonces la comunidad podría prohibir a C # de codegolf por completo.using
directiva o calificar completamente los métodos y tipos, por favor no tome nada de esto personalmente. Soy un golfista de C # desde hace mucho tiempo, y aprecio lo arbitrarias que parecen las reglas, así que me gusta empujar a las personas en la dirección correcta cuando puedo. Específicamente 'apunto' a las respuestas de C # porque estoy relativamente bien informado sobre el asunto.using System;
(supongo que no fue intencional), por lo que son 109 bytes.TSQL,
112105 bytesManifestación
Sintaxis de conversión de T-SQL
fuente
DAY
pord
. Hace lo mismo'20170101'
con42734
. Las fechas son número. El tiempo es la parte decimal del número.JavaScript (ES6), 123 bytes
¡Es mi primer post aquí, hola!
Esta solución utiliza datos codificados y está diseñada para funcionar específicamente para el año 2017. No se basa en API de fecha / hora.
En cuanto a los dígitos en la cadena
155274263153
, cada dígito es un número propio y denota el primer domingo de cada mes consecutivo. La producción para todo el año se puede generar agregando sucesivamente 7 a esos.¿Qué pasa con el número mágico
2633
, usado en el bucle?Bueno ...
2633
(decimal) está101001001001
en binario. ¿Y qué podría1
significar eso? Comenzando desde la derecha, se establecen los bits 1º, 4º, 7º, 10º y 12º. Esto corresponde a meses que tienen cinco domingos, a diferencia de los que tienen solo cuatro. Golfed a esta expresión ordenada, en un principio se veía así:for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++)
.Supongo que las partes restantes se explican por sí mismas.
fuente
ECMAScript 2015
aJavascript (ES6)
, pero ... que me rompió el código y tuve que revertirla.a=
código, en realidad está roto .T-SQL,
7977 bytesDespués de ayudar a Salman A a mejorar su respuesta . Decidí escribir el mío usando un bucle y
PRINT
.Terminé con esta solución de 90 bytes.
Luego miré al líder actual en T-SQL que estaba a 94 bytes de WORNG ALL con esta respuesta . Este chico había encontrado muy buenos trucos.
@
GOTO
lugar de bucle realFORMAT
lugar deCONVERT
. (Solo SSMS2012 +)Con estos trucos, esta solución se redujo a la solución a continuación, que tiene 79 bytes.
fuente
Octava , 37 bytes
Mucho más corto que todos los demás idiomas que no son de golf, ¡e incluso está vinculado con Jelly! ¡Así se hace Octave! :)
Pruébalo en línea!
Afortunadamente, el año se
2 AD
ve exactamente igual que el año2017 AD
. Ambos comienzan y terminan en domingo, y ninguno es bisiesto. Esto ahorra muchos bytes, ya que367:7:737
es bastante más corto que736696:7:737060
.Esto convierte el número de días desde
01.01.0001
, a una cadena en el formatoDD.mm
, con un final.2017
.fuente
Haskell ,
133130 bytesPruébalo en línea!
Sin una biblioteca de calendario,
148144140 bytesEsto es divertido, ya que el uso de un operador para la función de relleno ahorra dos bytes, aunque el segundo argumento no se utiliza, porque se necesitan menos paréntesis,
p(last l)
es más largo quelast l!l
. Funciona calculandoday/month
pares restando las fechas acumuladas de inicio del mes del día del año. Las fechas de inicio del mes se comprimen como (scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]
). El número del mes es el número de elementos positivos y el número del día es el último elemento positivo.Pruébalo en línea!
fuente
C #,
116114113 bytesfor(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Se puede ejecutar en las ventanas interactivas de Visual Studio (o cualquier otra C # REPL basada en Roslyn)
Hasta 113 bytes: gracias a Kevin Cruijssen.
fuente
for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
using System;
y usarConsole.WriteLine(string)