Tuesday, January 22, 2008

Mate in 2


Today I saw a couple of check mate problems. I found this to be simple but beautiful.

Caraluna

January the 22nd, again

Quien dice que no duelen
las huellas en la arena
Tu huella el mar se la llevó
pero la luna sigue ahí,
pero la luna es mi condena . . . (Caraluna, Bacilos)

Tuesday, January 15, 2008

Say no to terrorists

Here in Colombia most People are peaceful. I join peaceful People to say: No to terrorism, no to kidnapping.

Saturday, January 12, 2008

May the source be with you

And happy new year 2008 for all the software developers and enthusiasts around the globe.

Tuesday, January 08, 2008

Quotation

"The violence is the last resource of the incompetent"
Salvor Hardin - Foundation

Monday, January 07, 2008

hanoi

An always classic:

(define ( hanoi n src dst tmp s)
(if (= n 1) (print "move from " src " to " dst )
(hanoi (- n 1) tmp dst src (hanoi 1 src dst tmp (hanoi (- n 1) src tmp dst s)))))
(hanoi 3 0 1 2 '() )
(exit)

Version 2:

(define (pass-stack stack src dst)
(if (null? stack ) '()
(if (= src 0) (cons (- (car stack) 1) (pass-stack (cdr stack) (- src 1) (- dst 1) ))
(if (= dst 0) (cons (+ (car stack) 1) (pass-stack (cdr stack) (- src 1) (- dst 1) ))
(if (and (< dst 0) (< src 0)) stack
(cons (car stack) (pass-stack (cdr stack) (- src 1) (- dst 1))))))))

(define (print-move stack src dst)
(print (pass-stack stack src dst)))

(define (hanoi n src dst tmp stack)
(if (= n 1) (print-move stack src dst )
(hanoi (- n 1) tmp dst src (hanoi 1 src dst tmp ( hanoi (- n 1) src tmp dst stack)))))

(hanoi 3 0 1 2 '(3 0 0) )
(exit)

Version 3:

(define stacks (list '(1 2 3 4 5) '() '()))

(define (build-stacks a b c la lb lc)
(if (< a b c) (list la lb lc)
(if (< a c b) (list la lc lb)
(if (< b a c) (list lb la lc)
(if (< b c a) (list lb lc la)
(if (< b a c) (list lb la lc)
(if (< c a b) (list lc la lb)
(list lc lb la))))))))

(define (move stack src dst tmp)
(build-stacks src dst tmp
(cdr (list-ref stack src))
(cons (car (list-ref stack src)) (list-ref stack dst))
(list-ref stack tmp)))

(define (print-move stack src dst tmp)
(and (print (move stack src dst tmp)) (move stack src dst tmp)))

(define (hanoi n stack src dst tmp)
(if (= n 1)
(print-move stack src dst tmp)
(hanoi (- n 1) (hanoi 1 (hanoi (- n 1) stack src tmp dst) src dst tmp) tmp dst src)))

(hanoi 5 stacks 0 1 2)
(exit)