Imprima todos los domingos en 2017


27

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

1
¿Posible engaño de Plan tus domingos ? Sin embargo, este es un año específico.
xnor

1
Verifiqué Planificar sus domingos antes de publicar, pero me pide imprimir los domingos en un mes determinado. @xnor
ShinMigami13

1
¿Alguna razón particular para ese formato de salida específico? Podrías abrir un poco.
Rɪᴋᴇʀ

44
De hecho, me gusta esto como un desafío kolmogorov de texto exacto. Obtener el formato de fecha correcto tiene algunas optimizaciones interesantes.
xnor

55
De todos modos, creo que los votos cerrados deberían retirarse.
Erik the Outgolfer

Respuestas:


16

Python 2 , 81 bytes

x=0
exec"print'%05.2f.2017'%(x%30.99+1.01);x+=7+'0009ANW'.count(chr(x/7+40));"*53

Pruébalo en línea!

Sin bibliotecas de fechas, calcula las fechas directamente. El truco principal es tratar el dd.mmcomo un valor decimal. Por ejemplo, 16.04.2017(16 de abril) corresponde al número 16.04. El número se imprime formateado como xx.xxcon el .2017anexo.

El día y el mes se calculan aritméticamente. Cada semana agrega 7 días hechos como x+=7. Tomar el xmódulo 30.99maneja el rollover restando 30.99cada vez que el número de día es demasiado grande. Esto se combina -31para restablecer los días e +0.01incrementar el mes.

El rollover supone que cada mes tiene 31 días. Los meses con menos días se ajustan empujando xhacia 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, con 8triplicado porque febrero es 3 días menos que 31

Esta lista podría comprimirse en una cadena tomando valores ASCII más 40. El cambio de +40podría evitarse mediante el uso de caracteres no imprimibles, y podría accederse más brevemente como un objeto de bytes en Python 3.


¡Qué buena respuesta! '888z!}+'.count(chr(x%146))ahorra un byte.
Lynn

10

PHP, 48 bytes

while($t<53)echo gmdate("d.m.2017
",605e3*$t++);

PHP, 46 bytes (para compensaciones UTC no negativas)

while($t<53)echo date("d.m.2017
",605e3*$t++);

1
¿No debería ser eso gmdatepor la seguridad de la zona horaria? Falla en onlinephpfunctions.com. ¡Gran trabajo en todos los demás aspectos!
Titus

9

Python 2 , 90 79 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)

from time import*
i=0
exec"print strftime('%d.%m.2017',gmtime(i));i+=605e3;"*53

Pruébalo en línea!

0segundos desde la época son las 00:00:00 del 1 de enero de 1970, que, como 2017, no fue un año bisiesto. 605000segundos es 1 semana, 3 minutos, 20 segundos. Agregar 52 de estas "semanas" no nos lleva más allá de la medianoche.


Aquí hay una forma más corta de generar la progresión aritmética.
xnor

@xnor Gracias, estaba trabajando en el mismo tipo de cosas y estaba tratando de bajar, pero 81 parece mucho con el enfoque de la biblioteca.
Jonathan Allan

@xnor ... o no.
Jonathan Allan

1
¡Agradable! El número puede ser 605e3. Aunque tengo algunas ideas :)
xnor

7

Bash + coreutils, 44 bytes

seq -f@%f 0 605e3 32e6|date -uf- +%d.%m.2017

puede ahorrar 2 bytes -usi se supone GMT

  • Gracias Digital Trauma señala el -fparámetro para el datecual ahorra 10 bytes;
  • Y usar 2017 en formato de cadena ahorra más bytes, idea que proviene de la respuesta dada por el usuario

  • @0 es 1970-1-1
  • 605000es una semana ( 604800) más 200 segundos
    • 200 seg. debería funcionar ya que solo hay 52 semanas en un año
  • @32000000 es solo un poco más de un año

seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Yte ahorra 10 bytes. Sin embargo, probablemente debería reclamar esto como Bash + coreutils .
Trauma digital

7

PowerShell, 51 47

0..52|%{date((date 2017-1-1)+7.*$_)-u %d.%m.%Y}

Bastante 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:

0..52|%{date((date 17-1-1)+7.*$_)-u %d.%m.%Y}

1
Puede guardar algunos bytes si, en lugar de una cadena, agrega un número doble de días, es decir (date 2017-1-1)+7.*$_. Ver esta respuesta
Danko Durbić

@ DankoDurbić: Oh, wow. Solo supe de agregar intgarrapatas y cuerdas durante días hasta ahora. Bueno saber.
Joey el

5

Excel VBA 106 91 79 bytes

Sub p()
For i = #1/1/2017# To #12/31/2017#
If Weekday(i) = 1 Then MsgBox i
Next
End Sub

ahorró 15 bytes gracias a @Radhato

Asumiendo que 1/1/2017 es domingo, ahorrará 12 bytes más.

Sub p()
For i = #1/1/2017# To #12/31/2017#
MsgBox i
i = i + 6
Next
End Sub

Gracias @Toothbrush 66 bytes

Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub

Editar: (Sub y End Sub no son necesarios) 52 bytes

For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next

Se puede mejorar cambiando For i = 42736 To 43100 a For i = # 1/1/2017 # To #
12/31/2017

@Radhato, pero ¿no aumentaría eso el tamaño del byte?
Rohan

Creo que lo reduce a 96 ... al menos eso es lo que conté jajaja
Radhato

Sí lo hizo. Gracias
Rohan

1
@newguy Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Subes 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.
Cepillo de dientes

4

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,

<?php for(;54>$t+=1;)echo date("d.m.Y\n",604800*($t)+1482624000);?>

Bienvenido a PPCG! Creo que esto se puede contar como 59 bytes (aunque yo mismo no juego golf en PHP).
Jonathan Allan

44
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);debería estar bien
tsh

2
¡Siempre es bueno ver nuevos golfistas PHP! Se le permite utilizar php -rde modo que no es necesario <?phpy ?>por lo que puede contar esto como 59 bytescomo @JonathanAllan dijo correctamente. No necesitas los soportes alrededor $t. Algunos otros campos de golf y que terminan con for(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);a 51 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.
Christoph

1
Gracias @Christoph Estoy probando otro enfoque, lo actualizaré pronto
ShinMigami13

Además de todas las otras sugerencias, es posible que desee usar en gmdatelugar de datepara la seguridad de la zona horaria.
Titus

4

k6, 32 bytes

`0:("."/|"."\)'$2017.01.01+7*!53

Breve explicacion:

                2017.01.01+7*!53 /add 0, 7, 14, ..., 364 to January 1st
   ("."/|"."\)'$                 /convert to string, turn Y.m.d into d.m.Y
                                 /   split by ".", reverse, join by "."
`0:                              /output to stdout (or stderr), line by line

Desgraciadamente, esto parece funcionar solo en el intérprete de código cerrado y solo a pedido.

Ejecutando el comando en el intérprete de código cerrado.


4

Pyke , 26 24 bytes

53 Fy17y"RVs6)c"%d.%m.%Y

Pruébalo en línea!

53 F                     - for i in range(53):, printing a newline between each
    y17y"                -  Create a time object with the year 2017. (Month and days are initialised to 1.)
         RV  )           -  Repeat i times:
           s6            -   Add 1 week
              c"%d.%m.%Y -  Format in "dd.mm.yyyy" time

O 11 bytes

Si se le permite ignorar el formato de salida

y17y"52VDs6

Pruébalo en línea!

y17y"       - Create a time object with the year 2017. (Month and days are initialised to 1.)
     52V    - Repeat 52 times:
        D   -  Duplicate the old time
         s6 -  Add 1 week

3

R, 79 67 58 bytes

cat(format(seq(as.Date("2017/01/01"),,7,53),"\n%d.%m.%Y"))

Primero 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.


Esto debería reducirlo a 41 bytesprint(as.Date("2017-01-01")+seq(7,365,7))
contar el

@count Gracias pero no imprimió la salida requerida (es decir, "2017.01.01" en lugar de "2017/01/01")
plannapus

3

Befunge-98 (PyFunge) , 99 95 93 85 bytes, deja la nueva línea al final

Todas las optimizaciones fueron hechas por @JoKing muchas gracias a ellos

s :1g2/10g\%:d1p10g\`+:b`#@_:1\0d1g#;1+:a/'0+,a%'0+,'.,j;a"7102"4k,d1g7+
>8><><>><><>

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 meses
sAlmacene 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ías
10g\%Obtenga el día guardado previamente y modúlelo por la duración del mes que nos permite pasar la fecha al mes siguiente
:d1pGuardar una copia del nuevo día actualizado
10g\`+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\0d1gReordenar 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 final
j;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 hora
a"7102"4k,Imprimir 2017\n
d1gObtener el valor del día nuevamente 7+Agregar una semana antes de repetir


@JoKing Omc una optimización tan obvia! ¿Cómo podría haberme perdido ese? Gracias.
IQuick 143

1
Unos pocos bytes más de descuento. Pruébalo en línea! Uno por cambiar el salto de -17 a un comentario, uno por usar la indexación basada en 0 para el contador de mes y otro por cambiarlo a una línea
Jo King

@JoKing Wow, eso es mucho golf que hiciste allí. Déjame agregarlo a la respuesta.
IQuick 143

1
Demonios, ¿por qué no hacer que los días 0 también estén indexados, y ahorre tener que hacer nada de la inicialización? 85 bytes
Jo King

3

JavaScript, 111 106 bytes

for(i=14833e8;i<1515e9;i+=605e6)console.log(new Date(i).toJSON().replace(/(....).(..).(..).*/,'$3.$2.$1'))

Nota: 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:

for(i=14833e8;i<15e11;i+=605e6)console.log(new Date(i).toJSON().replace(/(....).(..).(..).*/,'$3.$2.$1'))

El formato personalizado me cuesta 40 bytes ...


2

Perl 5 , 64 bytes

use POSIX;print strftime"%d.%m.%Y\n",0,0,0,7*$_+1,0,117for 0..52

Pruébalo en línea!

La tarea asignada fue 2017, no cualquier año, por lo que codifiqué:

  • 117 (que está vigente para el año 2017, 1900 + 117)
  • +1 porque el 1 de enero es un domingo de 2017
  • 0..52 porque 2017 tiene 53 domingos

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:

$$_[5]==117&&printf"%02d.%02d.%d\n",$$_[3],$$_[4]+1,$$_[5]+1900
  for map[gmtime(($_*7+3)*86400)],0..1e4

2

Ruby, 75 bytes

Solución sencilla para calcular las fechas con Time.

t=Time.new 2017
365.times{puts t.strftime("%d.%m.%Y")if t.sunday?
t+=86400}

1
Si agrega una semana completa (604800 segundos), entonces no necesita verificar un domingo, solo repita 53 veces.
GB

1
Si lo hace el truco sugerido por @GB y ya no cheque para el domingo, también se puede inicializar con t=Time.new 1y luego hacer t.strftime"%d.%m.2017"de -1 bytes.
Value Ink el

2

SAS, 52 50 bytes

Guardado 2 bytes gracias a @ user3490.

data;do i=20820to 21184 by 7;put i ddmmyyp10.;end;

No necesita especificar un conjunto de datos, solo use en data;lugar de data c;y eso ahorra 2 bytes. Creo que sí necesitas un pensamiento run;.
user3490

@ user3490 Gracias, no estaba al tanto de eso. Supongo que es el equivalente de data _null_? Además, la rundeclaración está implícita si falta.
J_Lard

No es equivalente: termina con un conjunto de datos de salida siguiendo la datanconvención de nomenclatura.
user3490

2

Mathematica 90 84 bytes

Bastante prolijo. numbermaniac y Scott Milner guardaron 5 y 1 bytes, respectivamente.

Column[#~DateString~{"Day",".","Month",".","Year"}&/@DayRange["2017","2018",Sunday]]

¿Necesitas el Most@? La salida parece ser idéntica sin ella.
numbermaniac

1
@numbermaniac, gracias. Mostestaba allí para evitar el primer domingo de 2018. Originalmente había probado el código, sin Most, 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, Mostno es necesario para 2017-18. Tampoco Mosttiene ningún efecto aparente en el resultado. ¡Misterioso!
DavidC

1

VBA, 81 bytes (quizás 64)

Sub p()
For i = 0 To 52
MsgBox format(42736 + i * 7, "dd.mm.yyyy")
Next i
End Sub

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 .

MsgBox #1/1/2017# + i * 7

También puede eliminar una gran parte del espacio en blanco que se autoformata. Por ejemplo, y For i=0To 52y Format(42736+i*7,"dd.mm.yyyy"). Además, puede usar en Nextlugar de Next i.
Engineer Toast el

1

AHK , 67 bytes

d=20170101
Loop,52{
FormatTime,p,%d%,dd.MM.yyyy
Send,%p%`n
d+=7,d
}

Nada mágico sucede aquí. Traté de encontrar un medio más corto que FormatTime pero fallé.


1

Java 8+, 104 100 99 bytes

()->{for(int t=0;t<53;)System.out.printf("%1$td.%1$tm.2017%n",new java.util.Date(t++*604800000L));}

Java 5+, 109 105 104 bytes

void f(){for(int t=0;t<53;)System.out.printf("%1$td.%1$tm.2017%n",new java.util.Date(t++*604800000L));}

Utiliza las capacidades de fecha del printfformato.

¡Pruébalo tú mismo!

Ahorros

  1. 104 -> 100: cambió los valores del bucle y el multiplicando.
  2. 100 -> 99: jugó al golf

1

T-SQL, 94 bytes

DECLARE @ INT=0,@_ DATETIME='2017'W:SET @+=1SET @_+=7PRINT FORMAT(@_,'dd.MM.yyy')IF @<52GOTO W

si no le gusta SQL GOTO o WHILE, aquí hay una solución CTE de 122 bytes

WITH C AS(SELECT CAST('2017'AS DATETIME)x UNION ALL SELECT x+7FROM C WHERE X<'12-31-17')SELECT FORMAT(x,'dd.MM.yyy')FROM C

su primera solución comienza en 08.01.2017no01.01.2017
grabthefish

1
Muy buenos trucos en tu solución. Buen trabajo. No pude resistirme a pedirlos prestados. ;)
AXMIM

1

Ruby, 60 + 7 = 67 bytes

Usa la -rdatebandera.

(d=Date.new 1).step(d+365,7){|d|puts d.strftime"%d.%m.2017"}

1

Groovy, 81 77 63 60 56 bytes

d=new Date(0);53.times{printf('%td.%<tm.2017%n',d);d+=7}

Lo 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!


¡Bienvenido a Programming Puzzles & Code Golf! En caso de que esté interesado, aquí hay un enlace permanente: ¡ Pruébelo en línea!
Dennis

Gracias @ Dennis No sabía que esto existía :)
Krystian

Puede guardar cuatro bytes moviendo la fecha dentro del bloque de tiempos 53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}, 52 bytes. Defiende el honor de Groovy aquí ...
Matias Bjarland

1

C #, 138 111 102 bytes

¡Ahorré 9 bytes más gracias a Johan du Toit !

¡ Ahorré 27 bytes gracias a las sugerencias de Kevin Cruijssen !

()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));}

Función anónima que imprime todos los domingos en 2017.

Programa completo con método sin golf:

using System;

class P
{
    static void Main()
    {
        Action f =
        ()=>
        {
            for (int i = 0; i < 53; )
                Console.Write(new DateTime(2017, 1, 1).AddDays(7 * i++).ToString("dd.MM.yyyy\n"));
        };



        f();
    }
}

1
¿No es más fácil de usar .AddDays(7*i++)? Entonces no hay necesidad del .DayOfWeek<1cheque. Sabemos que el 01-01-2017 es un domingo, y desde allí podemos seguir agregando 7 días.
Kevin Cruijssen

2
No estoy seguro sobre esto - en todos los campos de golf de código participo, siempre he utilizado el espacio de nombres completa - pero no se le faltan algunos Systems de allí - System.DateTimey System.Console.Write?
auhmaan

Genial, pero puedes guardar un par de bytes:()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
Johan du Toit

@auhmaan: Sí, deben usarse espacios de nombres completos o las usingdeclaraciones deben incluirse en el recuento de bytes.
raznagul

3
@adrianmp: Deben contarse las usingdeclaraciones necesarias para ejecutar el código. Vea esta pregunta Meta: ¿Necesito usar importaciones o puedo llamar a una clase explicita?
raznagul

1

C #, 110 109 bytes

using System;()=>{for(int i=42729;i<43100;Console.Write(DateTime.FromOADate(i+=7).ToString("dd.MM.yyy\n")));}

Puedes 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 en Debuglugar de Consoleguardar dos caracteres

  • Evite tener declaración explícita de variables y asignación


A menos que se especifique lo contrario, nuestros valores predeterminados dicen que debe proporcionar una función o programa (es decir, no un fragmento), y debe calificar Debug y DateTime : recomendaría agregar using System;y cambiar a Consolefrom Debug(que es un poco dudoso en sí mismo, pero puedo no encuentre ningún comentario sobre meta al respecto).
VisualMelon

1
@VisualMelon He cumplí "proporcionar una función" y también he sustituir Debugpor Consolepuesto Debugse 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.
AXMIM

Estas 'reglas' son justo lo que la comunidad ha establecido con el tiempo (y documentado en meta). No rechazamos las respuestas, comentamos y tampoco las votamos. Cuando los arreglan, entonces somos libres de votar. Las otras dos respuestas de C # tienen comentarios que sugieren que deberían agregar la usingdirectiva 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.
VisualMelon

1
@VisualMelon Bastante justo, solo soy un transeúnte aquí de todos modos. Así que aceptaré tus reglas mientras esté aquí. Por lo tanto, he intentado que mi respuesta cumpla esta vez.
AXMIM

1
¡Me parece bien! +1 para el enfoque original. Y no necesita el espacio después using System;(supongo que no fue intencional), por lo que son 109 bytes.
VisualMelon

1

TSQL, 112 105 bytes

SELECT CONVERT(VARCHAR,DATEADD(d,number*7,42734),104)FROM master..spt_values WHERE type='p' AND number<53

Manifestación

Sintaxis de conversión de T-SQL


Puede guardar 2 bytes reemplazando DAYpor d. Hace lo mismo
AXMIM

+1 Puede guardar otros 3 bytes reemplazándolos '20170101'con 42734. Las fechas son número. El tiempo es la parte decimal del número.
AXMIM

1

JavaScript (ES6), 123 bytes

¡Es mi primer post aquí, hola!

a=x=>`0${x}.`.slice(-3);[].map.call('155274263153',(x,i)=>{for(j=0;j<4+(2633>>i&1);j++)console.log(a(+x+j*7)+a(i+1)+2017)})

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á 101001001001en binario. ¿Y qué podría 1significar 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.


@SIGSEGV: no me importa cambiar ECMAScript 2015a Javascript (ES6), pero ... que me rompió el código y tuve que revertirla.
rinoceronte

Oh, ese es el consenso de la comunidad, tener solo la parte lambda está permitido.
Matthew Roh el

@SIGSEGV Este no es el caso aquí. Este lambda contiene solo una pequeña porción del código, y necesito ese identificador para poder usarlo en otro lugar. Sin el a=código, en realidad está roto .
rinoceronte

1

T-SQL, 79 77 bytes

Despué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.

DECLARE @d DATETIME=42734 WHILE @d<43100BEGIN PRINT CONVERT(VARCHAR,@d,104)SET @d=@d+7 END

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.

  1. Nombra solo la variable @
  2. Bucle con en GOTOlugar de bucle real
  3. Guardar un personaje usando en FORMATlugar de CONVERT. (Solo SSMS2012 +)

Con estos trucos, esta solución se redujo a la solución a continuación, que tiene 79 bytes.

DECLARE @ DATETIME=42734G:PRINT FORMAT(@,'dd.MM.yyy')SET @+=7IF @<43100GOTO G

Puede guardar 2 bytes cambiando @ = @ + 7 a @ + = 7 y eliminando el espacio entre el 7 y el IF.
TRABAJANDO TODOS

En esta publicación es donde obtuve todos los trucos, puede ayudarte también.
TRABAJANDO TODOS

1
@WORNGALL maravilloso, no sabía que podíamos hacer eso. Muchas gracias.
AXMIM

1

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! :)

disp(datestr(367:7:737,'DD.mm.2017'))

Pruébalo en línea!

Afortunadamente, el año se 2 ADve exactamente igual que el año 2017 AD. Ambos comienzan y terminan en domingo, y ninguno es bisiesto. Esto ahorra muchos bytes, ya que 367:7:737es bastante más corto que 736696:7:737060.

Esto convierte el número de días desde 01.01.0001, a una cadena en el formato DD.mm, con un final .2017.


1

Haskell , 133 130 bytes

import Data.Time.Calendar
((\[f,g,h,i,j]->i:j:'.':f:g:".2017\n").drop 5.show)=<<take 53(iterate(addDays 7)$fromGregorian 2017 1 1)

Pruébalo en línea!

Sin una biblioteca de calendario, 148 144 140 bytes

(\l->last l!l++length l!l++"2017\n").fst.span(>0).(<$>scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]).(-)=<<[1,8..365]
a!_=['0'|a<=9]++show a++"."

Esto 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 que last l!l. Funciona calculando day/monthpares 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!


0

C #, 116 114 113 bytes

for(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.


1
¿Podría agregar un enlace TryItNow ? Además, puede jugar un poco al golf usando un bucle for en lugar de un bucle while:for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Kevin Cruijssen

@KevinCruijssen Desafortunadamente, no puedo encontrar un compilador aplicable en la página indicada. Aquí hay un enlace a la tecnología utilizada si desea ponerse en contacto con ella: enlace . De todos modos, gracias por el nuevo bucle. :)
rmrm

1
A menos que se especifique lo contrario, nuestros valores predeterminados dicen que debe proporcionar una función o programa (es decir, no un fragmento), y debe calificar Debug y DateTime : Recomiendo agregar using System;y usarConsole.WriteLine(string)
VisualMelon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.