ステルスズンドコ

  • 13
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

最近はやっているらしいズンドコキヨシ、ズンドコしているような形跡を見せずにズンドコしたいと思って書いてみました。

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

とりあえず完成形?