$ txr This is the TXR Lisp interactive listener of TXR 293. Quit with :quit or Ctrl-D on an empty line. Ctrl-X ? for cheatsheet. TXR's car insurance now offers cdr coverage for bumper-to-bumper protection. 1> (let ((r (range 1 7))) (collect-each ((c (comb r 2))) (append c (diff r c)))) ((1 2 3 4 5 6 7) (1 3 2 4 5 6 7) (1 4 2 3 5 6 7) (1 5 2 3 4 6 7) (1 6 2 3 4 5 7) (1 7 2 3 4 5 6) (2 3 1 4 5 6 7) (2 4 1 3 5 6 7) (2 5 1 3 4 6 7) (2 6 1 3 4 5 7) (2 7 1 3 4 5 6) (3 4 1 2 5 6 7) (3 5 1 2 4 6 7) (3 6 1 2 4 5 7) (3 7 1 2 4 5 6) (4 5 1 2 3 6 7) (4 6 1 2 3 5 7) (4 7 1 2 3 5 6) (5 6 1 2 3 4 7) (5 7 1 2 3 4 6) (6 7 1 2 3 4 5)) 2> (let ((r (range 1 7))) (collect-each ((c (comb r 2))) (let ((d (diff r c)) (x (rand 8))) (set [d x..x] c) d))) ((3 1 2 4 5 6 7) (2 1 3 4 5 6 7) (2 3 5 6 7 1 4) (2 3 4 6 7 1 5) (2 3 4 5 1 6 7) (2 1 7 3 4 5 6) (1 4 5 6 7 2 3) (1 3 5 6 7 2 4) (1 3 4 6 2 5 7) (1 3 4 5 7 2 6) (1 3 4 5 2 7 6) (1 2 5 6 3 4 7) (1 3 5 2 4 6 7) (1 2 4 5 7 3 6) (1 2 4 5 6 3 7) (1 2 3 4 5 6 7) (1 4 6 2 3 5 7) (1 2 3 5 6 4 7) (1 2 5 6 3 4 7) (1 2 3 5 7 4 6) (1 2 3 4 5 6 7)) 3> (let ((r (range 1 7))) (collect-each ((c (comb r 2))) (let ((d (shuffle (diff r c))) (x (rand 8))) (set [d x..x] c) d))) ((4 3 7 5 6 1 2) (1 3 2 4 6 5 7) (5 7 6 3 1 4 2) (7 6 4 2 3 1 5) (2 7 3 5 4 1 6) (6 5 3 2 1 7 4) (1 7 4 2 3 6 5) (7 3 6 5 1 2 4) (2 5 1 7 6 4 3) (5 7 1 3 4 2 6) (4 1 6 2 7 3 5) (1 5 2 3 4 7 6) (6 7 4 1 2 3 5) (7 4 5 1 2 3 6) (4 2 3 7 6 5 1) (4 5 1 7 2 3 6) (4 6 2 7 1 3 5) (4 7 1 6 3 2 5) (1 3 2 7 4 5 6) (5 7 2 1 6 4 3) (2 4 5 1 3 6 7))