Report abuse

class Array
  def random_element
    self[ rand( self.size ) ]
  end
end
def out str, sleeptime=0
  $stdout.print str
  $stdout.flush
  sleep sleeptime unless sleeptime.zero?
end

text = ARGV.join(" ") + " "
so_far = ""
text.size.times do |i|
  lower = ?\s
  upper = ?\z
  loop do  
    b = text[ i ]
    c = [*lower..upper].random_element
    out c.chr, 0.1
    out "\010"
    lower = c if c < b 
    upper = c if c > b
    next unless c == b
    out "\010" * so_far.size
    out so_far
    so_far << c.chr
    break
  end
end