Sha256: a7103ef72fe67e2bef7ef1815700973066cea7be15fadcb3dd8432ddb50ecbcf
Contents?: true
Size: 1.81 KB
Versions: 2
Compression:
Stored size: 1.81 KB
Contents
# frozen_string_literal: true module WordSearch class Generator class Base include ActiveModel::Validations attr_accessor :plane, :word_bank, :used_coordinates, :positions delegate :to_s, :pto_s, :print, :catalog, to: :plane def directions raise NotImplementedError end def initialize(plane, word_bank) @plane = plane @word_bank = word_bank @used_coordinates = [] @positions = {} end def perform word_bank.each do |word| @positions[word] = place_word(word) end end def write_solution file_name = "solution_#{plane.digest}" File.open(file_name, "w") do |f| solution = positions.map do |_word, letter_positions| letter_positions.map do |letter, position| "#{letter.split('-')[0]} #{position.values}" end.join("\n") end.join("\n---\n") f.write solution end end private def place_word(word) placed = false until placed || used_coordinates.uniq.count == plane.total_points placed = position_word(word) end word_bank.errors.add(word, "cannot be placed") if placed.blank? placed end def position_word(word) used_coordinates << (coordinate = random_point) position = false directions.find do |direction| dimension = plane.two_dimensional? ? TwoDimensional : ThreeDimensional position = dimension::PositionWord.new( plane, word, direction, coordinate ).perform end position end def random(number) SecureRandom.random_number number end def random_point raise NotImplementedError end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
word_search-1.0.1 | lib/word_search/generator/base.rb |
word_search-1.0.0 | lib/word_search/generator/base.rb |