update
This commit is contained in:
parent
1f1ad49427
commit
6f050a029e
2496 changed files with 37609 additions and 3031 deletions
|
|
@ -0,0 +1,36 @@
|
|||
#lang racket
|
||||
|
||||
(define (next s)
|
||||
(define v (make-vector 10 0))
|
||||
(for ([c s])
|
||||
(define d (- (char->integer #\9) (char->integer c)))
|
||||
(vector-set! v d (add1 (vector-ref v d))))
|
||||
(string-append* (for/list ([x v] [i (in-range 9 -1 -1)] #:when (> x 0))
|
||||
(format "~a~a" x i))))
|
||||
|
||||
(define (seq-of s)
|
||||
(reverse (let loop ([ns (list s)])
|
||||
(define n (next (car ns)))
|
||||
(if (member n ns) ns (loop (cons n ns))))))
|
||||
|
||||
(define (sort-string s)
|
||||
(list->string (sort (string->list s) char>?)))
|
||||
|
||||
(define-values [len nums seq]
|
||||
(for/fold ([*len #f] [*nums #f] [*seq #f])
|
||||
([n (in-range 1000000 -1 -1)]) ; start at the high end
|
||||
(define s (number->string n))
|
||||
(define sorted (sort-string s))
|
||||
(cond [(equal? s sorted)
|
||||
(define seq (seq-of s))
|
||||
(define len (length seq))
|
||||
(cond [(or (not *len) (> len *len)) (values len (list s) seq)]
|
||||
[(= len *len) (values len (cons s *nums) seq)]
|
||||
[else (values *len *nums *seq)])]
|
||||
;; not sorted: see if it's a permutation of the best
|
||||
[else (values
|
||||
*len
|
||||
(if (and *nums (member sorted *nums)) (cons s *nums) *nums)
|
||||
*seq)])))
|
||||
(printf "Numbers: ~a\nLength: ~a\n" (string-join nums ", ") len)
|
||||
(for ([n seq]) (printf " ~a\n" n))
|
||||
Loading…
Add table
Add a link
Reference in a new issue