25 lines
734 B
Ruby
25 lines
734 B
Ruby
def order_disjoint(m,n)
|
|
print "#{m} | #{n} -> "
|
|
m, n = m.split, n.split
|
|
from = 0
|
|
n.each_slice(2) do |x,y|
|
|
next unless y
|
|
sd = m[from..-1]
|
|
if x > y && (sd.include? x) && (sd.include? y) && (sd.index(x) > sd.index(y))
|
|
new_from = m.index(x)+1
|
|
m[m.index(x)+from], m[m.index(y)+from] = m[m.index(y)+from], m[m.index(x)+from]
|
|
from = new_from
|
|
end
|
|
end
|
|
puts m.join(' ')
|
|
end
|
|
|
|
[
|
|
['the cat sat on the mat', 'mat cat'],
|
|
['the cat sat on the mat', 'cat mat'],
|
|
['A B C A B C A B C' , 'C A C A'],
|
|
['A B C A B D A B E' , 'E A D A'],
|
|
['A B' , 'B' ],
|
|
['A B' , 'B A' ],
|
|
['A B B A' , 'B A' ]
|
|
].each {|m,n| order_disjoint(m,n)}
|