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
|