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