Instantly share code, notes, and snippets.

# vznvzn/construct7.rb Created Feb 7, 2019

 def f2(n) return n.odd? ? (n * 3 + 1) / 2 : n / 2 end def adj(x, m, n, s2, p2, p, x3) s2.replace(p[0...x] + (x3 % 2).to_s) m = (s2[x, 1] == p[x, 1]) n = p2.reverse.to_i(2) p2[x, 1] = m ? '11' : '01' return m, n, x3 end def terras121(p) p2 = ['01', '11'][p[0, 1].to_i] n = 1 n3 = 0 m = p2 == '11' x3 = (p2.reverse.to_i(2)) >> 1 (1...p.length).each \ { |x| if (!m) ns = n.to_s(2) ns[0, 1] = '' m1 = x3 - 3**n3 n1 = f2(m1) end n3 = p[0...x].split('').select { |z| z == '1' }.size s2 = '' m, n, x3 = adj(x, m, n, s2, p2, p, m ? (f2(x3) + 3**n3) : (n1 + 3**n3)) } n = p2.reverse.to_i(2) return n end def dense(w, d) w2 = w - 1 a = (0...w2).to_a s = '0' * w2 (1..(d * w - 1)).map { a.delete_at(rand(a.size)) }.each { |x| s[x, 1] = '1' } return ('1' + s) end def d(s) c = s.split('').select { |x| x == '1' }.size d = c.to_f / s.length return d end def len(ns, p) l = ns.split(p) l = [''] if (l.nil? || l.empty?) return l.map { |x| x.length } end def len01(ns) return len(ns, /0+/), len(ns, /1+/) end def dataset() l = [] t = 200 t.times \ { |c| d = c.to_f / (t - 1) ps = dense(1000, d) n = terras121(ps) ns = n.to_s(2) l1, l0 = len01(ns) l1.sort! mx = l1.max l1.each_with_index \ { |x, j| puts([j.to_f / l1.size, x.to_f / mx, c].join("\t")) } puts } end dataset()