Tìm thời gian thú vị tiếp theo


9

Tôi tình cờ liếc nhìn đồng hồ của tôi hôm nay vào đúng 11:11:11 (và hôm nay là 1/11; thật tệ, đó không phải là năm 2011), và điều đó khiến tôi suy nghĩ: Tôi biết! Tôi nên làm một câu hỏi golf mã trong số này! Tôi là một thằng ngốc.

Dù sao, thách thức của bạn là lấy một giờ, phút và giây làm đầu vào và xuất ra thời gian "thú vị" tiếp theo. Ở đây, tôi sẽ định nghĩa thú vị theo các bước sau:

  1. Nối giờ, phút và giây. (Ví dụ: lúc 4:14:14, đây sẽ là 41414.)
  2. Kiểm tra các nhóm liên tiếp gồm một, hai hoặc ba trải dài theo chiều dài của toàn bộ chuỗi. Ví dụ, tôi có thể tìm thấy [41][41][4]trong thời gian ví dụ (nếu nhóm không thể tiếp cận chuỗi, chỉ cần cắt nó như tôi đã làm trong ví dụ này). Một ví dụ khác: trong thời gian trong ví dụ đầu tiên của tôi vào lúc bắt đầu của câu hỏi, nó sẽ là [1][1][1][1][1][1], [11][11][11]hoặc [111][111].
  3. Có một nhóm liên tiếp đi suốt chuỗi? Nếu vậy, thời gian là "thú vị!" Nếu không, nó không phải là.

Đầu vào có thể ở bất kỳ định dạng hợp lý nào , nhưng nó không được mã hóa cứng. Đầu ra cũng có thể ở bất kỳ định dạng hợp lý nào và nó không cần phải ở cùng định dạng với đầu vào.

Nếu bạn sử dụng quyền truy cập mạng vì một số lý do, tất cả các byte được tải xuống từ mạng sẽ được tính vào điểm số của bạn.

Đây là ; mã ngắn nhất trong byte thắng.


1
Đó là tháng 1, không phải tháng 11: P
Biến động

@Volatility Rất tiếc, lỗi đánh máy :-P đã sửa
Doorknob

1
Tôi thích hạn chế truy cập mạng.
Kyle Kanos

1
Mã chỉ nên xem xét thời gian trên đồng hồ 12 giờ? Ví dụ: trên đồng hồ 24 giờ 14:14:14 sẽ là một thời gian thú vị nhưng không thú vị lắm trên đồng hồ 12 giờ (2:14:14)
Kevin Anderson

Câu trả lời:


2

J, 113 99 90

Có lẽ vẫn còn khá golf.

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

Có một vector (h m s) làm đầu vào và trả về một vectơ có cùng định dạng với đầu ra.

Ví dụ:

   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

Đó là một cách để làm điều đó.

    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]

Ví dụ

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

Bạn có thể gửi một mẫu chạy? Tôi không biết gì về Haskell vì vậy tôi không biết đầu vào / đầu ra hoạt động như thế nào, v.v :-P
Doorknob

1

Toán học 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}]&

Nó trả về một mô hình của thời gian thú vị tiếp theo:

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

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

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

a_ đánh dấu sự kết thúc của thời gian


1

Lua

Tôi đã có bốn giải pháp khác nhau, vì tôi không chắc chắn về một số yêu cầu.

Phiên bản 1: loại bỏ 0s, nhập dòng lệnh cũng như sao lưu os.time () (315)

Tối thiểu hóa:

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

Phiên bản đầy đủ với ý kiến:

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

Các phiên bản khác rất giống nhau, vì vậy tôi sẽ chỉ đăng các phiên bản thu nhỏ:

Phiên bản 2: không có đầu vào dòng lệnh (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

Phiên bản 3: không xóa 0, với đầu vào dòng lệnh (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

Phiên bản 4: không có nội dung ưa thích nào (không loại bỏ 0 hoặc nhập dòng lệnh) (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

Cách sử dụng cấu trúc

Trong một thiết bị đầu cuối, chạy (phiên bản 1 và 3)

lua interesting.lua HOURS MINUTES SECONDS

hoặc chỉ

lua interesting.lua

Nếu bạn muốn nó tắt đồng hồ hệ thống.

Có một giải thưởng cho tính đầy đủ tính năng? : P

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.