;;; .EnTete "Le-Lisp (c) version 15.2" " " "The Le-Lisp Benchmarks (18)" ;;; .EnPied "triang.ll" "%" " " ;;; .SuperTitre "The Le-Lisp Benchmarks (18)" ;;; ;;; .Centre "*****************************************************************" ;;; .Centre " Ce fichier est en lecture seule hors du projet ALE de l'INRIA. " ;;; .Centre " Il est maintenu par ILOG SA, 2 Avenue Gallie'ni, 94250 Gentilly " ;;; .Centre " (c) Le-Lisp est une marque de'pose'e de l'INRIA " ;;; .Centre "*****************************************************************" ;;; ;;; .Centre "$Header: triang.ll,v 1.1 88/12/06 19:39:53 chaillou Exp $" ;;;; (18) TRIANG -- Board game benchmark. (defun check-triang () (check-value '(test-triang 1) t)) (defun meter-triang () (perform-meter '(gogogo 22) 'triang)) (defun test-triang (n) (if (eq n 1) (gogogo 22) (repeat n (gogogo 22)))) ;;; ; traduit en Lelisp (defun vector-to-list (v) ; quelle est la fonction Lelisp qui transforme un vecteur en liste? (do ((i (sub1 (vlength v)) (sub1 i)) (l)) ((lt i 0) l) (newl l (vref v i)))) (defvar triang-board (makevector 16 1)) (defvar triang-sequence (makevector 14 0)) (defvar triang-a (vector 1 2 4 3 5 6 1 3 6 2 5 4 11 12 13 7 8 4 4 7 11 8 12 13 6 10 15 9 14 13 13 14 15 9 10 6 6)) (defvar triang-b (vector 2 4 7 5 8 9 3 6 10 5 9 8 12 13 14 8 9 5 2 4 7 5 8 9 3 6 10 5 9 8 12 13 14 8 9 5 5)) (defvar triang-c (vector 4 7 11 8 12 13 6 10 15 9 14 13 13 14 15 9 10 6 1 2 4 3 5 6 1 3 6 2 5 4 11 12 13 7 8 4 4)) (defvar triang-answer) (defvar triang-final) (setf (aref triang-board 5) 0) (defun triang-last-position () (do ((i 1 (add1 i))) ((or (eq i 16) (eq 1 (aref triang-board i))) (if (eq i 16) 0 i)))) (defun triang-try (i depth) (cond ((eq depth 14) (let ((lp (triang-last-position))) (unless (member lp triang-final) (newl triang-final lp))) (newl triang-answer (cdr (vector-to-list triang-sequence))) t) ((and (eq 1 (aref triang-board (aref triang-a i))) (eq 1 (aref triang-board (aref triang-b i))) (eq 0 (aref triang-board (aref triang-c i)))) (setf (aref triang-board (aref triang-a i)) 0) (setf (aref triang-board (aref triang-b i)) 0) (setf (aref triang-board (aref triang-c i)) 1) (setf (aref triang-sequence depth) i) (do ((j 0 (add1 j)) (depth (add1 depth))) ((or (eq j 36) (triang-try j depth)) ())) (setf (aref triang-board (aref triang-a i)) 1) (setf (aref triang-board (aref triang-b i)) 1) (setf (aref triang-board (aref triang-c i)) 0) ()))) (defun gogogo (i) (let ((triang-answer ()) (triang-final ())) (triang-try i 1))) ;;; call: (gogogo 22)