Guest User

Untitled

a guest
Jul 17th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 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 f3(n)
  13. return n.odd? ? (n * 3 + 1) : n / 2
  14.  
  15. end
  16.  
  17.  
  18. def d(s)
  19. c = s.split('').select { |x| x == '1' }.size
  20. d = c.to_f / s.length
  21. return d
  22.  
  23. end
  24.  
  25. def read(fn)
  26. l = (f = File.open(fn)).readlines.map { |x| Kernel.eval(x) }
  27. f.close
  28. $stderr.puts("#{fn} #{l.size}")
  29. return l
  30. end
  31.  
  32. def dist_j(r = nil)
  33. l = $db.nil? ? ($db = read($fndb)) : $db
  34.  
  35. z1 = rand(l.size)
  36. ns = l[z1]['n'].to_s(2)
  37.  
  38. r = rand(ns.length) if (r.nil?)
  39.  
  40. ns[r, 1] = (ns[r, 1].to_i ^ 1).to_s
  41. n = ns.to_i(2)
  42. return n
  43.  
  44. end
  45.  
  46. def disordered(n)
  47.  
  48.  
  49. n1 = n
  50. l = [n]
  51. l1 = []
  52. i = nil
  53. while (n >= n1 && n != 1)
  54. n = $f.call(n)
  55. l << n
  56.  
  57. next if (!i.nil?)
  58.  
  59. l1 << d(n.to_s(2)) - 0.5
  60. l1.shift if (l1.size == 3)
  61. i = l.size - 1 if (i.nil? && l1.size == 2 && l1[0] * l1[1] < 0)
  62. end
  63. cm = (0...l.size).max_by { |x| l[x] }
  64. return if (i.nil?)
  65.  
  66. return {'n2' => l[i], 'i' => i}
  67. end
  68.  
  69. def advc(n)
  70. n1 = n
  71.  
  72. l = [n]
  73. cg = nil
  74. while (n != 1)
  75.  
  76. n = $f.call(n)
  77. l << n
  78.  
  79. cg = l.size - 1 if (cg.nil? && n < n1)
  80. end
  81. cg = l.size - 1 if (cg.nil?)
  82.  
  83. cma = (0..cg).max_by { |x| l[x] }
  84.  
  85. return l[0..cma]
  86. end
  87.  
  88. def n1()
  89.  
  90. loop \
  91. {
  92. n = dist_j()
  93. x = disordered(n)
  94. next if (x.nil?)
  95. n = x['n2']
  96. n /= 2 while (n.even?)
  97. return n
  98. }
  99.  
  100. end
  101.  
  102. def run()
  103.  
  104. $fndb = 'mix19/mixdb.txt'
  105.  
  106. f = File.open('gnuplot.cmd', 'w')
  107.  
  108.  
  109. f.puts('set y2tics; set ytics nomirror; unset key; set colors classic; plot \\')
  110.  
  111. f.puts("'-' using 1:2:3 with line lw 6 linecolor palette axes x2y2,\\")
  112. 1.times { |x| f.puts("'-' using 1:2:3 title 'fn#{x + 1}' with line lw 1 linecolor palette,\\") }
  113. f.puts
  114.  
  115. tf = 1
  116.  
  117. $f = [lambda { |x| f1(x) }, lambda { |x| f2(x) }, lambda { |x| f3(x) }][tf]
  118.  
  119. l = (1..1000).map { advc(n1()) }.uniq
  120. $stderr.puts({'ls' => l.size}.inspect)
  121.  
  122. l.sort_by! { |x| x.size }
  123.  
  124. n = 200
  125. r = -n..-1
  126.  
  127. l[r].reverse.each_with_index { |x, i| f.puts([i, x.size, n - i].join("\t")) }
  128. f.puts('eof')
  129.  
  130. l[r].reverse.each_with_index \
  131. {
  132. |l1, c|
  133.  
  134. w0 = l1[0].to_s(2).length
  135.  
  136. l1.each_with_index \
  137. {
  138. |x, j|
  139. wr2 = x.to_s(2).length.to_f / w0
  140. wr2b = Math.log(x) / Math.log(l1[0])
  141. f.puts([j.to_f, wr2b, n - c].join("\t"))
  142. }
  143. f.puts
  144. }
  145. f.puts('eof')
  146.  
  147. f.close
  148.  
  149. end
  150.  
  151. run()
Add Comment
Please, Sign In to add comment