숫자 날짜 범위


16

참고 : 내가 네덜란드 사람이기 때문에 모든 날짜는 dd-MM-yyyy도전 설명 및 테스트 사례에서 네덜란드 형식입니다.

도전:

입력 :
시작 날짜 ; 종료일 ; 숫자에스이자형

출력 :
날짜에 고유 숫자가 포함 된 범위 (양쪽 포함) 내의 모든 날짜.[에스,이자형]

예:

입력 : 시작 날짜 : 12-11-1991; 종료일 : 02-02-1992; 숫자:4

출력 :
일 / 월 동안 선행 0으로 :

[20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 01-12-1991, 02-12-1991, 09-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 01-01-1992, 02-01-1992, 09-01-1992, 10-01-1992, 11-01-1992, 12-01-1992, 19-01-1992, 20-01-1992, 21-01-1992, 22-01-1992, 29-01-1992, 01-02-1992, 02-02-1992]

일 / 월 동안 선행 0이없는 경우 :

[20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 3-12-1991, 4-12-1991, 5-12-1991, 6-12-1991, 7-12-1991, 8-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 3-1-1992, 4-1-1992, 5-1-1992, 6-1-1992, 7-1-1992, 8-1-1992, 10-1-1992, 13-1-1992, 14-1-1992, 15-1-1992, 16-1-1992, 17-1-1992, 18-1-1992, 20-1-1992, 23-1-1992, 24-1-1992, 25-1-1992, 26-1-1992, 27-1-1992, 28-1-1992, 31-1-1992]

도전 규칙 :

  • 입력 및 출력 날짜는 합리적인 (날짜) 형식 일 수 있습니다. 임의의 dMy형식 (선택적 구분 기호 포함), 3 개의 정수 목록, 언어의 기본 날짜 객체 등의 문자열 일 수 있습니다. 출력은 목록 / 배열 / 스트림, STDOUT에 인쇄, 단일 구분 문자열 등일 수 있습니다.
  • 출력에 일 / 월의 선행 0을 포함하거나 제외 할 수 있습니다. 답변에 사용할 두 가지 중 하나를 지정하십시오 . 결과가 다릅니다. 즉 1-1-1991, 2 개의 고유 숫자가 있지만 01-01-19913 개의 고유 숫자입니다.
  • 윤년과 그레고리력과 율리우스 력의 차이점을 다루지 않아도됩니다. 테스트 사례에 지정된 날짜 범위가 4로 나눌 수있는 기간 동안 2 월 28 일 / 3 월 1 일을 넘지 않는다고 가정 할 수 있습니다.
  • 입력 숫자 은 범위에 있도록 보장 되므로 는 지정되지 않습니다 (빈 목록을 반환하는 것이 가장 합리적이지만 오류나 잘못된 결과를 제공하는 것도 좋습니다. 해당 입력을 처리 할 필요가 없습니다).[1,8]=0

일반 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙기본 I / O 규칙으로 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 반환 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다.
  • 가능하면 코드 테스트와 링크를 추가하십시오 (예 : TIO ).
  • 또한 답변에 대한 설명을 추가하는 것이 좋습니다.

테스트 사례 :

Inputs: [12-11-1991, 02-02-1992], 4
Outputs with leading 0s:    [20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 01-12-1991, 02-12-1991, 09-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 01-01-1992, 02-01-1992, 09-01-1992, 10-01-1992, 11-01-1992, 12-01-1992, 19-01-1992, 20-01-1992, 21-01-1992, 22-01-1992, 29-01-1992, 01-02-1992, 02-02-1992]
Outputs without leading 0s: [20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 3-12-1991, 4-12-1991, 5-12-1991, 6-12-1991, 7-12-1991, 8-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 3-1-1992, 4-1-1992, 5-1-1992, 6-1-1992, 7-1-1992, 8-1-1992, 10-1-1992, 13-1-1992, 14-1-1992, 15-1-1992, 16-1-1992, 17-1-1992, 18-1-1992, 20-1-1992, 23-1-1992, 24-1-1992, 25-1-1992, 26-1-1992, 27-1-1992, 28-1-1992, 31-1-1992]

Inputs: [19-09-2019, 30-09-2019], 5
Outputs (same with and without leading 0s): [23-09-2019, 24-09-2019, 25-09-2019, 26-09-2019, 27-09-2019, 28-09-2019, 30-09-2019]

Inputs: [19-09-2019, 30-09-2019], 8
Output (same with and without leading 0s): []

Inputs: [20-06-1749, 30-06-1749], 8
Outputs with leading 0s:    [23-06-1749, 25-06-1749, 28-06-1749]
Outputs without leading 0s: []

Inputs: [10-12-1969, 12-01-1970], 6
Outputs (same with and without leading 0s): [30-12-1969]

Inputs: [10-12-1969, 12-01-1970], 5
Outputs with leading 0s:    [10-12-1969, 13-12-1969, 14-12-1969, 15-12-1969, 17-12-1969, 18-12-1969, 20-12-1969, 23-12-1969, 24-12-1969, 25-12-1969, 27-12-1969, 28-12-1969, 31-12-1969, 02-01-1970, 03-01-1970, 04-01-1970, 05-01-1970, 06-01-1970, 08-01-1970, 12-01-1970]
Outputs without leading 0s: [10-12-1969, 13-12-1969, 14-12-1969, 15-12-1969, 17-12-1969, 18-12-1969, 20-12-1969, 23-12-1969, 24-12-1969, 25-12-1969, 27-12-1969, 28-12-1969, 31-12-1969, 2-1-1970, 3-1-1970, 4-1-1970, 5-1-1970, 6-1-1970, 8-1-1970, 12-1-1970]

Inputs: [11-11-1111, 11-11-1111], 1
Output (same with and without leading 0s): [11-11-1111]

나는 형식이 여기에 요구 특별히 아니라는 것을 알고,하지만 난 그냥 "말씀을 전파"여기 코멘트 : 프로그래머 (로그 파일 이름에 등) 날짜를 사용하려고해야한다는 internationnal 표준이 : en.wikipedia.org / 위키 / ISO_8601 . ( 'T'를 사용하지 않으면 (T없이 날짜와 시간은 완전히 다른 것이 될 수 있음) 구분 기호를 사용할 수없는 경우 구분 기호를 사용할 수없는 경우 (예 : 동일한 형식의 다른 변형을 제안) 표준] : 주요 항목 : YYYY-MM-DDThh:mm:ss.mmm +hh:mm, + hh : mm은 UTC에서 로케일의 시간 오프셋입니다.)
Olivier Dulac

답변:


2

Japt , 23 바이트

날짜 입력을 Unix 타임 스탬프로 가져 와서 0로케일에 따라 형식화 및 선행 문자가 포함 된 문자열 배열을 출력합니다 . Japt v2에서 1 바이트가 더 짧을 수 있지만 Date객체를 문자열 로 변환 할 때 버그가있는 것 같습니다 .

òV864e5@ÐX s7Ãf_¬â ʶWÄ

시도 해봐

òV864e5@ÐX s7Ãf_¬â ʶWÄ     :Implicit input of integers U=s,V=e & W=n
òV                          :Range [U,V]
  864e5                     :  With step 86,400,000 (24*60*60*1000)
       @                    :Map each X
        ÐX                  :  Convert to Date object
           s7               :  Convert to locale date string
             Ã              :End map
              f             :Filter
               _            :By passing each through the following function
                ¬           :  Split
                 â          :  Deduplicate
                   Ê        :  Length
                    ¶       :  Is equal to
                     WÄ     :  W+1, to account for the inclusion of the delimiting "/" or "-"


3

빨강 , 93 바이트

func[a b n][until[if n = length? exclude d: rejoin[a/4"-"a/3"-"a/2]"-"[print d]b < a: a + 1]]

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

일 / 월에 0을 선행하지 않습니다.

레드 가 내부적 09-10-2019으로 변환 되는 것이 너무 나쁘기 9-Oct-2019때문에 일 / 월 / 년을 개별적으로 추출해야합니다.


나는 레드에 익숙하지 않지만이를 잘라낼 수있는 많은 공백이있는 것처럼 보입니다. 그래도 내가 잘못하면 용서하십시오.
connectyourcharger

@connectyourcharger 문제 없습니다! 겉보기에는 불필요한 공백이 몇 개 있지만 토큰을 분리하는 데 필요합니다. 빨간색의 단어 (식별자)에는을 포함 할 수 -=+*<>?!~&있으므로 공백 (또는 (...)[...]"...")이 필요합니다.
Galen Ivanov

2

Python 3.8 (시험판) , 84 바이트

글로우 아이 (Gloweye) 덕분에 -6 바이트

lambda s,e,n:[d for i in range((e-s).days+1)if-len(set(d:=str(s+type(e-s)(i))))==~n]

이름이없는 함수로, 세 개의 인수를 허용하는 문자열 목록 (앞에 오는 0 포함)을 반환합니다.

  • s, 시작 - datetime.date객체;
  • e, - datetime.date객체; 과
  • n일 수- int개체

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

참고 : 함수가 datetime.date객체를 허용 하므로 가져 오기 코드를 계산하지 않았습니다 ( datetime.timedelta이 입력 객체를 빼서 간접적으로 액세스 할 수 있으므로 객체 가져 오기 작업을 수행했습니다 ).


1
type(obj)보다 3 바이트 짧습니다 obj.__class__.
Gloweye

트윗 담아 가기
Jonathan Allan

@Gloweye는 결국 6을 저장합니다 (점은 가고 괄호는 이미 존재합니다)
Jonathan Allan

1
나는 그 깊이까지 아직 분석하지 않았으며, 단지 그것을보고 __class__빠른 의견을 제시했다. 항상 기쁘다.
Gloweye

1

자바 스크립트 (ES6), 91 바이트

(n)(end)(start)날짜를 밀리 초 단위의 Unix 타임 스탬프로 예상하는로 입력을 받습니다. 형식으로 공백으로 구분 된 날짜 목록을 반환합니다 yyyy-mm-dd.

선행 0이 포함됩니다.

n=>b=>g=a=>a>b?'':(new Set(d=new Date(a).toJSON().split`T`[0]).size+~n?'':d+' ')+g(a+864e5)

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


1
DST가 이동하면이 스 니펫이 실패 할 수 있습니다 (이 경우 내일 + 864e5가 아닐 수도 있음). 그러나 고맙게도 DST가없는 UTC 시간대를 사용하십시오. -제품 웹 사이트에서 동일한 논리를 사용하고 DST가 전환 될 때까지 무언가 잘못 알고있는 사람으로부터 ...
tsh

1

PHP , 90 바이트

for([,$s,$e,$n]=$argv;$s<=$e;)$n-count(count_chars($d=date(Ymd,86400*$s++),1))||print$d._;

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

이것은 선행 0입니다. 입력은 명령 인수 ( $argv)이고 날짜는 일 (기본적으로 표준 초 / 86400)의 유닉스 타임 스탬프입니다.이 도전에 시간이 필요하지 않으므로이 형식을 사용하여 1 바이트 더 골프를 칠 수있었습니다. 그 끝에 도달하고있는 모든 날짜 인쇄 될 때까지 시작하는 일을 추가하는 유지 $n로 구분하여 그 안에 독특한 숫자 _Ymd형식을.

또한 입력과 동일한 형식으로 출력하기 위해 날짜를 인쇄 하는 89 바이트 대안 이 있습니다 (Unix 타임 스탬프 일).


1

자바 (JDK) , 86 바이트

(s,e,n)->s.datesUntil(e.plusDays(1)).filter(d->(""+d).chars().distinct().count()==n+1)

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

나는 0s 를 사용하기로 결정했습니다 .

크레딧


1
어쩌면 나는 그것을 양쪽에 포함시키지 않아야했을 것 datesUntil입니다 .103 바이트에 Java 9를 사용할 수 있습니다 . ;) 좋은 답변입니다. 개인적으로 골프를 칠 수있는 것은 없습니다.
Kevin Cruijssen '10

1
@KevinCruijssen 글쎄, 실제로, 당신은 매우 멋진 골프 방법을 주었다! 을 추가 .plusDays(1)하고 제거하면 .forEach(System.out::println)쓸만한 가치가 있으며 값 객체와 스트림이 허용되면 날짜가 반환 될 수 있기 때문에 매우 답이됩니다. ;-) 나는 datesUntil심지어 존재했던 실마리가 없었다 ! 감사합니다 :-)
Olivier Grégoire

웁스, 스트림 반환을 허용하는 내 규칙을 잊어 버렸습니다. haha ​​XD 저는 바보입니다. 그러나 나는 당신의 바보 같은 언어로 당신을 도울 수있어서 기쁩니다. ; p
Kevin Cruijssen


1

C # (Visual C # 대화식 컴파일러)

선행 0, 104 , 103 바이트없이

(s,e,n)=>new int[(e-s).Days+1].Select((x,i)=>s.AddDays(i)).Where(x=>$"{x:yyyMd}".Distinct().Count()>=n)

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

선행 0과 106 105 바이트

(s,e,n)=>new int[(e-s).Days+1].Select((x,i)=>s.AddDays(i)).Where(x=>$"{x:yyyMMdd}".Distinct().Count()>=n)

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


x =>$"-1의 두 버전에서 공백을 제거 할 수 있습니다 . :)
Kevin Cruijssen

@KevinCruijssen 아 씨발 고마워 x) 누군가가 더 짧은 해결책을 생각해 낼 수 있다고 확신합니다, 나는 이것에 만족하지 않습니다
Innat3

0

코 틀린, 119 바이트

fun f(a:LocalDate,b:LocalDate,c:Long)=a.datesUntil(b.plusDays(1)).filter{it.toString().chars().distinct().count()==c+1}

주요 0 없이는 두 소요 java.time.LocalDate하고는 Long하는 반환 StreamLocalDate


안녕하세요, CCGC에 오신 것을 환영합니다! 테스트 코드가 포함 된 Try it online 링크를 추가하여 작동하는지 확인하십시오. 또한, 나는 코 틀린를 모르겠지만, 교체 할 수 있습니다 it.toString()(it+"")몇 바이트를 저장할? Java 또는 .NET C #과 같은 다른 언어에서도 이것이 가능하다는 것을 알고 있습니다.
Kevin Cruijssen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.