2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -0,0 +1,39 @@
|
|||
defmodule Order do
|
||||
def disjoint(m,n) do
|
||||
IO.write "#{Enum.join(m," ")} | #{Enum.join(n," ")} -> "
|
||||
Enum.chunk(n,2)
|
||||
|> Enum.reduce({m,0}, fn [x,y],{m,from} ->
|
||||
md = Enum.drop(m, from)
|
||||
if x > y and x in md and y in md do
|
||||
if Enum.find_index(md,&(&1==x)) > Enum.find_index(md,&(&1==y)) do
|
||||
new_from = max(Enum.find_index(m,&(&1==x)), Enum.find_index(m,&(&1==y))) + 1
|
||||
m = swap(m,from,x,y)
|
||||
from = new_from
|
||||
end
|
||||
end
|
||||
{m,from}
|
||||
end)
|
||||
|> elem(0)
|
||||
|> Enum.join(" ")
|
||||
|> IO.puts
|
||||
end
|
||||
|
||||
defp swap(m,from,x,y) do
|
||||
ix = Enum.find_index(m,&(&1==x)) + from
|
||||
iy = Enum.find_index(m,&(&1==y)) + from
|
||||
vx = Enum.at(m,ix)
|
||||
vy = Enum.at(m,iy)
|
||||
m |> List.replace_at(ix,vy) |> List.replace_at(iy,vx)
|
||||
end
|
||||
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"} ]
|
||||
|> Enum.each(fn {m,n} ->
|
||||
Order.disjoint(String.split(m),String.split(n))
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue