# [PQ][Perl Quiz 2001-02-02 No.0064] alphabet = (0x21 .. 0x7E).map{|c|c.chr} tmp = alphabet.dup trh = {} until tmp.empty? pre = tmp.shift post, = tmp.slice!(rand tmp.size) trh[pre] = post trh[post] = pre end trh.each do |k,v| if trh[trh[k]] != k p [i, trh[k], trh[trh[k]]] raise end end trs = trh.indexes(*alphabet).to_s.gsub(/[\\\']/) { "\\#$&" } if alphabet.to_s.tr("\\x21-\\x7E", '#{trs}') == alphabet.to_s puts %Q{ARGF.each do |line| puts line.tr("\\x21-\\x7E", '#{trs}') end} else puts %Q{trh = #{trh.inspect} ARGF.each do |line| puts line.gsub("[\\x21-\\x7E]") {trh[$&]} end} end