codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
; excel columns (define-syntax assert (syntax-rules () ((assert expr result) (if (not (equal? expr result)) (for-each display `( #\newline "failed assertion:" #\newline expr #\newline "expected: " ,result #\newline "returned: " ,expr #\newline)))))) (define (column excel) ; A=>1, AA=>27, IV=>256 (let loop ((cs (string->list excel)) (result 0)) (if (null? cs) result (loop (cdr cs) (+ (* result 26) (char->integer (car cs)) -64))))) (define (excel column) ; 1=>A, 27=>AA, 256=>IV (let loop ((q column) (result '())) (if (= q 0) (list->string result) (let* ((q (- q 1)) (r (modulo q 26)) (q (quotient q 26))) (loop q (cons (integer->char (+ r 65)) result)))))) (display (column "A")) (display " ") (display (excel 1)) (newline) (display (column "Z")) (display " ") (display (excel 26)) (newline) (display (column "AA")) (display " ") (display (excel 27)) (newline) (display (column "IV")) (display " ") (display (excel 256)) (newline) (define (test-excel) (do ((i 1 (+ i 1))) ((< (expt 2 16) i)) (assert (column (excel i)) i))) (test-excel)
Private
[
?
]
Run code
Submit