[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/38ciYhJc    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Oct 26:
; pandigital numbers

(define (pandigital? . xs)
  (let ((ds (make-vector 10 #f)))
    (let x-loop ((xs xs))
      (if (null? xs)
          (let loop ((i 0))
            (if (= i 10) #t
              (if (not (vector-ref ds i)) #f
                (loop (+ i 1)))))
          (let d-loop ((x (car xs)))
            (if (zero? x) (x-loop (cdr xs))
              (let ((q (quotient x 10))
                    (r (remainder x 10)))
                (if (vector-ref ds r) #f
                  (begin (vector-set! ds r #t)
                         (d-loop q))))))))))

(display
  (let a-loop ((a 100))
    (if (= a 1000) #f
      (let b-loop ((b (+ a 1)))
        (if (= b 1000) (a-loop (+ a 1))
          (if (pandigital? a b (+ a b)) a
            (b-loop (+ b 1))))))))

(newline)

(display
  (let a-loop ((a 100) (ps (list)))
    (if (= a 1000) (reverse ps)
      (let b-loop ((b (+ a 1)) (ps ps))
        (if (= b 1000) (a-loop (+ a 1) ps)
          (b-loop (+ b 1)
            (if (pandigital? a b (+ a b))
                (cons (list a b (+ a b)) ps)
                ps)))))))

(newline)


Output:
1
2
246
((246 789 1035) (249 786 1035) (264 789 1053) (269 784 1053) (284 769 1053) (286 749 1035) (289 746 1035) (289 764 1053) (324 765 1089) (325 764 1089) (342 756 1098) (346 752 1098) (347 859 1206) (349 857 1206) (352 746 1098) (356 742 1098) (357 849 1206) (359 847 1206) (364 725 1089) (365 724 1089) (423 675 1098) (425 673 1098) (426 879 1305) (429 876 1305) (432 657 1089) (437 589 1026) (437 652 1089) (439 587 1026) (452 637 1089) (457 632 1089) (473 589 1062) (473 625 1098) (475 623 1098) (476 829 1305) (479 583 1062) (479 826 1305) (483 579 1062) (487 539 1026) (489 537 1026) (489 573 1062) (624 879 1503) (629 874 1503) (674 829 1503) (679 824 1503) (743 859 1602) (749 853 1602) (753 849 1602) (759 843 1602))


Create a new paste based on this one


Comments: