Skip to content

Commit 9986cca

Browse files
committed
exercism 45-50
1 parent ba8c167 commit 9986cca

File tree

6 files changed

+121
-0
lines changed

6 files changed

+121
-0
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,11 @@ solution of many challenges of [Leetcode](https://leetcode.com/), [Exercism](htt
263263
43. [Anagram](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/anagram.rb)
264264
44. [Spiral Matrix](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/spiral_matrix.rb)
265265
45. [Sum of Multiples](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/sum_of_multiples.rb)
266+
46. [Transpose](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/transpose.rb)
267+
47. [Armstrong Numbers](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/armstrong_numbers.rb)
268+
48. [Flatten Array](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/flatten_array.rb)
269+
49. [Phone Number](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/phone_number.rb)
270+
50. [Grains](https://github.com/kumar91gopi/Algorithms-and-Data-Structures-in-Ruby/blob/master/exercism/grains.rb)
266271

267272
<a name="leetcode"/>
268273

exercism/armstrong_numbers.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#Problem : https://exercism.org/tracks/ruby/exercises/armstrong-numbers
2+
3+
#Solution
4+
class ArmstrongNumbers
5+
def self.include?(num)
6+
return true if num%10==num
7+
n=number_of_digits(num)
8+
sum= sum_of_pow(num,n)
9+
if sum==num
10+
return true
11+
else
12+
return false
13+
end
14+
end
15+
16+
def self.number_of_digits(i)
17+
count =0
18+
until i==0
19+
count +=1
20+
i/=10
21+
end
22+
count
23+
end
24+
25+
def self.sum_of_pow(number,number_of_digits)
26+
sum=0
27+
for i in 0..number_of_digits
28+
j=number%10
29+
number/=10
30+
sum+=(j**number_of_digits)
31+
end
32+
sum
33+
end
34+
end
35+
36+
#Solution 2

exercism/flatten_array.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#Problem: https://exercism.org/tracks/ruby/exercises/flatten-array
2+
3+
#Solution (idiomatic)
4+
class FlattenArray
5+
def self.flatten(arr)
6+
arr.flatten.compact
7+
end
8+
end
9+
10+
#Solution 2 (recursive)
11+
class FlattenArray
12+
def self.flatten(arr)
13+
result = []
14+
arr.each do |val|
15+
if val.is_a?(Array)
16+
flat_val = flatten(val)
17+
result+=flat_val
18+
else
19+
result.push(val) unless val.nil?
20+
end
21+
end
22+
result
23+
end
24+
end

exercism/grains.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#Problem: https://exercism.org/tracks/ruby/exercises/grains
2+
3+
#Solution
4+
class Grains
5+
def self.square(n)
6+
raise ArgumentError if n<=0 or n>64
7+
2**(n-1)
8+
end
9+
10+
def self.total
11+
(2**(64))-1
12+
end
13+
end

exercism/phone_number.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#Problem: https://exercism.org/tracks/ruby/exercises/phone-number
2+
3+
#Solution
4+
class PhoneNumber
5+
def self.clean(number)
6+
cleaned_num = number.gsub(/[\D]/,"")
7+
num_len = cleaned_num.length
8+
return nil if num_len<10 or num_len>11
9+
if num_len==11
10+
return nil unless cleaned_num[0]=="1"
11+
cleaned_num = cleaned_num[1..-1]
12+
end
13+
return nil unless self.valid_area_and_exchange_code(cleaned_num)
14+
cleaned_num
15+
end
16+
17+
def self.valid_area_and_exchange_code(num)
18+
num[0].to_i >=2 and num[0].to_i <=9 and num[3].to_i >=2 and num[3].to_i <=9
19+
end
20+
end
21+
22+
#Solution 2(Idiomatic)
23+
class PhoneNumber
24+
VALID_PHONE_NUMBER = /^([2-9]\d\d){2}\d{4}$/
25+
def self.clean(number)
26+
numbers = number.gsub(/\D/, "").sub(/^1/, "")
27+
numbers[VALID_PHONE_NUMBER]
28+
end
29+
end
30+

exercism/transpose.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#Problem: https://exercism.org/tracks/ruby/exercises/transpose
2+
3+
#Solution
4+
class Transpose
5+
def self.transpose(input)
6+
strings = input.gsub(' ', '_').split("\n").map(&:chars)
7+
max_length = strings.map(&:length).max
8+
strings.map { |line| line + ([' '] * (max_length - line.length)) }
9+
.transpose
10+
.map { |line| line.join.rstrip.gsub('_', ' ') }
11+
.join("\n")
12+
end
13+
end

0 commit comments

Comments
 (0)