(< (cadr a) (cadr b))))))
(define (challenge hill-dir challenger-file)
- (let* ((spec (load-spec hill-dir))
- (scores (load-scores hill-dir))
+ (let* ((spec (hill-spec hill-dir))
+ (scores (hill-scores hill-dir))
(challenger-prog (file->prog challenger-file))
(hill-progs (map file->prog (hill-files hill-dir))))
(if (member (prog-name challenger-prog) (map prog-name hill-progs))
(rankings (scores->rankings new-scores)))
(if (<= (length rankings) (spec-hill-size spec))
(begin
- (save-scores new-scores hill-dir)
+ (save-hill-scores-and-rankings new-scores rankings hill-dir)
(hill-add-file challenger-file (prog-name challenger-prog) hill-dir))
(let ((loser (caar rankings)))
- (save-scores (filter (lambda (score)
- (not (or (equal? (car score) loser)
- (equal? (cadr score) loser))))
- new-scores)
- hill-dir)
+ (save-hill-scores-and-rankings (filter (lambda (score)
+ (not (or (equal? (car score) loser)
+ (equal? (cadr score) loser))))
+ new-scores)
+ (cdr rankings)
+ hill-dir)
(hill-remove loser hill-dir)))))))
;;; Hill initialization and specs
;;
-(define (load-scores dir)
+(define (hill-scores dir)
(with-input-from-file (make-pathname dir "scores") read))
-(define (save-scores scores dir)
+(define (save-hill-scores-and-rankings scores rankings dir)
(with-output-to-file (make-pathname dir "scores")
- (lambda () (pretty-print scores))))
+ (lambda () (pretty-print scores)))
+ (with-output-to-file (make-pathname dir "rankings")
+ (lambda () (pretty-print rankings))))
-(define (load-spec dir)
+(define (hill-spec dir)
(with-input-from-file (make-pathname dir "spec") read))
(define (hill-files dir)
(glob (make-pathname dir "*.red")))
(define (hill-rankings dir)
- (scores->rankings (load-scores dir)))
+ (with-input-from-file (make-pathname dir "rankings") read))
(define (hill-add-file file name dir)
(copy-file file (make-pathname dir (->string name) ".red")))
+(define (hill-remove-file name dir)
+ (delete-file (make-pathname dir name ".red")))
+
(define (make-spec core-size match-length games-per-match hill-size)
(list 'spec hill-size core-size match-length games-per-match))
(print ";; ('spec hill-size core-size game-length games-per-match\n")
(pp (make-spec core-size game-length games-per-match hill-size))))
(with-output-to-file (make-pathname dir "scores")
- (lambda ()
- (pp '())))))))
+ (lambda () (pp '())))
+ (with-output-to-file (make-pathname dir "rankings")
+ (lambda () (pp '())))))))
;;;; Main ;;;;
(define default-core-size 8000)
(define default-game-length 80000)
-(define default-games-per-match 1)
+(define default-games-per-match 3)
(define default-hill-size 10)
(define (print-usage)
default-game-length
default-games-per-match))
(((or "-r" "--rankings") dir)
- (print "Warrior" "\t" "Score")
- (print "-=-=-=-" "\t" "=-=-=")
- (for-each (lambda (r) (print (car r) "\t" (cadr r))) (reverse (hill-rankings dir))))
+ (let ((rankings (reverse (hill-rankings dir))))
+ (if (null? rankings)
+ (print "No warriors on hill!")
+ (begin
+ (print rankings)
+ (print "Warrior" "\t" "Score")
+ (print "-=-=-=-" "\t" "=-=-=")
+ (for-each (lambda (r) (print (car r) "\t" (cadr r))) rankings)))))
((hill-dir challenger-file)
(challenge hill-dir challenger-file))
(else