Advertisement
Guest User

Untitled

a guest
Apr 18th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #!/usr/bin/ruby1.8
  2.  
  3.  
  4.  
  5.  
  6. def f(n)
  7.  
  8. n2 = n
  9. s = ''
  10. while (n >= n2)
  11.  
  12. p = n % 2
  13. n = (p == 0) ? n / 2 : n * 3 + 1
  14. s << p.to_s
  15.  
  16. end
  17. return s
  18.  
  19. end
  20.  
  21. def match(s, l1, l2)
  22.  
  23. j = 0
  24. j += 1 while (j < s.length && s[j, 1] == '0')
  25. return [j, 0, s[0...j], s[j..-1]] if (j > 0)
  26.  
  27. m = [0, nil, '', s]
  28. l1.each_with_index \
  29. {
  30. |s2, i|
  31. j = 0
  32. j += 1 while (j < s.length && j < s2.length && s[j, 1] == s2[j, 1])
  33. m = [j, l2[i], s[0...j], s[j..-1]] if (j > m[0])
  34. }
  35.  
  36. return m
  37.  
  38. end
  39.  
  40.  
  41. n = 3
  42. l1 = []
  43. l2 = []
  44. 5000.times \
  45. {
  46. s0 = s = f(n)
  47.  
  48. l = []
  49. l3 = []
  50. while (s != '')
  51. j, x, s1, s2 = match(s, l1, l2)
  52. if (s1 == '') then
  53. l << s2
  54. l3 << -1
  55. break
  56. end
  57. l << s1
  58. l3 << x
  59. s = s2
  60. end
  61. puts([n, l3[0], l3.size].join("\t"))
  62.  
  63. # p([n, s0, l3, l])
  64. raise if (l.join != s0)
  65.  
  66. l1 << s0
  67. l2 << n
  68. n += 4
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement