Skip to content

Instantly share code, notes, and snippets.

@vznvzn
Created November 1, 2018 02:38
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/7b6e9252665afc48660837ded7216ec1 to your computer and use it in GitHub Desktop.
Save vznvzn/7b6e9252665afc48660837ded7216ec1 to your computer and use it in GitHub Desktop.
def f2(n)
return n.odd? ? (n * 3 + 1) / 2 : n / 2
end
def count(n)
n1 = n
l = [n1]
while (n != 1)
n = f2(n)
l << n
end
cg = l.index{ |x| x < l[0] }
cm1 = (0...l.size).max_by { |x| l[x] }
return {
'l' => l,
'cg' => cg,
'cm1' => cm1,
}
end
def len01(ns)
nl = ns.length
l1 = ns.split(/0+/).map { |x| x.length }
l2 = ns.split(/1+/)[1..-1]
l2 = [''] if (l2.nil?)
l0 = l2.map { |x| x.length }
return l0, l1
end
def mx01(ns)
len01(ns).flatten.max
end
def mx2(ns)
l = len01(ns).flatten
return l.max * 10, l.map{ |x| x.to_f / ns.length }.max
end
def e(ns)
return len01(ns).flatten.size.to_f / ns.length
end
def d(s)
c = s.split('').select { |x| x == '1' }.size
d = c.to_f / s.length
return d
end
def sum(l)
t = 0.0
l.each { |x| t += x }
return t
end
def avgc(l2, c)
l1 = (0..(l2.size - c)).map { {} }
l2[0].keys.each \
{
|k|
t = sum(l2[0...c].map { |x| x[k] })
l1[0][k] = t / c
(c...l2.size).each \
{
|j|
t += l2[j][k] - l2[j - c][k]
l1[j - c + 1][k] = t / c
}
}
return l1
end
def avgr(l2, f)
a = l2[0]
l2.map \
{
|x|
x.keys.each \
{
|k|
a[k] = f * a[k] + (1 - f) * x[k]
}
a.dup
}
end
def read(fn)
return File.open(fn).readlines.map { |x| Kernel.eval(x) }.sort_by { |x| x['b'] }[-1]
end
def review(n)
$i = 0 if ($i.nil?)
l1 = count(n)['l']
l2 = l1.map \
{
|x|
ns = x.to_s(2)
$i += 1
mx2 = mx2(ns)
{
'i' => $i,
'd' => d(ns),
'e' => e(ns),
'mx01s' => mx2[1],
'mx01' => mx2[0],
'nw' => ns.length
}
}
# l2 =
$i += 200
return l2
end
def plot(l1, f, t, fn)
l = []
l1.each \
{
|x|
n = x['n']
l1 = review(n)
l1 = fn.call(l1) if (!fn.nil?)
l.concat(l1)
l.concat([{}])
}
f.puts('$dat << eof')
f.puts(l[0].keys.join("\t"))
l.each { |x| f.puts(x.values.join("\t")) }
f.puts('eof')
a = {'d' => 'axis x1y2', 'e' => 'axis x1y2', 'mx01s' => 'axis x1y2', 'nw' => 'lw 2'}
f.puts("set title '#{t}'; plot \\")
(l[0].keys - ['i']).each \
{
|x|
f.puts("$dat using (column('i')):(column('#{x}')) title '#{x}' with line #{a.fetch(x, '')},\\")
}
f.puts
f.puts('pause -1')
$stderr.puts(t)
$i = nil
end
fns = ['tmp/bitwise8/out/10/mixdb.txt',
'tmp/bitwise9/mixdb_a.txt',
'tmp/bitwise9/mixdb_mx.txt']
t = fns.join(', ')
l1 = fns.map { |fn| read(fn) }
f = File.open('gnuplot.cmd', 'w')
f.puts("set colors classic; set ytics nomirror; set y2tics; set y2range [0:1.0]; ")
plot(l1, f, t, nil)
plot(l1, f, 'avgc ' + t, lambda { |l| avgc(l, 50) })
plot(l1, f, 'avgc ' + t, lambda { |l| avgr(l, 0.99) })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment