Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 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. m = mx.to_s(2).length.to_f / n.to_s(2).length
  34. return {'by' => [-m, d], 'm' => m, 'ls' => l.size}
  35. end
  36.  
  37. def hard(c)
  38.  
  39.  
  40. l = [{'n' => 1, 'p' =>0}.merge(mx(1))]
  41.  
  42. loop \
  43. {
  44. l.sort_by! { |x| x['by'] }
  45.  
  46. return l[l.size / 2] if (l.size == c)
  47.  
  48. x = l.delete_at(rand([l.size, 100].min))
  49.  
  50.  
  51. p = x['p'] + 1
  52. n = x['n']
  53.  
  54. x1 = x.dup
  55. x1['p'] = p
  56. l.push(x1)
  57.  
  58. x2 = {}
  59. n |= (1 << p)
  60.  
  61. x2['n'] = n
  62. x2['p'] = p
  63. x2.merge!(mx(n))
  64. l.push(x2)
  65.  
  66. puts([l.size, r(x2['m']), x2['n'].to_s(2).length, x2['ls']].join("\t"))
  67. $stdout.flush
  68. }
  69.  
  70.  
  71. end
  72.  
  73. z = hard(10000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement