Name: Anonymous 2012-01-19 14:30
Im working on euler # 17 (http://projecteuler.net/problem=17) and wrote this (ugly) scheme code to solve it, nvals takes the upper bound number (999 in this case). It keeps giving the wrong aswer though, any help?
[code]
(define (nvals x)
(cond
((= x 0) 0)
(else (+ (nval x) (nvals (- x 1))))))
(define (nval x)
(cond
((= x 0) 4)
((< x 13) (digval x))
((= x 15) fifteen)
((< x 20) (+ (digval (modulo x 10)) teen))
((< x 100) (+ (tenval x) (digval (modulo x 10))))
(else (+ (digval(floor(/ x 100))) hundred wand (eval2 (modulo x 100) )))))
(define (digval x)
(cond
((= x 0) 0)
((= x 1) one)
((= x 2) two)
((= x 3) three)
((= x 4) four)
((= x 5) five)
((= x 6) six)
((= x 7) seven)
((= x 8) eight)
((= x 9) nine)
((= x 10) ten)
((= x 11) eleven)
((= x 12) twelve)
))
(define (tenval x)
(let ((val (floor(/ x 10))))
(cond
((= val 2) twenty)
((= val 3) thirty)
((= val 4) forty)
((= val 5) fifty)
((= val 6) sixty)
((= val 7) seventy)
((= val 8) eighty)
((= val 9) ninety)
)))
(define (eval2 x)
(cond
((< x 13) (digval x))
((= x 15) fifteen)
((< x 20) (+ (digval (modulo x 10)) teen))
(else (+ (tenval x) (digval (modulo x 10))))))
(define wand 3)
(define one 3)
(define two 3)
(define three 5)
(define four 4)
(define five 4)
(define six 3)
(define seven 5)
(define eight 5)
(define nine 4)
(define teen 4)
;special
(define ten 3)
(define eleven 6)
(define twelve 6)
(define fifteen 7)
;special
(define twenty 6)
(define thirty 6)
(define forty 5)
(define fifty 5)
(define sixty 5)
(define seventy 7)
(define eighty 6)
(define ninety 6)
(define hundred 7)
[\code]
[code]
(define (nvals x)
(cond
((= x 0) 0)
(else (+ (nval x) (nvals (- x 1))))))
(define (nval x)
(cond
((= x 0) 4)
((< x 13) (digval x))
((= x 15) fifteen)
((< x 20) (+ (digval (modulo x 10)) teen))
((< x 100) (+ (tenval x) (digval (modulo x 10))))
(else (+ (digval(floor(/ x 100))) hundred wand (eval2 (modulo x 100) )))))
(define (digval x)
(cond
((= x 0) 0)
((= x 1) one)
((= x 2) two)
((= x 3) three)
((= x 4) four)
((= x 5) five)
((= x 6) six)
((= x 7) seven)
((= x 8) eight)
((= x 9) nine)
((= x 10) ten)
((= x 11) eleven)
((= x 12) twelve)
))
(define (tenval x)
(let ((val (floor(/ x 10))))
(cond
((= val 2) twenty)
((= val 3) thirty)
((= val 4) forty)
((= val 5) fifty)
((= val 6) sixty)
((= val 7) seventy)
((= val 8) eighty)
((= val 9) ninety)
)))
(define (eval2 x)
(cond
((< x 13) (digval x))
((= x 15) fifteen)
((< x 20) (+ (digval (modulo x 10)) teen))
(else (+ (tenval x) (digval (modulo x 10))))))
(define wand 3)
(define one 3)
(define two 3)
(define three 5)
(define four 4)
(define five 4)
(define six 3)
(define seven 5)
(define eight 5)
(define nine 4)
(define teen 4)
;special
(define ten 3)
(define eleven 6)
(define twelve 6)
(define fifteen 7)
;special
(define twenty 6)
(define thirty 6)
(define forty 5)
(define fifty 5)
(define sixty 5)
(define seventy 7)
(define eighty 6)
(define ninety 6)
(define hundred 7)
[\code]