fork download
  1. ; keypad errors
  2.  
  3. (define (digits n . args)
  4. (let ((b (if (null? args) 10 (car args))))
  5. (let loop ((n n) (d '()))
  6. (if (zero? n) d
  7. (loop (quotient n b)
  8. (cons (modulo n b) d))))))
  9.  
  10. (define (remove x xs)
  11. (let loop ((xs xs) (zs '()))
  12. (cond ((null? xs) (reverse zs))
  13. ((equal? (car xs) x) (loop (cdr xs) zs))
  14. (else (loop (cdr xs) (cons (car xs) zs))))))
  15.  
  16. (define (range . args)
  17. (case (length args)
  18. ((1) (range 0 (car args) (if (negative? (car args)) -1 1)))
  19. ((2) (range (car args) (cadr args) (if (< (car args) (cadr args)) 1 -1)))
  20. ((3) (let ((le? (if (negative? (caddr args)) >= <=)))
  21. (let loop ((x(car args)) (xs '()))
  22. (if (le? (cadr args) x)
  23. (reverse xs)
  24. (loop (+ x (caddr args)) (cons x xs))))))
  25. (else (error 'range "unrecognized arguments"))))
  26.  
  27. (define (match target keyed)
  28. (let ((ts (digits target)) (ks (digits keyed)))
  29. (if (equal? ts ks) #t
  30. (let loop ((ds (range 10)))
  31. (if (null? ds) #f
  32. (if (equal? (remove (car ds) ts) ks) #t
  33. (loop (cdr ds))))))))
  34.  
  35. (display (match 18684 164)) (newline)
  36. (display (match 17674 164)) (newline)
  37. (display (match 18684 165)) (newline)
  38. (display (match 18684 18685)) (newline); your code goes here
Success #stdin #stdout 0.04s 8792KB
stdin
Standard input is empty
stdout
#t
#t
#f
#f