สำหรับช่วงเวลาที่กำหนดรับรายการวันที่ที่เล็กที่สุดโดยใช้ jokers


13

YYYY-MM-DDพิจารณาวันที่จัดรูปแบบใน คุณสามารถใช้โจ๊กเกอร์*ในตอนท้ายของสตริงวันที่ เช่น2016-07-2*อธิบายทุกวันจากไป2016-07-202016-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

บางทีมันอาจไม่ใช่ไซต์ที่ดีที่สุดสำหรับสิ่งนี้ แต่เป็นคำถามเพิ่มเติม (เช่น "ฉันไม่พบอัลกอริทึมนี้ใน Ruby on Rails") มากกว่าความท้าทาย "เพื่อความสนุก" ฉันค่อนข้างใหม่ที่นี่ ...
ราฟาเอล

ฉันขอแนะนำให้คุณลองstackoverflowแล้วถามเป็นคำถามแทนการท้าทาย ถ้าใช้ถ้อยคำใหม่ความท้าทายก็ยังน่าสนใจในความคิดของฉันและสมควรได้รับโอกาส
Billywob

6
ใช่ฉันคิดว่าการค้นหาอัลกอริทึมยังคงสนุกและท้าทาย แต่ฉันไม่ได้สนใจในโค้ดกอล์ฟ - ... ฉันขอแนะนำใหม่เปลี่ยนแท็กและตอนนี้ฉันจะถาม stackoverflow ในขณะที่ยังโพสต์นี้อยู่ ขอบคุณ!
Raphael

1
การติดตาม: ฉันโพสต์ใน Stackoverflow เมื่อวานนี้ แต่วันนี้ฉันมีรหัสการทำงานใน Ruby (ไม่ใช่ "jokerize" เดือน แต่เกือบจะอยู่ที่นั่น): 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 ไบต์แก้ไข: แทรกหลัง|$a==$t777600))
  • พ่นคำเตือนใน PHP 7.1; เพิ่ม 5 ไบต์แก้ไข: แทนที่ด้วย+$p+!$p
  • พังทลายและ golfings อธิบายบางอย่างพร้อมที่จะโพสต์;
    แต่ฉันจะรอสักครู่เพื่อดูว่ามีใครบางคนส่งก่อนที่ฉันจะเสีย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.