ค้นหาเวลา“ น่าสนใจ” ต่อไป


9

ฉันบังเอิญมองดูนาฬิกาวันนี้เวลา 11:11:11 (และวันนี้คือ 1/11; แย่มากที่ไม่ใช่ 2011) และนั่นทำให้ฉันคิดว่า: ฉันรู้! ฉันควรถามคำถามเกี่ยวกับกอล์ฟจากนี้! ฉันเป็นคนโง่

อย่างไรก็ตามความท้าทายของคุณคือใช้เวลาหนึ่งชั่วโมงนาทีและวินาทีเป็นอินพุตและส่งออกในเวลา "น่าสนใจ" ถัดไป ที่นี่ฉันจะกำหนดสิ่งที่น่าสนใจตามขั้นตอนเหล่านี้:

  1. ต่อชั่วโมงนาทีและวินาทีเข้าด้วยกัน (ตัวอย่างเช่นที่ 4:14:14 นี่จะเป็น 41414)
  2. ตรวจสอบกลุ่มติดต่อกันหนึ่ง, สองหรือสามที่ขยายความยาวของสตริงทั้งหมด ตัวอย่างเช่นฉันสามารถค้นหาได้[41][41][4]ในเวลาตัวอย่าง (หากกลุ่มไม่สามารถเข้าถึงผ่านสตริงได้ให้ตัดออกเหมือนที่ฉันทำในตัวอย่างนี้) อีกตัวอย่างหนึ่ง: เวลาในตัวอย่างแรกของฉันที่จุดเริ่มต้นของคำถามที่ว่ามันจะเป็น[1][1][1][1][1][1], หรือ[11][11][11][111][111]
  3. มีกลุ่มที่ต่อเนื่องกันตลอดเส้นทาง? ถ้าเป็นเช่นนั้นเวลาน่าสนใจ! มิฉะนั้นจะไม่

อินพุตสามารถอยู่ในรูปแบบที่สมเหตุสมผลแต่ต้องไม่ฮาร์ดโค้ด เอาต์พุตยังสามารถอยู่ในรูปแบบที่สมเหตุสมผลและไม่จำเป็นต้องอยู่ในรูปแบบเดียวกับอินพุต

หากคุณใช้การเข้าถึงเครือข่ายด้วยเหตุผลบางอย่างไบต์ทั้งหมดที่ดาวน์โหลดจากเครือข่ายจะนับเป็นคะแนนของคุณ

นี่คือ ; รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


1
มันคือมกราคมไม่ใช่พฤศจิกายน: P
ความผันผวน

@ ความแปรปรวนอ๊ะพิมพ์ผิด :-P แก้ไขแล้ว
Doorknob

1
ฉันชอบข้อ จำกัด การเข้าถึงเครือข่าย
Kyle Kanos

1
รหัสควรพิจารณาเวลาบนนาฬิกา 12 ชั่วโมงเท่านั้นหรือไม่ ตัวอย่างเช่นในนาฬิกา 24 ชั่วโมง 14:14:14 จะเป็นเวลาที่น่าสนใจ แต่ไม่น่าสนใจในนาฬิกา 12 ชั่วโมง (2:14:14)
Kevin Anderson

คำตอบ:


2

J, 113 99 90

อาจจะค่อนข้างเล่นกอล์ฟได้

f=:t#:[:(>:^:([:(3&g+:2&g=.[:*/]=(]$)${.)@(":@{.,3}.7":100#.1,])t#:])^:_)1+(t=.24,2$60)#.]

รับเวกเตอร์(h m s)เป็นอินพุตและส่งคืนเวกเตอร์ในรูปแบบเดียวกับเอาต์พุต

ตัวอย่าง:

   f 0 0 0
0 1 0
   f 4 14 14
4 14 41
   f 23 59 59
0 0 0
   f 3 14 15
3 14 31

1

Haskell - 227223

นั่นเป็นวิธีหนึ่งในการทำมัน

    import Data.List
e _ []=False
e f s=let (h,t)=f s in t`isPrefixOf`h||h`isPrefixOf`t&&e f t
i [a,b,s]=head[t|s<-[s+1..],f<-map splitAt[1..3],let m=b+s`div`60;h=a+m`div`60;t=[h`mod`24,m`mod`60,s`mod`60],e f$concatMap show t]

ตัวอย่าง

λ: i [11,11,11]
[11,21,1]
λ: i [4,14,14]
[4,14,41]

คุณช่วยโพสต์ตัวอย่างรันได้ไหม ฉันไม่รู้เรื่องแฮสเค็ลล์ดังนั้นฉันจึงไม่รู้เลยว่าอินพุต / เอาต์พุตทำงานอย่างไร :-P
Doorknob

1

Mathematica 125

F=Do[#~MatchQ~{#〚-1〛..,_}&&Break@#&@Partition[(i=IntegerDigits)@f[n~i~60,100],m,m,1,a_],
{n,#~(f=FromDigits)~60+1,7^6},{m,3}]&

มันคืนรูปแบบของเวลาที่น่าสนใจต่อไป:

F@{11, 11, 11}
F@{4, 14, 14}

{{1, 1, 2}, {1, 1, 2}}

{{4, 1, 4}, {4, 1, a_}}

a_ ทำเครื่องหมายจุดสิ้นสุดของเวลา


1

Lua

ฉันมีวิธีแก้ไขปัญหาสี่แบบเนื่องจากฉันไม่แน่ใจเกี่ยวกับข้อกำหนดบางประการ

รุ่น 1: การลบ 0s การป้อนข้อมูลบรรทัดคำสั่งรวมถึงการสำรองข้อมูล os.time () (315)

ลดลง:

z=arg if z[1] then y={hour=z[1],min=z[2],sec=z[3],day=1,month=1,year=1}end h,g,e,u=os.date,os.time(y),":",tonumber while 1 do g=g+1 b,c,d=u(h("%H",g)),u(h("%M",g)),u(h("%S",g)) a=b..c..d for x=1,#a/2 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>math.ceil(#a/x) then print(b..e..c..e..d)return 1 end end end end

เวอร์ชันเต็มพร้อมความคิดเห็น:

z=arg if z[1] then y={hour=z[1],min=z[2],sec=z[3],day=1,month=1,year=1}end --get command line arguments
h,g,e,u=os.date,os.time(y),":",tonumber --set up references, if command line arguments accepted use y else use current time
while 1 do
    g=g+1
    b,c,d=u(h("%H",g)),u(h("%M",g)),u(h("%S",g)) --get HH:MM:SS seperately (which allows removal of the zeroes with tonumber())
    a=b..c..d  --concat
    for x=1,#a/2 do  --check up to half of the string
        p=1
        for _ in a:gmatch(a:sub(1,x))do --for each match
            p=p+1  --count number of matches
            if p>math.ceil(#a/x) then print(b..e..c..e..d)return 1 end --if matches span entire string, cheer (and print in a pretty format)
        end
    end
end

รุ่นอื่นคล้ายกันมากดังนั้นฉันจะโพสต์เฉพาะรุ่นที่ย่อเล็กสุดเท่านั้น:

เวอร์ชัน 2: ไม่มีอินพุตบรรทัดคำสั่ง (239)

h,g,e,u=os.date,os.time(),":",tonumber while 1 do g=g+1 b,c,d=u(h("%H",g)),u(h("%M",g)),u(h("%S",g)) a=b..c..d for x=1,#a/2 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>math.ceil(#a/x) then print(b..e..c..e..d)return 1 end end end end

เวอร์ชัน 3: ไม่มีการลบ 0 พร้อมอินพุตบรรทัดคำสั่ง (240)

z=arg if z[1] then y={hour=z[1],min=z[2],sec=z[3],day=1,month=1,year=1}end h,g=os.date,os.time(y) while 1 do g=g+1 a=h("%H%M%S",g) for x=1,3 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>6/x then print(h("%T",g))return 1 end end end end

เวอร์ชัน 4: ไม่มีสิ่งแฟนซี (ไม่มีการลบ 0 หรืออินพุตบรรทัดคำสั่ง) (164)

h,g=os.date,os.time() while 1 do g=g+1 a=h("%H%M%S",g) for x=1,3 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>6/x then print(h("%T",g))return 1 end end end end

คำแนะนำการใช้งาน

ในเทอร์มินัลให้รัน (เวอร์ชัน 1 และ 3)

lua interesting.lua HOURS MINUTES SECONDS

หรือเพียงแค่

lua interesting.lua

หากคุณต้องการให้มันปิดระบบนาฬิกา

มีรางวัลสำหรับความสมบูรณ์ของคุณสมบัติหรือไม่ : P

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.