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