#!/usr/bin/ruby
# 
# Quick hack to rewrite text, preserving first and last letter of each 
# word but messing up the middle of the word. This version just reverses
# the middle, it should really randomise it.
#
# author: danbri@w3.org
# $Id: rejig.rb,v 1.3 2003/09/12 22:41:30 danbri Exp $

# http://www.w3.org/People/Bos/Shuffle/shuffle.c
# <DanC> in python: s[0] + permute(s[1:-1]) + s[-1]

# thanks to Ged and oGMo from #ruby-lang
#

# ged's:
class String
    def permute!
        self.length.times do |i|
            p = rand(self.length - 1)
            self[i], self[p] = self[p], self[i]
        end
        return self
    end
    def permute
        self.dup.permute!
    end
end

# ogmo's:
class String
  def strfry
    a = (0..self.size).to_a
    self.gsub(/./) { self[a.delete_at((rand*a.size).to_i),1]; }
  end
end

# and a 3rd version :)
#<fxn> class Array
#<fxn>   def shuffle
#<fxn>     each_index {|j| i = rand(size-j); self[j], self[j+i] = self[j+i], self[j]}
#<fxn>   end
#<fxn> end
#<fxn> puts "foobarbaz".split(//).shuffle.join('')


def rejig(text)
  return '' if text==nil
  return text.permute!
##  return text.reverse
end

file = ARGV[0]
file='text.txt' if file==nil

#puts file;
text = File.new(file).read
puts text+"\n\n"

words = text.split
new=[]
words.each do |word|
#  puts "Input: #{word}"
  word =~ /^([^\w]*)(\w)(.*)(\w)([^\w]*)$/
  p1=$1
  first=$2
  middle=$3
  last=$4
  punc=$5
# puts "word: #{word} First: #{first} middle: #{middle} last: #{last}\n\n"
  jumble=rejig(middle)
#  puts "NEW is: #{p1}#{first}#{jumble}#{last}#{punc}"
  new.push "#{p1}#{first}#{jumble}#{last}#{punc}"
end


puts new.join(' ')


