Trong một khoảng thời gian nhất định, có được danh sách ngày nhỏ nhất, sử dụng joker


13

Xem xét một ngày được định dạng trong YYYY-MM-DD. Bạn có thể sử dụng joker *ở cuối chuỗi ngày. Ví dụ 2016-07-2*mô tả tất cả các ngày từ 2016-07-20đến 2016-07-29.

Bây giờ, hãy xem xét một khoảng thời gian được đại diện bởi một ngày bắt đầu và ngày kết thúc.

Thuật toán phải tìm danh sách ngày nhỏ nhất có thể biểu thị khoảng thời gian.

Hãy sử dụng một ví dụ. Trong khoảng thời gian sau:

  • ngày bắt đầu: 2014-11-29
  • ngày cuối: 2016-10-13

Thuật toán phải trả về một mảng chứa danh sách ngày sau đây:

  • 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
Các mục tiêu chiến thắng là mơ hồ. Tôi đề nghị thay đổi nó thành codegolf (nghĩa là giải quyết nhiệm vụ theo ít byte nhất có thể) và luôn yêu cầu câu trả lời để đưa ra danh sách ngày nhỏ nhất.
Billywob

Có lẽ nó đơn giản không phải là trang web tốt nhất cho vấn đề này, nó là một câu hỏi (nghĩa là "Tôi không thể tìm thấy thuật toán này trong Ruby on Rails") hơn là một thử thách "cho vui". Tôi khá mới ở đây ...
Raphael

Tôi đề nghị bạn thử stackoverflow và sau đó hỏi nó như một câu hỏi chứ không phải là một thử thách. Nếu đánh giá lại, theo tôi, thử thách này vẫn rất thú vị và xứng đáng có cơ hội (như môn đánh gôn).
Billywob

6
Vâng, tôi nghĩ rằng việc tìm kiếm thuật toán vẫn còn thú vị và đầy thách thức, nhưng tôi không quan tâm đến khía cạnh chơi gôn ... Tôi đã đọc lại nó, thay đổi các thẻ và bây giờ tôi sẽ hỏi stackoverflow trong khi vẫn theo dõi bài đăng này. Cảm ơn!
Raphael

1
Theo dõi: Tôi đã đăng trên Stackoverflow ngày hôm qua, nhưng hôm nay tôi đã có một mã làm việc trong Ruby (nó không "jokerize" tháng, nhưng gần như ở đó): stackoverflow.com/questions/40506639/iêu
Raphael

Câu trả lời:


1

PHP, 541 343 byte

Tôi muốn có được thuật toán làm việc ở nơi đầu tiên; nhưng chơi golf xuống thực sự thú vị hơn tôi mong đợi (đặc biệt là duyệt các định dạng ngày & giờ được hỗ trợ ).

Ba hành động chính được lưu khoảng 130 byte; nhưng 70 byte từ các môn đánh gôn nhỏ
(cũng khiến một trong những bước lớn bị lỗi thời) mang lại rất nhiều niềm vui.

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

lấy đầu vào từ các đối số dòng lệnh. Chạy với -nrhoặc kiểm tra nó trực tuyến .

ghi chú

  • in Y-m-3*cho Y-m-30; thêm 7 byte để sửa: Chèn |$a==$tsau 777600)).
  • đưa ra các cảnh báo trong PHP 7.1; thêm 5 byte để sửa: Thay thế +$pbằng +!$p.
  • Một sự cố và một số giải thích golf đã sẵn sàng để được đăng;
    nhưng tôi sẽ đợi một chút để xem có ai khác nộp trước khi tôi làm hỏng không.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.