ルア
いくつかの要件について確信が持てなかったため、4つの異なるソリューションを用意しています。
バージョン1:0の削除、コマンドライン入力、および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