Skip to content

Instantly share code, notes, and snippets.

@vznvzn
Created February 21, 2019 02:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vznvzn/62b256eb508c80e45ce73e9aaa176cd9 to your computer and use it in GitHub Desktop.
Save vznvzn/62b256eb508c80e45ce73e9aaa176cd9 to your computer and use it in GitHub Desktop.
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 e(ns)
return len01(ns).flatten.size.to_f / ns.length
end
def avg(l)
l.inject { |t, x| t + x }.to_f / l.size
end
def seq(n)
n1 = n
l = [n1]
while (n != 1)
n = f2(n)
l << n
end
return l
end
f = File.open('gnuplot.cmd', 'w')
f.puts('$dat << eof')
f.puts(['d1', 'd2'].join("\t"))
w = 200
c = 100
c.times \
{
|x|
n = terras121(dense(w, x.to_f / (c - 1)))
l = seq(n)
a = avg(l[0...c].map { |x| d(x.to_s(2)) })
b = avg(l[c..-1].map { |x| d(x.to_s(2)) })
f.puts([a, b].join("\t"))
}
f.puts('eof')
f.puts("set colors classic; plot $dat using (column('d1')) with line lw 2, '' using (column('d2')) with line lw 2, 0.5 dt 3")
f.close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment