最近はやっているらしいズンドコキヨシ、ズンドコしているような形跡を見せずにズンドコしたいと思って書いてみました。
require 'time'
Z = '2009-07-13 00:28:51 +0900'
D = '2009-07-30 09:07:47 +0900'
K = '2009-06-27 23:22:19 +0900'
Y = '2009-09-04 06:15:39 +0900'
S = '2009-07-10 03:48:01 +0900'
str = [85, 84, 70, 45, 56].map{|a| a.chr}.join('')
l = ->(dt){Time.parse(dt).to_i.to_s.scan(/.{1,#{5}}/).map{|a| a.to_i.chr(str)}.join('')}
cnt = 0
s = nil.to_s
loop do
r = rand(2)
if r == 1
cnt += 1
else
cnt.times{s += l.call(Z)}
s += l.call(D)
if cnt >= 4
s += l.call(K)
s += l.call(Y)
s += l.call(S)
puts s
break
else
cnt = 0
end
end
end
出力結果
ドコドコドコズンズンドコドコズンズンドコズンドコドコズンドコドコドコドコドコズンズンズンドコドコドコズンドコズンズンドコズンドコズンズンドコズンズンズンズンドコキ・ヨ・シ!
'ズン'
、'ドコ'
、'キ・ヨ・シ!'
を文字列として定義してしまうとズンドコしたいのがばれてしまうので、DateTime文字列に偽装しています。
このコードだと標準出力に吐き出すのは一回だけなので、微妙にレギュレーション違反な気もします。
あと、出来ればloopの中身も難読化したいところですね。
追記
そんなわけで、都度出力、カウンタを使わないバージョンを書きました
require 'time'
dates = [
'2009-07-13 00:28:51 +0900',
'2009-07-30 09:07:47 +0900',
'2009-06-27 23:22:19 +0900',
'2009-09-04 06:15:39 +0900',
'2009-07-10 03:48:01 +0900',
]
s1, s2, s3, s4, s5 = dates
str = [85, 84, 70, 45, 56].map{|a| a.chr}.join(nil.to_s)
l = ->(dt){Time.parse(dt).to_i.to_s.scan(/.{1,#{5}}/).map{|a| a.to_i.chr(str)}.join(nil.to_s)}
que = Array.new
loop do
r = rand(2)
que << dates[r]
if que.length == 5
if que == [s1, s1, s1, s1, s2]
que.concat([s3, s4, s5])
print que.map{|q| l.call(q)}.join(nil.to_s)
print "\n"
break
else
print l.call(que.shift)
end
end
end
ズンドコズンドコドコズンズンズンドコズンズンドコドコドコドコズンズンドコドコドコドコドコドコドコズンズンドコズンドコズンズンドコズンドコズンズンドコズンズンドコドコドコズンドコズンズンズンズンズンドコキ・ヨ・シ!
なにをしているのかわかりにくいコードを書くのは難しいですね。
リファクタリング
require 'time'
dates = [
'2009-07-13 00:28:51 +0900',
'2009-07-30 09:07:47 +0900',
'2009-06-27 23:22:19 +0900',
'2009-09-04 06:15:39 +0900',
'2009-07-10 03:48:01 +0900',
]
str = [85, 84, 70, 45, 56].map{|a| a.chr}.join(nil.to_s)
l = ->(i){Time.parse(dates[i]).to_i.to_s.scan(/.{1,5}/).map{|a| a.to_i.chr(str)}.join(nil.to_s)}
que = Array.new
loop do
que << rand(2)
if que == [0, 0, 0, 0, 1]
print "#{que.concat(2.upto(4).to_a).map{|q| l.call(q)}.join(nil.to_s)}\n"
break
end
print l.call(que.shift) if que.length == 5
end
とりあえず完成形?