-
Notifications
You must be signed in to change notification settings - Fork 68
/
CommDenom.rb
56 lines (40 loc) · 1014 Bytes
/
CommDenom.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
=begin
Common denominators
You will have a list of rationals in the form
{ {numer_1, denom_1} , ... {numer_n, denom_n} }
or
[ [numer_1, denom_1] , ... [numer_n, denom_n] ]
or
[ (numer_1, denom_1) , ... (numer_n, denom_n) ]
where all numbers are positive ints.
You have to produce a result in the form
(N_1, D) ... (N_n, D)
or
[ [N_1, D] ... [N_n, D] ]
or
[ (N_1', D) , ... (N_n, D) ]
or
{{N_1, D} ... {N_n, D}}
depending on the language (See Example tests)
in which D is as small as possible and
N_1/D == numer_1/denom_1 ... N_n/D == numer_n,/denom_n.
Example:
convertFracs [(1, 2), (1, 3), (1, 4)] `shouldBe` [(6, 12), (4, 12), (3, 12)]
=end
# My Solution
def convertFracts(lst)
cm = 1
lst.each_with_index do |x,i|
cm = cm.lcm(lst[i][1])
end
lst.each_with_index do |x, i|
lst[i][0] = cm/(lst[i][1])*(lst[i][0])
lst[i][1] = cm
end
lst
end
# Better Solution
def convertFracts(lst)
lcm = lst.reduce(1) { |x,y| x.lcm(y[1]) }
lst.map { |x| [lcm/x[1]*x[0], lcm] }
end