LoginSignup
15
15

More than 5 years have passed since last update.

ステルスズンドコ

Last updated at Posted at 2016-03-16

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

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

とりあえず完成形?

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15