procedure befriend_ent(s) local lseq, i, tail s := copy(s) lseq := [get(s)] | return [] while i := get(s) do lseq |||:= wander(lseq[-1], i) return lseq end procedure wander(j, i) local result, k, incr result := [j] repeat { k := i - result[-1] if abs(k) = 1 then { put(result, i) break } incr := [1, -1] if k < 0 then every 1 to -k do put(incr, -1) else every put(incr, 1) put(result, result[-1] + ?incr) if result[-1] == i then break } if *result > 1 then get(result) return result end