-
Notifications
You must be signed in to change notification settings - Fork 68
/
Worda10n.rb
66 lines (56 loc) · 1.95 KB
/
Worda10n.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
=begin
The word i18n is a common abbreviation of internationalization the developer
community use instead of typing the whole word and trying to spell it correctly.
Similarly, a11y is an abbreviation of accessibility.
Write a function that takes a string and turns any and all "words" (see below)
within that string of length 4 or greater into an abbreviation following the
same rules.
Notes:
A "word" is a sequence of alphabetical characters. By this definition, any other
character like a space or hyphen (eg. "elephant-ride") will split up a series of
letters into two words (eg. "elephant" and "ride").
The abbreviated version of the word should have the first letter, then the
number of removed characters, then the last letter
(eg. "elephant ride" => "e6t r2e").
Example:
abbreviate("elephant-rides are really fun!")
// ^^^^^^^^*^^^^^*^^^*^^^^^^*^^^*
// words (^): "elephant" "rides" "are" "really" "fun"
// 123456 123 1 1234 1
// ignore short words: X X
// abbreviate: "e6t" "r3s" "are" "r4y" "fun"
// all non-word characters (*) remain in place
// "-" " " " " " " "!"
=== "e6t-r3s are r4y fun!"
=end
# My Solution
class Abbreviator
def self.abbreviate(string)
string=string.split(" ")
string = string.map do |x|
i = ""
x.split("").each {|y| i=y if y =~ /\W/}
i != "" ? (a, b = x.split("#{i}")) : (a = x ; b = "")
a.length >= 4 ? a="#{a[0]}#{a.length-2}#{a[-1]}" : a
if b != "" && b != nil
b.length >= 4 ? b="#{b[0]}#{b.length-2}#{b[-1]}" : b
end
"#{a}#{i}#{b}"
end
string.join(" ")
end
end
# Better Solution
class Abbreviator
def self.abbreviate(string)
string.gsub /(\w)(\w+{2})(\w)/ do |word|
"#{$1}#{word.length - 2}#{$3}"
end
end
end
# Another Solution
class Abbreviator
def self.abbreviate(string)
string.gsub(/(\w)(\w{2,})(\w)/i) { "#{$1}#{$2.size}#{$3}" }
end
end