Minimal steps down to 1: Difference between revisions

Content added Content deleted
Line 525: Line 525:
paths=.,:,:0 0 1 NB. operator, operand, net value
paths=.,:,:0 0 1 NB. operator, operand, net value
m=.,m [ n=.,n NB. m: subtractors, n: divisors
m=.,m [ n=.,n NB. m: subtractors, n: divisors
for_ok.|.m steps n y do. NB. ok: valid net values
for_ok.}.|.m steps n y do. NB. ok: valid net values
last=.{:"2 paths
last=.{."2 paths
subs=. (1,.m,.0)+"2]0 0 1*"1 last+"1 0/m
subs=. (1,.m,.0)+"2]0 0 1*"1 last+"1 0/m
divs=. (2,.n,.0)+"2]0 0 1*"1 last*"1 0/n
divs=. (2,.n,.0)+"2]0 0 1*"1 last*"1 0/n
next=. subs,"2 divs
prev=. subs,"2 divs NB. we are working backwards from 1
paths=. (,({:"1 next)e.ok)#,/paths,"2 1/"2 next
paths=. (,({:"1 prev)e.ok)#,/prev,"1 2/"2 paths
end.
end.
;@((<":y),_2 }. ,)"2((' -/'{~{.);":@{:)"1 }:"1 |."2 paths
;@((<":y),,)"2((' -/'{~{.);":@{:)"1}:"2}:"1 paths
}}
}}
</lang>
</lang>