Guest User

Untitled

a guest
May 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. def f1(n)
  2. n = (n * 3 + 1) / 2 while (n.odd?)
  3. n /= 2 while (n.even?)
  4. return n
  5. end
  6.  
  7. def f2(n)
  8. return n.odd? ? (n * 3 + 1) / 2 : n / 2
  9.  
  10. end
  11.  
  12. def avg(l)
  13. return 0 if (l.empty?)
  14. t = 0
  15. l.each { |x| t += x }
  16. return t.to_f / l.size
  17. end
  18.  
  19. def total(l)
  20. t = 0
  21. l.each { |x| t += x }
  22. return t
  23. end
  24.  
  25. def h(n, l0, l1)
  26. ns = n.to_s(2)
  27. nl = ns.length
  28. l1.concat(ns.split(/0+/).map { |x| x.length })
  29. l0.concat([ns.split(/1+/)[1..-1]].compact.flatten.map { |x| x.length })
  30.  
  31. end
  32.  
  33.  
  34. def count(x)
  35.  
  36.  
  37. n = n1 = x['n']
  38. l = [n]
  39. while (n >= n1 && n != 1)
  40. n = {'packed' => true, 'unpacked' => false}[$w] ? f1(n) : f2(n)
  41. l << n
  42. end
  43. cm = (0...l.size).max_by { |x| l[x] }
  44.  
  45. l0 = []
  46. l1 = []
  47.  
  48. l[0..cm].each \
  49. {
  50. |n|
  51. h(n, l0, l1)
  52. }
  53. return l0, l1
  54. end
  55.  
  56.  
  57.  
  58. # $w = 'packed'
  59. $w = 'unpacked'
  60.  
  61. l = File.open('tmp/mixdb.txt').readlines.map { |x| Kernel.eval(x) }
  62.  
  63. j = 0
  64. at = {}
  65. l = l.sort_by { |x| x['cm'] }.reverse
  66.  
  67.  
  68. c = 500
  69.  
  70. c.times \
  71. {
  72. |i|
  73.  
  74. j = (i.to_f / (c - 1) * (l.size - 1)).to_i
  75. l0, l1 = count(l[j])
  76.  
  77. l1.sort!
  78. l1 = l1.select { |x| x >= 9 }
  79.  
  80. l1.each_with_index \
  81. {
  82. |y, x|
  83. puts([x.to_f / l1.size, y, c - i].join("\t"))
  84. }
  85. puts
  86. }
Add Comment
Please, Sign In to add comment