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 |
