Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. def f1(n)
  2. n = (n * 3 + 1) / 2 while (n % 2 == 1)
  3. n /= 2 while (n % 2 == 0)
  4. return n
  5. end
  6.  
  7. def seq2(n)
  8. l = [n]
  9. n1 = n
  10. begin
  11. l << (n = f1(n))
  12. end while (n >= n1 && n != 1)
  13. return l
  14. end
  15.  
  16. def d(s)
  17. c = s.split('').select { |x| x == '1' }.size
  18. d = c.to_f / s.length
  19. return (0.5 - d).abs
  20.  
  21. end
  22.  
  23. def r(x)
  24. return sprintf("%.3f", x).to_f
  25. end
  26.  
  27. def mx(n)
  28. l = seq2(n)
  29.  
  30. d = d(n.to_s)
  31.  
  32. mx = l.max
  33. ns = n.to_s(2).length
  34.  
  35. v = mx.to_s(2).length.to_f / ns
  36. h = l.size.to_f / ns
  37.  
  38. m = l.map { |x| x.to_s(2).length }.inject(0) { |t, x| t + x }
  39. mr = m.to_f / ns
  40.  
  41. return {'by' => [-mr, d], 'ns' => ns, 'ls' => l.size,
  42. 'v' => r(v), 'h' => r(l.size.to_f / ns),
  43. 'm' => m, 'mr' => r(mr)}
  44. end
  45.  
  46. def fmt(x)
  47.  
  48. x = x.dup
  49. ['n', 'p', 'by'].each { |k| x.delete(k) }
  50. return x.to_a
  51. end
  52.  
  53. def hard(c)
  54.  
  55.  
  56. l = [{'n' => 1, 'p' =>0}.merge(mx(1))]
  57.  
  58. loop \
  59. {
  60. l.sort_by! { |x| x['by'] }
  61.  
  62. return if (l.size == c)
  63.  
  64. x = l.delete_at(rand([l.size, 100].min))
  65.  
  66.  
  67. p = x['p'] + 1
  68. n = x['n']
  69.  
  70. x1 = x.dup
  71. x1['p'] = p
  72. l.push(x1)
  73.  
  74. x2 = {}
  75. n |= (1 << p)
  76.  
  77. x2['n'] = n
  78. x2['p'] = p
  79. x2.merge!(mx(n))
  80. l.push(x2)
  81.  
  82. puts(([l.size] + fmt(x2)).join("\t"))
  83. $stdout.flush
  84. }
  85.  
  86.  
  87. end
  88.  
  89. z = hard(10000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement