- #lang racket
- (define (check guess)
- (define real (make-vector 10 1))
- (define mistake 0)
- (for-each (lambda (x)
- (for-each (lambda (y)
- (vector-set! real y (+ 1 (vector-ref real y))))
- (integer->list x)))
- (vector->list guess))
- (for-each (lambda (x)
- (when (eqv? x #f)
- (set! mistake 1)))
- (map = (vector->list guess) (vector->list real)))
- (when (= 0 mistake)
- (display guess)
- (newline)))
-
- (define (integer->list num)
- (define index '(0 1 2 3 4 5 6 7 8 9))
- (define str '())
- (define (cc)
- (set! str (cons (list-ref index (modulo num 10)) str))
- (set! num (floor (/ num 10)))
- (if (= 0 num)
- str
- (cc)))
- (cc))
-
- (define (main)
- (define guess (make-vector 10 1))
- (define max '((1 2) (1 2 3 4 5 6 7 8 9 10 11) (1 2 3) (1 2) (1 2) (1 2) (1 2) (1 2)))
- (define (loop index)
- (for-each (lambda (x)
- (vector-set! guess index x)
- (if (= index 7)
- (check guess)
- (loop (+ index 1))))
- (list-ref max index)))
- (loop 0))
-
- (time (main))
复制代码 代码毫无技术含量可言,主要工作都是在草稿纸上完成的=_=
其实就是笔算把范围缩小,然后再穷举(汗)- 输出:
- #(1 7 3 2 1 1 1 2 1 1)
- #(1 11 2 1 1 1 1 1 1 1)
- cpu time: 62 real time: 63 gc time: 0
复制代码
|