[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
>