Sha256: 03d9857cb0ef76985eb93e1ea328bf2047890d4a108e44fbfee1b41dbbf49c5c

Contents?: true

Size: 912 Bytes

Versions: 6

Compression:

Stored size: 912 Bytes

Contents

class Pascoale::Edits
  LETTERS = [' '] + Pascoale::Constants::LETTERS.scan(/./)

  def initialize(word)
    @splits = (0..(word.size)).map do |i|
      [word[0, i].to_s, word[(i)..-1]]
    end
  end

  def deletions
    @splits.map do |(a, b)|
      a + b[1..-1] if b.size > 0
    end.compact
  end

  def transpositions
    @splits.map do |(a, b)|
      a + b[1] + b[0] + b[2..-1] if b.size > 1
    end.compact
  end

  def substitutions
    LETTERS.product(@splits).map do |(letter, (a, b))|
      (a + letter + b[1..-1]).strip if b.size > 0
    end.compact
  end

  def insertions
    LETTERS.product(@splits).map do |(letter, (a, b))|
      (a + letter + b).strip
    end
  end

  def editions
    Set.new(deletions + transpositions + substitutions + insertions)
  end

  def editions2
    editions.each_with_object(Set.new) do |it, result|
      result.merge(self.class.new(it).editions)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
pascoale-0.3.2 lib/pascoale/edits.rb
pascoale-0.3.1 lib/pascoale/edits.rb
pascoale-0.3.0 lib/pascoale/edits.rb
pascoale-0.2.1 lib/pascoale/edits.rb
pascoale-0.2.0 lib/pascoale/edits.rb
pascoale-0.1.0 lib/pascoale/edits.rb