[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [ShootOut] hash.scm, take 2
Knew there had to be a faster way than format...
#!/usr/bin/env mzscheme -r
(define (sequence start stop)
(if (> start stop)
'()
(cons start (sequence (+ start 1) stop))))
(define (main)
(let* ([n (string->number (vector-ref argv 0))]
[hash (make-hash-table)]
[accum 0]
[seq (sequence 1 n)]
[revseq (reverse seq)]
[false (lambda () #f)])
(for-each (lambda (item)
(hash-table-put! hash (string->symbol (number->string item
16)) item))
seq)
(for-each (lambda (item)
(when (hash-table-get hash (string->symbol (number->string
item)) false)
(set! accum (+ accum 1))))
revseq)
(printf "~s" accum)))
(main)
> -----Original Message-----
> From: Bryn Keller
> Sent: Thursday, March 28, 2002 5:02 PM
> To: plt-scheme@fast.cs.utah.edu
> Subject: [ShootOut] hash.scm
>
> #!/usr/bin/env mzscheme -r
>
> (define (sequence start stop)
> (if (> start stop)
> '()
> (cons start (sequence (+ start 1) stop))))
>
> (define (main)
> (let* ([n (string->number (vector-ref argv 0))]
> [hash (make-hash-table)]
> [accum 0]
> [seq (sequence 1 n)]
> [revseq (reverse seq)]
> [false (lambda () #f)])
> (for-each (lambda (item)
> (hash-table-put! hash (string->symbol (format "~x" item))
> item))
> seq)
> (for-each (lambda (item)
> (when (hash-table-get hash (string->symbol (format "~s"
> item)) false)
> (set! accum (+ accum 1))))
> revseq)
> (printf "~s" accum)))
>
> (main)
>
> Bryn Keller
> Senior Software Engineer
> Jenkon
> brk@jenkon.com
>