viernes, 6 de enero de 2012

Ejercicio soldados LISP

Ejercicio # 1

1.      Descripción
Se encuentra un número n de soldados formando una circunferencia, en el centro existe un soldado A de otro bando encargado de matar a los soldados de la circunferencia, la instrucción que recibe el soldado A es matar a todos los soldados menos a uno, para ello tiene que matar de la siguiente manera:

a.       Enumera primero a los soldados.
b.      Mata al primer soldado.
c.       Bucle, hasta que solo uno quede vivo.
d.      Deja vivir al siguiente soldado.
e.       Mata al siguiente soldado.
Ejemplo: Si se tienen 7 soldados el proceso sería:

Quedando vivo el soldado número 6.
Desarrollar el Lisp un programa que devuelva el número que le pertenece al soldado vivo.
2.      Solución
(defun soldados (n)
            (setq estado 1)
            (setq c 0)
            (setq l '())
            (lista c)
            (elimina l)
)
(defun lista (c)
            (setq c (+ c 1))
            (setq l (append l (list c)))
            (if (> n c) (lista c) l)
) 
(defun elimina (l1)       
            (if (= estado 0) (setq l1 (append (cdr l1) (list (car l1)))))
            (if (= estado 1) (setq l1 (cdr l1)))          
            (if (= estado 1) (setq estado 0) (setq estado 1))
            (if (cdr l1) (elimina l1) (car l1))
  )

3.      Ejecución

No hay comentarios:

Publicar un comentario