Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/ruby1.8
- def f(n)
- n2 = n
- s = ''
- while (n >= n2)
- p = n % 2
- n = (p == 0) ? n / 2 : n * 3 + 1
- s << p.to_s
- end
- return s
- end
- def match(s, l1, l2)
- j = 0
- j += 1 while (j < s.length && s[j, 1] == '0')
- return [j, 0, s[0...j], s[j..-1]] if (j > 0)
- m = [0, nil, '', s]
- l1.each_with_index \
- {
- |s2, i|
- j = 0
- j += 1 while (j < s.length && j < s2.length && s[j, 1] == s2[j, 1])
- m = [j, l2[i], s[0...j], s[j..-1]] if (j > m[0])
- }
- return m
- end
- n = 3
- l1 = []
- l2 = []
- 5000.times \
- {
- s0 = s = f(n)
- l = []
- l3 = []
- while (s != '')
- j, x, s1, s2 = match(s, l1, l2)
- if (s1 == '') then
- l << s2
- l3 << -1
- break
- end
- l << s1
- l3 << x
- s = s2
- end
- puts([n, l3[0], l3.size].join("\t"))
- # p([n, s0, l3, l])
- raise if (l.join != s0)
- l1 << s0
- l2 << n
- n += 4
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement