주어진 기간 동안 조커를 사용하여 가장 작은 날짜 목록을 가져옵니다.


13

형식의 날짜를 고려하십시오 YYYY-MM-DD. *날짜 문자열 끝에 조커 를 사용할 수 있습니다 . 예를 들어 2016-07-2*에서 2016-07-20까지의 모든 날짜를 설명합니다 2016-07-29.

이제 시작 날짜와 종료 날짜로 표시되는 기간을 고려하십시오.

알고리즘은 기간을 나타내는 가능한 가장 작은 날짜 목록을 찾아야합니다.

예를 들어 봅시다. 다음 기간 동안 :

  • 시작일 : 2014-11-29
  • 종료일 : 2016-10-13

알고리즘은 다음 날짜 목록을 포함하는 배열을 반환해야합니다.

  • 2014-11-29
  • 2014-11-30
  • 2014-12-*
  • 2015-*
  • 2016-0*
  • 2016-10-0*
  • 2016-10-10
  • 2016-10-11
  • 2016-10-12
  • 2016-10-13

1
승리 목표는 모호합니다. 나는 그것을 codegolf로 변경하는 것이 좋습니다 (즉, 가능한 가장 적은 바이트로 작업을 해결하십시오). 가장 작은 날짜 목록을 출력하려면 항상 답변이 필요합니다.
Billywob

어쩌면이 사이트에 가장 적합한 사이트가 아닐 수도 있습니다. "재미있는"도전보다 더 많은 질문입니다 (즉, "루비 온 레일즈에서이 알고리즘을 찾을 수 없습니다"). 나는 ... 여기가 아니라 새로운 해요
라파엘

나는 stackoverflow 를 시도한 다음 도전보다는 질문으로 제안하는 것이 좋습니다 . 다시 말하면, 도전은 여전히 ​​내 의견으로는 흥미롭고 (코드 골프와 같은) 기회가 필요합니다.
Billywob

6
그래, 알고리즘을 찾는 것이 여전히 재미 있고 도전적이라고 생각하지만 코드 골프 측면에 관심이 없었습니다. 글쎄, 나는 그것을 해석하고 태그를 변경했으며 지금은이 게시물을 따르는 동안 stackoverflow를 요청할 것입니다. 감사!
Raphael

1
후속 조치 : 나는 어제 Stackoverflow에 게시했지만 오늘 Ruby에서 작업 코드가있었습니다 (수개월에 "조커하지는 않지만 거의)": stackoverflow.com/questions/40506639/…
Raphael

답변:


1

PHP, 541 343 바이트

알고리즘을 처음부터 사용하고 싶었습니다. 그러나 골프를 내리는 것은 실제로 예상했던 것보다 훨씬 재미있었습니다 (특히 지원되는 날짜 및 시간 형식 탐색 ).

세 가지 주요 작업은 약 130 바이트를 절약했습니다. 그러나 사소한 골프의 70 바이트
(또한 큰 단계 중 하나를 쓸모 없게 만들었습니다)는 많은 재미를 가져 왔습니다 .

for($a=($f=strtotime)($argv[1]);!$p=$a>$z=$f($argv[2]);$a+=86400){$x=$z<$e=$f(Dec31,$a);(101<$q=date(md,$a))?$q-1001|$x?:$a=$e+$p="1*":($x?($t=$f(IX30,$a))>$z?:$a=$t+$p="0*":$a=$e+$p="*");$p?:($q%100>1|$z<($t=$f(date(Ymt,$a)))?$q%10>0&$q%100>1|$z<($t=min($t,$a+777600))?:$a=$t+$p="m-$q[2]*":$a=$t+$p="m-*");echo date("Y-".($p?:"m-d"),$a),"
";}

명령 행 인수에서 입력을받습니다. 온라인으로 실행 -nr하거나 테스트하십시오 .

노트

  • 인쇄 Y-m-3*에 대한 Y-m-30; 7 바이트를 추가하여 수정 : Insert |$a==$tafter 777600)).
  • PHP 7.1에서 경고를 던진다; 수정에 5 바이트를 추가 교체 +$p와 함께 +!$p.
  • 설명 및 일부 골프 설명을 게시 할 준비가되었습니다.
    하지만 내가 망치기 전에 다른 사람이 제출했는지 조금 기다릴게요.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.