RosettaCodeData/Task/Stable-marriage-problem/M2000-Interpreter/stable-marriage-problem.m2000
2024-11-04 21:53:44 -08:00

95 lines
2.5 KiB
Text

Module Stable_marriage_problem {
enum men {abe=0, bob, col, dan, ed, fred, gav, hal, ian, jon}
enum women {abi=0, bea, cath, dee, eve, fay, gay, hope, ivy, jan}
gosub fillarrays
engage=list
function fill(n, v) {
dim a(n) as boolean=v
=a()
}
mfree=fill(10, true)
wfree=fill(10, true)
md=men
mw=women
while mfree#have(true)
m=mfree#pos(true)
w=pw#val(m)#val(0)
md=m
mw=w
if wfree#val(w) then
md=m
mw=w
return wfree, w:=false
return mfree, m:=false
pp=pw#val(m)
if len(pp)=1 then
return pw, m:=(,)
else
return pw, m:=pp#slice(1,)
end if
append engage, w:=m
else.if exist(engage, w) then
mm=eval(engage)
if (pm#val(w)#pos(m))<(pm#val(w)#pos(mm)) then
md=m
md=mm
return engage, w:=m
return mfree, mm:=true, m:=false
else
md=mm
mw=w
pp=pw#val(m)
if len(pp)=1 then
return pw, m:=(,)
else
return pw, m:=pp#slice(1,)
end if
end if
end if
end while
kk=each(engage)
list1=list
while kk
md=eval(kk)
mw=val(eval$(kk!))
append list1, eval$(mw)+" and "+eval$(md)+"."
end while
sort list1
kk=each(list1)
document kkk$
Print "NEWLYWEDS:"
while kk
kkk$=format$("{0::-2}.{1}",kk^+1, eval$(kk))+{
}
print format$("{0::-2}.{1}",kk^+1, eval$(kk))
end while
clipboard kkk$
end
fillarrays:
flush ' empty stack of values
data (abi, eve, cath, ivy, jan, dee, fay, bea, hope, gay)
data (cath, hope, abi, dee, eve, fay, bea, jan, ivy, gay)
data (hope, eve, abi, dee, bea, fay, ivy, gay, cath, jan)
data (ivy, fay, dee, gay, hope, eve, jan, bea, cath, abi)
data (jan, dee, bea, cath, fay, eve, abi, ivy, hope, gay)
data (bea, abi, dee, gay, eve, ivy, cath, jan, hope, fay)
data (gay, eve, ivy, bea, cath, abi, dee, hope, jan, fay)
data (abi, eve, hope, fay, ivy, cath, jan, bea, gay, dee)
data (hope, cath, dee, gay, bea, abi, fay, ivy, jan, eve)
data (abi, fay, jan, gay, eve, bea, dee, cath, ivy, hope)
pw=array([]) ' we get array of arrays
data (bob, fred, jon, gav, ian, abe, dan, ed, col, hal)
data (bob, abe, col, fred, gav, dan, ian, ed, jon, hal)
data (fred, bob, ed, gav, hal, col, ian, abe, dan, jon)
data (fred, jon, col, abe, ian, hal, gav, dan, bob, ed)
data (jon, hal, fred, dan, abe, gav, col, ed, ian, bob)
data (bob, abe, ed, ian, jon, dan, fred, gav, col, hal)
data (jon, gav, hal, fred, bob, abe, col, ed, dan, ian)
data (gav, jon, bob, abe, ian, dan, hal, ed, col, fred)
data (ian, col, hal, gav, fred, bob, abe, ed, jon, dan)
data (ed, hal, gav, abe, bob, jon, col, ian, fred, dan)
pm=array([])
return
}
Stable_marriage_problem