aboutsummaryrefslogtreecommitdiff
path: root/challenge-081/roger-bell-west/ruby/ch-1.rb
blob: bbaa1d140b0419b1c774f0d27aafbf41d7bacd50 (plain)
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
#! /usr/bin/ruby

require 'set'

def cbs(*strs)
  bss=strs.map {|x| bs(x)}
  r=Set.new
  f=false
  for bsa in bss
    if f
      r=r & Set.new(bsa)
    else
      r=Set.new(bsa)
      f=true
    end
  end
  return r.sort
end

def bs(str)
  sl=str.length
  f=Hash.new
  1.upto(Math.sqrt(sl).floor) do |n|
    p=sl/n
    if p == p.floor
      f[n]=p
      f[p]=n
    end
  end
  out=Array.new
  for l in f.sort_by {|n, p| n}
    q=str[0,l[0]]
    if q * l[1] == str
      out.push(q)
    end
  end
  return out
end
  
require 'test/unit'

class TestCbs < Test::Unit::TestCase

    def test_bs1
      assert_equal(['abcd','abcdabcd'],bs('abcdabcd'))
    end

    def test_bs2
      assert_equal(['a','aaa'],bs('aaa'))
    end

    def test_ex1
      assert_equal(['abcd','abcdabcd'],cbs('abcdabcd','abcdabcdabcdabcd'))
    end

    def test_ex2
      assert_equal(['a',],cbs('aaa','aa'))
    end

end