Skip to content

Instantly share code, notes, and snippets.

@eam
Created December 14, 2015 20:30
Show Gist options
  • Save eam/4f80d5ecb0ce36516edc to your computer and use it in GitHub Desktop.
Save eam/4f80d5ecb0ce36516edc to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
$elements = {
:H => { :string => "22", :evolution => [:H], },
:He => { :string => "13112221133211322112211213322112", :evolution => [:Hf,:Pa,:H,:Ca,:Li], },
:Li => { :string => "312211322212221121123222112", :evolution => [:He], },
:Be => { :string => "111312211312113221133211322112211213322112", :evolution => [:Ge,:Ca,:Li], },
:B => { :string => "1321132122211322212221121123222112", :evolution => [:Be], },
:C => { :string => "3113112211322112211213322112", :evolution => [:B], },
:N => { :string => "111312212221121123222112", :evolution => [:C], },
:O => { :string => "132112211213322112", :evolution => [:N], },
:F => { :string => "31121123222112", :evolution => [:O], },
:Ne => { :string => "111213322112", :evolution => [:F], },
:Na => { :string => "123222112", :evolution => [:Ne], },
:Mg => { :string => "3113322112", :evolution => [:Pm,:Na], },
:Al => { :string => "1113222112", :evolution => [:Mg], },
:Si => { :string => "1322112", :evolution => [:Al], },
:P => { :string => "311311222112", :evolution => [:Ho,:Si], },
:S => { :string => "1113122112", :evolution => [:P], },
:Cl => { :string => "132112", :evolution => [:S], },
:Ar => { :string => "3112", :evolution => [:Cl], },
:K => { :string => "1112", :evolution => [:Ar], },
:Ca => { :string => "12", :evolution => [:K], },
:Sc => { :string => "3113112221133112", :evolution => [:Ho,:Pa,:H,:Ca,:Co], },
:Ti => { :string => "11131221131112", :evolution => [:Sc], },
:V => { :string => "13211312", :evolution => [:Ti], },
:Cr => { :string => "31132", :evolution => [:V], },
:Mn => { :string => "111311222112", :evolution => [:Cr,:Si], },
:Fe => { :string => "13122112", :evolution => [:Mn], },
:Co => { :string => "32112", :evolution => [:Fe], },
:Ni => { :string => "11133112", :evolution => [:Zn,:Co], },
:Cu => { :string => "131112", :evolution => [:Ni], },
:Zn => { :string => "312", :evolution => [:Cu], },
:Ga => { :string => "13221133122211332", :evolution => [:Eu,:Ca,:Ac,:H,:Ca,:Zn], },
:Ge => { :string => "31131122211311122113222", :evolution => [:Ho,:Ga], },
:As => { :string => "11131221131211322113322112", :evolution => [:Ge,:Na], },
:Se => { :string => "13211321222113222112", :evolution => [:As], },
:Br => { :string => "3113112211322112", :evolution => [:Se], },
:Kr => { :string => "11131221222112", :evolution => [:Br], },
:Rb => { :string => "1321122112", :evolution => [:Kr], },
:Sr => { :string => "3112112", :evolution => [:Rb], },
:Y => { :string => "1112133", :evolution => [:Sr,:U], },
:Zr => { :string => "12322211331222113112211", :evolution => [:Y,:H,:Ca,:Tc], },
:Nb => { :string => "1113122113322113111221131221", :evolution => [:Er,:Zr], },
:Mo => { :string => "13211322211312113211", :evolution => [:Nb], },
:Tc => { :string => "311322113212221", :evolution => [:Mo], },
:Ru => { :string => "132211331222113112211", :evolution => [:Eu,:Ca,:Tc], },
:Rh => { :string => "311311222113111221131221", :evolution => [:Ho,:Ru], },
:Pd => { :string => "111312211312113211", :evolution => [:Rh], },
:Ag => { :string => "132113212221", :evolution => [:Pd], },
:Cd => { :string => "3113112211", :evolution => [:Ag], },
:In => { :string => "11131221", :evolution => [:Cd], },
:Sn => { :string => "13211", :evolution => [:In], },
:Sb => { :string => "3112221", :evolution => [:Pm,:Sn], },
:Te => { :string => "1322113312211", :evolution => [:Eu,:Ca,:Sb], },
:I => { :string => "311311222113111221", :evolution => [:Ho,:Te], },
:Xe => { :string => "11131221131211", :evolution => [:I], },
:Cs => { :string => "13211321", :evolution => [:Xe], },
:Ba => { :string => "311311", :evolution => [:Cs], },
:La => { :string => "11131", :evolution => [:Ba], },
:Ce => { :string => "1321133112", :evolution => [:La,:H,:Ca,:Co], },
:Pr => { :string => "31131112", :evolution => [:Ce], },
:Nd => { :string => "111312", :evolution => [:Pr], },
:Pm => { :string => "132", :evolution => [:Nd], },
:Sm => { :string => "311332", :evolution => [:Pm,:Ca,:Zn], },
:Eu => { :string => "1113222", :evolution => [:Sm], },
:Gd => { :string => "13221133112", :evolution => [:Eu,:Ca,:Co], },
:Tb => { :string => "3113112221131112", :evolution => [:Ho,:Gd], },
:Dy => { :string => "111312211312", :evolution => [:Tb], },
:Ho => { :string => "1321132", :evolution => [:Dy], },
:Er => { :string => "311311222", :evolution => [:Ho,:Pm], },
:Tm => { :string => "11131221133112", :evolution => [:Er,:Ca,:Co], },
:Yb => { :string => "1321131112", :evolution => [:Tm], },
:Lu => { :string => "311312", :evolution => [:Yb], },
:Hf => { :string => "11132", :evolution => [:Lu], },
:Ta => { :string => "13112221133211322112211213322113", :evolution => [:Hf,:Pa,:H,:Ca,:W], },
:W => { :string => "312211322212221121123222113", :evolution => [:Ta], },
:Re => { :string => "111312211312113221133211322112211213322113", :evolution => [:Ge,:Ca,:W], },
:Os => { :string => "1321132122211322212221121123222113", :evolution => [:Re], },
:Ir => { :string => "3113112211322112211213322113", :evolution => [:Os], },
:Pt => { :string => "111312212221121123222113", :evolution => [:Ir], },
:Au => { :string => "132112211213322113", :evolution => [:Pt], },
:Hg => { :string => "31121123222113", :evolution => [:Au], },
:Tl => { :string => "111213322113", :evolution => [:Hg], },
:Pb => { :string => "123222113", :evolution => [:Tl], },
:Bi => { :string => "3113322113", :evolution => [:Pm,:Pb], },
:Po => { :string => "1113222113", :evolution => [:Bi], },
:At => { :string => "1322113", :evolution => [:Po], },
:Rn => { :string => "311311222113", :evolution => [:Ho,:At], },
:Fr => { :string => "1113122113", :evolution => [:Rn], },
:Ra => { :string => "132113", :evolution => [:Fr], },
:Ac => { :string => "3113", :evolution => [:Ra], },
:Th => { :string => "1113", :evolution => [:Ac], },
:Pa => { :string => "13", :evolution => [:Th], },
:U => { :string => "3", :evolution => [:Pa], },
}
num, iters = ARGV
def step_state s
new_state = Hash.new(0)
s.each_key do |old_element|
new_elements = $elements[old_element][:evolution]
count = s[old_element]
new_elements.each do |new_element|
new_state[new_element] += count
end
end
new_state
end
# element.length * element.count
def count_chars s
sum = 0
s.each_pair do |element, count|
sum += $elements[element][:string].length * count
end
sum
end
element = $elements.select {|k,v| v[:string] == num }.keys.first
raise "can't find element for string" if element.empty?
puts "encoding #{num} which is element: #{element} with #{iters} iterations"
state = Hash.new(0)
state[element] = 1
puts "start state: #{state}"
iters.to_i.times do |i|
state = step_state state
end
puts "end state: #{state}"
puts "count of end string length: #{count_chars state}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment