
require 'ostruct'

module Jme
  def self.parse_silly_format(path)
    # read input file
    data = File.readlines(path).map { |line| line.chomp }
  
    # declare and popultae return struct
    r = OpenStruct.new
    r.num_terms, r.terms, r.num_vars, r.vars, r.num_lines, *r.lines = data
  
    # convert count values to ints
    keys = %w{terms vars lines}.map { |v| "num_#{v}".intern }
    keys.each { |v| r.send("#{v}=", r.send(v).to_i) }
  
    # split terms and vars
    %w{terms vars}.each { |v| r.send("#{v}=", r.send(v).split(//)) }

    # create new magical hash for lines and populate it
    lh = Hash.new { |h, k| h[k] = [] }
    r.lines = r.lines.inject(lh) { |h, l| h[l[0, 1]] << l[1..-1]; h }
  
    # return results
    r 
  end
end

