#!/usr/bin/env ruby
#
# Copyright(C) Simon Howard
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
#

def get_distr(word)
    dist = {}

    chars = word.split(//)

    chars.each do |c|
        if dist[c] == nil
            dist[c] = 1
        else
            dist[c] += 1
        end
    end

    dist
end

def get_allwords
    result = {}
    File.open("/usr/share/dict/words") do |file|
        file.each_line do |s|
            word = s.chomp
            result[word] = get_distr(word)
        end
    end
    result
end

def unscramble(scrambled)
    scrambled = scrambled.gsub(/\W/, '')
    scrambled_dist = get_distr(scrambled)

    $allwords.each_pair do |word, dist|
        if scrambled_dist == dist
            puts "#{scrambled} -> #{word}"
        end
    end
end

puts "Loading..."
$allwords = get_allwords

loop do
    puts "Enter scrambled word"
    scrambled = gets()
    unscramble(scrambled)
end


