Skip to content

Instantly share code, notes, and snippets.

@vsalbaba
Created June 29, 2009 18:02
Show Gist options
  • Select an option

  • Save vsalbaba/137723 to your computer and use it in GitHub Desktop.

Select an option

Save vsalbaba/137723 to your computer and use it in GitHub Desktop.
def rozdel(s)
vyraz_bez_hlavy = s[(s.index('(')+1)..-2]
zavorky = 0
result = []
i = 0
while i < vyraz_bez_hlavy.size do
if vyraz_bez_hlavy[i].chr == '('
zavorky += 1
elsif vyraz_bez_hlavy[i].chr == ')'
zavorky -= 1
elsif vyraz_bez_hlavy[i].chr == ',' and zavorky == 0
result << vyraz_bez_hlavy.slice!(0,i)
vyraz_bez_hlavy.slice!(0,1)
i = -1
end
i += 1
end
result << vyraz_bez_hlavy
return result
end
phi = ARGV[0]
psi = ARGV[1]
raise "Chtelo by to nejake argumenty" unless phi and psi
run = 0
epsilon = [[phi, psi]]
while run < epsilon.size do
p epsilon
#vyber prvek z epsilon
prvek = epsilon[run]
s, t = prvek
#pokud jsou to funkce
if s.include?('(') and t.include?('(') then
puts "pokud jsou to stejne funkce"
s_parts, t_parts = rozdel(s), rozdel(t)
# s_parts = s[(s.index('(')+1)..-2].split(",")
# t_parts = t[(t.index('(')+1)..-2].split(",")
if s[0..s.index('(')] == t[0..t.index('(')] then
#vyber vnitrni veci
if s_parts.size == t_parts.size then
epsilon.delete(prvek)
for i in 0..(s_parts.size-1) do
epsilon.push([s_parts[i], t_parts[i]])
end
run = 0; redo;
else
raise "failed."
end
elsif s_parts.size != t_parts.size
raise "failed."
end
end
#pokud s = t
if s == t then
puts "pokud s = t"
epsilon.delete(prvek)
run = 0; redo;
end
#pokud t je promena a s není:
if t.upcase == t
puts "pokud t je promena a s neni"
epsilon.delete(prvek)
epsilon.push([t, s])
run = 0; redo;
end
epsilon.delete(prvek)
if s.upcase == s and epsilon.any?{|pair| pair.any?{|value| value.include?(s)}}
if s.include?(t) then
raise "failed."
else
puts "<X, t> a jine prvky obsahuji X"
epsilon.map!{|pair| pair.map!{|value| value.gsub(s, t)}}
epsilon.push(prvek)
run = 0; redo;
end
end
epsilon.push(prvek)
run += 1
end
puts epsilon.map{|pair| pair.join("|")}.join(", ")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment