Class: Pascoale::Edits

Inherits:
Object
  • Object
show all
Defined in:
lib/pascoale/edits.rb

Constant Summary collapse

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

Instance Method Summary collapse

Constructor Details

#initialize(word) ⇒ Edits

Returns a new instance of Edits.



4
5
6
7
8
# File 'lib/pascoale/edits.rb', line 4

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

Instance Method Details

#deletionsObject



10
11
12
13
14
# File 'lib/pascoale/edits.rb', line 10

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

#editionsObject



34
35
36
# File 'lib/pascoale/edits.rb', line 34

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

#editions2Object



38
39
40
41
42
# File 'lib/pascoale/edits.rb', line 38

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

#insertionsObject



28
29
30
31
32
# File 'lib/pascoale/edits.rb', line 28

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

#substitutionsObject



22
23
24
25
26
# File 'lib/pascoale/edits.rb', line 22

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

#transpositionsObject



16
17
18
19
20
# File 'lib/pascoale/edits.rb', line 16

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