2017 년 일요일 모두 인쇄


27

2017 년 모든 일요일의 날짜를 다음 형식으로 인쇄하십시오 dd.mm.yyyy.
예상 출력 :

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
일요일 의 가능한 속임수 ? 그러나 이것은 특정 연도입니다.
xnor

1
게시하기 전에 일요일 계획을 확인 했지만 주어진 달에 일요일을 인쇄하도록 요청합니다. @xnor
ShinMigami13

1
특정 출력 형식에 대한 특별한 이유가 있습니까? 조금만 열 수 있습니다.
Rɪᴋᴇʀ

4
나는 이것을 정확한 텍스트 kolmogorov 도전으로 실제로 좋아한다. 날짜 형식을 올바르게 지정하면 몇 가지 흥미로운 최적화가 있습니다.
xnor

5
어쨌든, 나는 가까운 투표를 철회해야한다고 생각합니다.
아웃 골퍼 Erik 14

답변:


16

파이썬 2 , 81 바이트

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

온라인으로 사용해보십시오!

날짜 라이브러리가 없으며 날짜를 직접 계산합니다. 주요 트릭은 dd.mm10 진수 값으로 처리하는 것입니다. 예를 들어 16.04.2017(4 월 16 일)는 숫자에 해당합니다 16.04. 숫자의 형식은 인쇄 xx.xx.2017첨부.

일과 월은 산술적으로 계산됩니다. 매주 7 일이 추가됩니다 x+=7. 촬영 x모듈 30.99빼서 롤오버 핸들을 30.99하루 수가 너무 커질 때마다. 이 -31날짜를 재설정 +0.01하여 월을 증가시키기 위해 결합 합니다 .

롤오버는 매월 31 일이 있다고 가정합니다. 일수가 적은 월은을 사용 x하여 특정 주 번호에서 위로 좁혀 조정 됩니다 +[8,8,8,17,25,38,47].count(x/7). 이 목록은이 짧은 달로 끝나는 주 번호이며, 82 월은 3 일이 31 일이기 때문에 3 배가되었습니다.

이 목록은 ASCII 값에 40을 더하여 문자열로 압축 +40할 수 있습니다. 인쇄 할 수없는 문자를 사용하여 이동을 피할 수 있으며 Python 3에서 bytes 객체로 더 짧게 액세스 할 수 있습니다.


정말 멋진 답변입니다! '888z!}+'.count(chr(x%146))1 바이트를 저장합니다.
Lynn

10

PHP, 48 바이트

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

PHP, 46 바이트 (음이 아닌 UTC 오프셋의 경우)

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

1
그것이 gmdate시간대 안전을위한 것이 아닙니까? onlinephpfunctions.com에서 실패합니다. 다른 모든 측면에서 훌륭합니다!
Titus

9

파이썬 2 , 90 79 바이트

xnor의 도움으로 -5 바이트 (주 자체를 계산하지 않음)
-xnor로 인해 1 바이트 (605000에 대해 e에서 60605로 다시 추가)

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

온라인으로 사용해보십시오!

0에포크 이후의 초는 1970 년 1 월 1 일 00:00:00이며, 2017 년과 마찬가지로 윤년이 아닙니다. 605000초는 1 주, 3 분, 20 초입니다. 이 "주"중 52 개를 추가한다고해서 자정을 넘어서는 것은 아닙니다.


여기 짧은 방법 산술 진행을 생성합니다.
xnor

@ xnor 고마워, 나는 같은 종류의 일을하고 있었고 더 낮추려고 노력했지만 81은 라이브러리 접근 방식으로 갈 것 같습니다.
Jonathan Allan

@xnor ... 아니요.
Jonathan Allan

1
좋은! 숫자는입니다 605e3. 그래도 몇 가지 아이디어가 있습니다 :)
xnor

7

Bash + coreutils, 44 바이트

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

-uGMT를 가정하면 2 바이트를 절약 할 수 있습니다

  • 감사합니다 Digital Trauma 종료 지점 -f에 있었던 파라미터 date10 바이트를 저장;
  • 그리고 형식 문자열에 사용되는 2017 아이디어에서 더 바이트 저장 대답 에 의해 주어진 user63956을

  • @0 1970-1-1입니다
  • 605000 일주일입니다 (604800 ) + 200 초
    • 200 초 1 년에 52 주 밖에 없기 때문에 작동해야합니다.
  • @32000000 1 년이 조금 넘습니다

seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Y10 바이트를 절약합니다. 그래도 Bash + coreutils 라고 주장 해야합니다 .
Digital Trauma

7

PowerShell, 51 47

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

매우 간단합니다. 2017-01-01은 일요일이므로 다음 7 일마다입니다. 평생 동안 스크립트가 작동 해야하는 경우 2 바이트를 절약 할 수 있습니다.

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

1
문자열 대신 일 수를 나타내는 double을 추가하면 몇 바이트를 절약 할 수 있습니다 (예 :) (date 2017-1-1)+7.*$_. 이 답변
Danko Durbić

@ DankoDurbić : 오, 와우. 나는 int지금까지 며칠 동안 진드기와 끈을 추가하는 것에 대해서만 알고있었습니다 . 알고 반갑습니다.
Joey

5

Excel VBA 106 91 79 바이트

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

@Radhato 덕분에 15 바이트 절약

2017 년 1 월 1 일이 일요일이라고 가정하면 12 바이트가 더 절약됩니다.

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

감사합니다 @Toothbrush 66 바이트

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

편집 : (Sub 및 End Sub는 필요하지 않음) 52 바이트

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

chanching함으로써 개선 될 수있다 제가 42,736 43,100에 = 내용1 / 1 / 2017 # # 12 / 2,017분의 31 #에 난 중 # = 들어 다음 단으로 대체 (...) 포맷을 제거하고
Radhato

@Radhato하지만 바이트 크기가 증가하지 않습니까?
Rohan

나는 그것이 그것을
96.로 줄인다고

그렇습니다. 감사합니다
Rohan

1
@newguy Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub는 완벽하게 유효한 VBA 코드이며 66 바이트에 불과합니다. VBA 편집기가 추가 공간을 추가한다는 사실은 관련이 없습니다.
칫솔

4

PHP, 67 바이트

사실을 사용하여 PHP는 선언되지 않은 루프 변수에 값 1을 자동으로 할당하고 Linux epoch 시간을 사용합니다.

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

PPCG에 오신 것을 환영합니다! 나는 이것이 59 바이트 로 계산 될 수 있다고 생각 합니다 (PHP에서 직접 골프를 치지는 않지만).
Jonathan Allan

4
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);괜찮을
거야

2
항상 새로운 PHP 골퍼를 만나서 반갑습니다! 당신이 사용할 수있는 php -r당신이 필요가 없습니다 <?php?>같은이 셀 수 있으므로 및 59 bytes@JonathanAllan가 제대로 말했다있다. 괄호가 필요하지 않습니다 $t. 몇 가지 다른 골프와 당신 for(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);51 bytes(내 시간대에)로 끝납니다 . "\ n"을 1 바이트의 실제 줄 바꿈으로 바꿀 수 있으므로 51 바이트입니다.
Christoph

1
감사합니다
@Christoph

다른 모든 힌트 외에도 시간대 안전 gmdate대신에 사용할 수 있습니다 date.
Titus

4

k6, 32 바이트

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

간단한 설명 :

                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

아아, 이것은 폐쇄 소스, 요청시 전용 통역사에서만 작동하는 것 같습니다.

Running the command in the closed-source interpreter.


4

파이크 , 26 24 바이트

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

온라인으로 사용해보십시오!

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

또는 11 바이트

출력 형식을 무시하도록 허용 된 경우

y17y"52VDs6

온라인으로 사용해보십시오!

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 바이트

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

이 스 니펫은 일요일 인 1 월 1 일부터 2017 년 1 월 1 일부터 2017 년 12 월 31 일부터 2017 년 12 월 31 일까지 7 일마다 일련의 요일을 만들어 원하는 형식으로 인쇄하고 인쇄합니다.


이는 41 바이트로 아래로 데려 와야한다print(as.Date("2017-01-01")+seq(7,365,7))
계산

@count 감사하지만 필요한 출력을 인쇄하지 않습니다 (예 : "2017/01/01"대신 "2017.01.01")
plannapus

3

Befunge-98 (PyFunge) , 99 95 93 85 바이트, 후행 줄 바꿈

모든 최적화는 @JoKing에 의해 많은 감사를 받았습니다.

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

온라인으로 사용해보십시오!

나는 우리가 여기서 어떤 밀착성을 놓치고있는 것처럼 느꼈다. 그래서 나는 내가 가장 좋아하는 밀착 한 언어로 해결책을 만들었다.

설명 :
>8><><>><><>12 개월의 길이를 인코딩합니다
s. 빈 공간에 이전 날짜를 저장합니다
:1g2/. 맨 아래 행에서 ASCII 값을 가져와이를 2로 나눕니다. 주어진 월의 길이를 나타냅니다. 예 : ASCII => 56 /에서 8 = 56 2 = 28 => 달 (2 월)에 28 일
10g\%이 있습니다. 이전에 저장된 날을 가져 와서 달의 길이로 변조하여 날짜를 다음 달로 전환 할 수 있도록합니다.
:d1p업데이트 된 새 날의 사본을 저장
10g\`+합니다. > 새로운 날짜는 => 우리가 다음 달에 전환 => 달 카운터에 1을 추가
:b`테스트의 경우 한 달 카운터> (11) 우리가 올해의 끝에 도달 수단 (0 색인 사용)하는
#@_프로그램을 종료하면 이전을 기반으로
:1\0d1g스택 순서를 그래서 다음과 같이 보입니다 :Month, 1, Month, 0, Day
# 다음을 건너 시행 (duh)
1+:a/'0+,a%'0+,'., 숫자를 1 인덱싱으로 변환하고 인쇄 .하고 끝에 a 를 추가
j;하십시오. 스택에서 0을 사용하여 점프하지 사용 ;하여 인쇄 일정으로 다시 이동 한 다음 1을 사용하여 ;다음을 건너 뛰십시오. 시간
a"7102"4k,인쇄 2017\n
d1g요일 값 다시 가져 7+오기 반복하기 전에 일주일 추가


@ JoKing Omc 그런 확실한 최적화! 내가 어떻게 그리워 했을까? 고맙습니다.
IQuick 143

1
몇 바이트 더 떨어져 있습니다. 온라인으로 사용해보십시오! 하나는 -17 점프를 주석으로 바꾸는 대신 한 달 카운터에 0 기반 인덱싱을 사용하는 것과 다른 하나는 라이너로 바꾸는 것
Jo King

@ JoKing 와우 당신이 거기에서 한 많은 골프입니다. Lemme가 답변에 추가합니다.
IQuick 143

1
지옥은 왜 0 일을 색인화하고 초기화를 전혀하지 않아도됩니다! 85 바이트
조 왕

3

자바 스크립트, 111106 바이트

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

Note: Stack Exchange's console isn't long enough to display the entire list, so here's the first half as a separate snippet:

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

The custom format costs me 40 bytes...


2

Perl 5, 64 bytes

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

Try it online!

The task given was 2017, not any year, so I hardcoded in:

  • 117 (which is perlish for year 2017, 1900+117)
  • +1 because 1st of January is a sunday in 2017
  • 0..52 because 2017 have 53 sundays

POSIX is a core module and is always installed with Perl5. Doing the same without using modules in 101 bytes, removing whitespace:

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

2

Ruby, 75 bytes

Straightforward solution to figure out the dates with Time.

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

1
If you add a whole week(604800 seconds), then you don't need to check for a sunday, just repeat 53 times.
G B

1
If you do the trick suggested by @GB and no longer check for Sunday, you can also initialize with t=Time.new 1 and then do t.strftime"%d.%m.2017" for -1 byte.
Value Ink

2

SAS, 52 50 bytes

Saved 2 bytes thanks to @user3490.

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

You don't need to specify a dataset - just use data; instead of data c; and that saves 2 bytes. I think you do need a run; though.
user3490

@user3490 Thanks, I wasn't aware of that. I guess that's the equivalent of data _null_? Also, the run statement is implied if it's missing.
J_Lard

Not quite equivalent - you end up with an output dataset following the datan naming convention.
user3490

2

Mathematica 90 84 bytes

Fairly wordy. numbermaniac and Scott Milner saved 5 and 1 bytes, respectively.

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

Do you need the Most@? The output seems to be identical without it.
numbermaniac

1
@numbermaniac, Thanks. Most was in there to avoid the first Sunday in 2018. I had originally tested the code, without Most, for years, 2011, 2012, in which case the first Sunday in 2012 is included in the output. (That's why I included it into the code.) Strangely, Most is not needed for 2017-18. Nor does Most have any apparent effect on the result. Mysterious!
DavidC

1

VBA, 81 bytes (maybe 64)

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

My first post. Building on newguy's solution by removing the check for weekdays and just specifying every 7th day. Removing the dates saves 12 bytes a piece. 42736 is 1/1/2017. Output date format depends on system setting. Is that allowed? If so, it's 64 bytes because you don't need the format method.

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

You can also remove a lot of the white space that is autoformatted. For instance, and For i=0To 52 and Format(42736+i*7,"dd.mm.yyyy"). Also, you can just use Next instead of Next i.
Engineer Toast

1

AHK, 67 bytes

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

Nothing magical happens here. I tried to find a shorter means than FormatTime but I failed.


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));}

Uses the date-capabilities of the printf format.

Test it yourself!

Savings

  1. 104 -> 100: changed the loop values and the multiplicand.
  2. 100 -> 99: golfed the loop

1

T-SQL, 94 Bytes

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

if you don't like SQL GOTO or WHILE, here is a 122 bytes CTE solution

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

your first solution starts at 08.01.2017 not 01.01.2017
grabthefish

1
Very good tricks in your solution. Good job. I couldn't resist to borrow them. ;)
AXMIM

1

Ruby, 60+7 = 67 bytes

Uses the -rdate flag.

(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}

The above can be run as groovy script.

My first code golf entry. Fortunately, the year 1970 was not a leap year, thus can use it as a base.

Thanks to Dennis, here's a: Try it online!


Welcome to Programming Puzzles & Code Golf! In case you're interested, here's a permalink: Try it online!
Dennis

Thank you @Dennis I didn't know this existed :)
Krystian

You can save four bytes by moving the date inside the times block, 53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}, 52 bytes. Defending groovy's honor here...
Matias Bjarland

1

C#, 138 111 102 bytes

Saved 9 more bytes thanks to Johan du Toit!

Saved 27 bytes thanks to Kevin Cruijssen's suggestions!

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

Anonymous function which prints all Sundays in 2017.

Full program with ungolfed method:

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
Isn't it easier to just use .AddDays(7*i++)? Then there is no need for the .DayOfWeek<1 check. We know 01-01-2017 is a Sunday, and from there we can just keep adding 7 days.
Kevin Cruijssen

2
Not sure about this -- in all code golfs I partake, I always used the complete namespace -- but aren't you missing some Systems in there -- System.DateTime and System.Console.Write?
auhmaan

Cool but you can save a couple of 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: Yes, either full namespaces should be used, or the using statements should be included in the byte count.
raznagul

3
@adrianmp: Necessary using statements to run the code must be counted. See this Meta question: Do I need to use imports or can I call a class explicity?
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")));}

You can enjoy this program online here

In this soluion we :

  • Use OLE Automation Date (OADate) to avoid "AddDay()" from datetime.
    FromOADate() seem big but it's equal to new DateTime(2017,1,1)

  • Start the loop on the last sunday of 2016. to allow us to increment with operator += only. This operator return the value after the increment is done.

  • Increment by 7 days to jump from sunday to sunday before printing the date.

  • We stop once the last sunday of 2017 has been hit.

  • Use Debug instead of Console to save two characters

  • Avoid having explicit variable declaration and assignment


Unless otherwise specified, our defaults say you should provide a function or program (i.e. not a snippet), and you need to qualify Debug and DateTime: I'd recommend adding using System; and switching to Console from Debug (which is a tad dodgy itself, but I can't find any commentary on meta regarding it).
VisualMelon

1
@VisualMelon I've complied with "provide a function" and I have also replace Debug for Console since Debug required a specific include. However, I didn't comply with the 'use system' because my competitor in this language doesn't do it. Also, you can't code outside a class which itself required to be defined within a namespace. I'm pretty sure most c# answer on this site doesn't include that. So what now, do we throw all these answers to the garbage? Do we downvote them all to force them to comply? If so, then the community might as well ban c# from codegolf altogether.
AXMIM

These 'rules' are just what the community has over time settled on (and documented on meta). We don't downvote answers, we comment and don't upvote them either. When they fix them, then we are free to upvote. Both other C# answers have comments suggesting they should add the using directive or fully qualify the methods and types, please don't take any of this personally. I'm a long time C# golfer, and I appreciate how arbitrary the rules seem, so I like to nudge people in the right direction when I can. I specifically 'target' C# answers because I'm relatively well informed on the matter.
VisualMelon

1
@VisualMelon Fair enough, I'm just a passerby here anyway. So I shall accept your rules while I'm here. Therefore, I've attempted to make my answer comply this time.
AXMIM

1
Looks good to me! +1 for the original approach. And you don't need the space after using System; (I assume that wasn't intentional) so that's 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

Demo

T-SQL Convert Syntax


You can save 2 bytes by replacing DAY by d. It does the same.
AXMIM

+1 You can save another 3 bytes by replacing '20170101' with 42734. Dates are number. Time is the decimals part of the number.
AXMIM

1

JavaScript (ES6), 123 bytes

It's my first post here, hello!

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)})

This solution uses hardcoded data and is designed to work specifically for the year 2017. It relies on no date/time APIs.

As for the digits in the string 155274263153, each digit is a number of its own and denotes the first Sunday of each consecutive month. Output for the entire year can be generated by successively adding 7 to those.

What about the magic number, 2633, used in the loop?
Well... 2633 (decimal) is 101001001001 in binary. Now what could those 1s mean? Starting from the right, the 1st, 4th, 7th, 10th and 12th bit are set. This corresponds to months which happen to have five Sundays, as opposed to those that have only four. Golfed down to this neat expression, it initially looked like this: for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++).

I guess the remaining parts are fairly self-explanatory.


@SIGSEGV: I don't mind changing ECMAScript 2015 to Javascript (ES6), but... you broke my code and I had to revert it.
rhino

Oh, that's the community's consensus, having only the lambda part is allowed.
Matthew Roh

@SIGSEGV This is not the case here. This lambda contains only a small portion of the code, and I need that identifier to be able to use it elsewhere. Without the a= the code is actually broken.
rhino

1

T-SQL, 79 77 Bytes

After helping Salman A improve his answer. I decided to write my own using a loop and PRINT.

I ended with this 90 bytes solution.

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

Then I looked at the current leader in T-SQL which was 94 bytes from WORNG ALL with this answer. This guy had found very good tricks.

  1. Name the variable only @
  2. Loop with GOTO instead of actual LOOP
  3. Save one character using FORMAT instead of CONVERT. (SSMS2012+ only)

Using these tricks, this solution was trimmed down to the solution below which is 79 bytes.

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

You can save 2 bytes by changing @=@+7 to @+=7 and by removing the space between the 7 and the IF.
WORNG ALL

In this post is where I got all the tricks, may help you too.
WORNG ALL

1
@WORNGALL wonderfull, I was unaware we could do that. Thanks a lot.
AXMIM

1

Octave, 37 bytes

A lot shorter than all other non-golfing languages, and it's even tied with Jelly! Way to go Octave! :)

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

Try it online!

Luckily, year 2 AD looks exactly the same as year 2017 AD. Both starts and ends at a Sunday, and neither is a leap year. This saves a lot of bytes, since 367:7:737 is quite a bit shorter than 736696:7:737060.

This converts the number of days since 01.01.0001, to a string on the format DD.mm, with a trailing .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)

Try it online!

Without a calendar library, 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++"."

This is funny since using an operator for the padding function saves two bytes even though the second argument is unused, because less parentheses are needed – p(last l) is longer than last l!l. Works by calculating day/month pairs by subtracting the cumulative month start dates from the day of the year. The month start dates are compressed as (scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]). Month number is the number of positive elements and day number is the last positive element.

Try it online!


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"));

Can be run in the interactive windows of Visual Studio (or any other C# REPL based on Roslyn)

Down to 113 bytes: thanks to Kevin Cruijssen.


1
Could you add a TryItNow link? Also, you can golf it a bit by using a for-loop instead of a while-loop: for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Kevin Cruijssen

@KevinCruijssen Unfortunaly I am not able to find an applicable compiler on the given page. Here is a link to the used technology if you want to get in touch with it: link. Anyway thanks for the new loop. :)
rmrm

1
Unless otherwise specified, our defaults say you should provide a function or program (i.e. not a snippet), and you need to qualify Debug and DateTime: I'd recommend adding using System; and using Console.WriteLine(string)
VisualMelon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.