aboutsummaryrefslogtreecommitdiff
path: root/challenge-082/roger-bell-west/ruby/ch-2.rb
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-082/roger-bell-west/ruby/ch-2.rb')
-rwxr-xr-xchallenge-082/roger-bell-west/ruby/ch-2.rb45
1 files changed, 45 insertions, 0 deletions
diff --git a/challenge-082/roger-bell-west/ruby/ch-2.rb b/challenge-082/roger-bell-west/ruby/ch-2.rb
new file mode 100755
index 0000000000..067bddb305
--- /dev/null
+++ b/challenge-082/roger-bell-west/ruby/ch-2.rb
@@ -0,0 +1,45 @@
+#! /usr/bin/ruby
+
+def isinterleave(a,b,c)
+ l=[a,b,c].map{|x| x.length}
+ buf=[[0,0,0]]
+ while (!buf.empty?)
+ n=buf.pop
+ if (n[2] >= l[2])
+ return 1
+ end
+ if ((n[0] < l[0]) and (a[n[0]] == c[n[2]]))
+ buf.push([n[0]+1,n[1],n[2]+1])
+ end
+ if ((n[1] < l[1]) and (b[n[1]] == c[n[2]]))
+ buf.push([n[0],n[1]+1,n[2]+1])
+ end
+ end
+ return 0
+end
+
+require 'test/unit'
+
+class TestInterleave < Test::Unit::TestCase
+
+ def test_ex1
+ assert_equal(isinterleave('XY','X','XXY'),1)
+ end
+
+ def test_ex2
+ assert_equal(isinterleave('XXY','XXZ','XXXXZY'),1)
+ end
+
+ def test_ex3
+ assert_equal(isinterleave('YX','X','XXY'),0)
+ end
+
+ def test_ex4
+ assert_equal(isinterleave('ACF','BDEG','ABCDEFG'),1)
+ end
+
+ def test_ex5
+ assert_equal(isinterleave('ACF','BDGE','ABCDEFG'),0)
+ end
+
+end