P98
(de nonogram (LstX LstY) (let Lim (** 2 (length LstY)) (_nonogX LstX) ) ) (de _nonogX (LstX Res) (if LstX (_nonogY LstX Res) (when (= LstY (make (for (I Lim (gt0 (setq I (>> 1 I)))) (link (flip (make (let C NIL (for N Res (if2 (bit? I N) C (inc 'C) (one C) (prog (link C) (off C)) ) ) (and C (link @)) ) ) ) ) ) ) ) (for N (flip Res) (for (I Lim (gt0 (setq I (>> 1 I)))) (prin "|" (if (bit? I N) "X" "_")) ) (prinl "|") ) ) ) ) (de _nonogY (LstX Res) (let (Lst (mapcar '((N) (cons 1 (** 2 N))) (car LstX)) P Lst) (recur (P) (ifn P (let N 0 (for X Lst (setq N (+ (* 2 N (car X) (cdr X)) (* (car X) (dec (cdr X))) ) ) ) (when (> Lim N) (_nonogX (cdr LstX) (cons N Res)) T ) ) (prog1 (recurse (cdr P)) (while (prog (set (car P) (* 2 (caar P))) (recurse (cdr P)) ) ) (set (car P) 1) ) ) ) ) ) : (nonogram '((3) (2 1) (3 2) (2 2) (6) (1 5) (6) (1) (2)) '((1 2) (3 1) (1 5) (7 1) (5) (3) (4) (3)) ) |_|X|X|X|_|_|_|_| |X|X|_|X|_|_|_|_| |_|X|X|X|_|_|X|X| |_|_|X|X|_|_|X|X| |_|_|X|X|X|X|X|X| |X|_|X|X|X|X|X|_| |X|X|X|X|X|X|_|_| |_|_|_|_|X|_|_|_| |_|_|_|X|X|_|_|_| -> T
http://picolisp.com/wiki/?99p98
13jul10 | abu |