[ create a new paste ] login | about

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

programmingpraxis - Scheme, pasted on Mar 22:
; base-26 arithmetic

(define (digits n . args)
  (let ((b (if (null? args) 10 (car args))))
    (let loop ((n n) (d '()))
      (if (zero? n) d
          (loop (quotient n b)
                (cons (modulo n b) d))))))

(define (undigits ds . args)
  (let ((b (if (null? args) 10 (car args))))
    (let loop ((ds ds) (n 0))
      (if (null? ds) n
          (loop (cdr ds) (+ (* n b) (car ds)))))))

(define (number->prashant n)
  (define (d->c d) (integer->char (+ d 65)))
  (list->string (map d->c (digits n 26))))

(define (prashant->number p)
  (define (c->d c) (- (char->integer c) 65))
  (undigits (map c->d (string->list p)) 26))

(display (number->prashant 1234567)) (newline)
(display (prashant->number "CSGHJ")) (newline)

(define (prashant-times x y)
  (number->prashant
    (* (prashant->number x)
       (prashant->number y))))

(display (prashant-times "CSGHJ" "CBA")) (newline)


Output:
1
2
3
CSGHJ
1234567
FNEUZJA


Create a new paste based on this one


Comments: