Rodolfo,

I started Project Euler with nested (do ...) loops.
Which are beyond ugly. It was truly revolutionary
finding the for/... forms.

Get a hang of them!

Also, you might like to use:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define last-progress-ms #f)
;;; it's global, it's expeident, but it has worked for me so far!
(define (progress i period (max-i #f))
  (when (= (modulo i period) 0)
    (let* ((now-ms (current-milliseconds))
           (delta-raw (and last-progress-ms (- now-ms last-progress-ms)))
           (delta-s (and delta-raw (quotient delta-raw 1000)))
           (delta-ms (and delta-raw (remainder delta-raw 1000))))
      (set! last-progress-ms now-ms)
      (if
        max-i
        (and
          (printf "~a+~a:~a.~a|" i (- max-i i) delta-s delta-ms)
          (flush-output))
        (and (printf "~a:~a.~a|" (/ i period) delta-s delta-ms)
             (flush-output))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

It's useful in loops like:

(let ((stupid-number-youll-find-so-often-in-PE(expt 10 1034)))
(for*/first
  (
   [k (in-range 0 stupid-number-youll-find-so-often-in-PE)]
   #:when (progress (- stupid-number-youll-find-so-often-in-PE k) 1000000)
   [i (in-range 0 10)]
   [j (in-range 0 10)]
   ...)))

You'll know when you'll need it!
#:when (printf ...)
will become your friend!

Tim

Eli Barzilay wrote:
20 minutes ago, Rodolfo Carvalho wrote:

(define (pythagorean-triple/alt n)
   (for*/first ([a (in-range 1 n)]
                [b (in-range a n)]
                [c (in-value (- n a b))]
                #:when (right-triangle? a b c))
     (list a b c)))

You can also use `for*/or':

   (define (pythagorean-triple/alt n)
     (for*/or ([a (in-range 1 n)]
               [b (in-range a n)])
       (define c (- n a b))
       (and (right-triangle? a b c) (list a b c))))



--
Tim Brown <tim.br...@cityc.co.uk>  | City Computing Limited            |
T: +44 20 8770 2110                | City House, Sutton Park Road      |
F: +44 20 8770 2130                | Sutton, Surrey, SM1 2AE, GB       |
-----------------------------------------------------------------------|
BEAUTY:  What's in your eye when you have a bee in your hand           |
-----------------------------------------------------------------------'
City Computing Limited registered in London No. 1767817.
Registered Office: City House, Sutton Park Road, Sutton, Surrey, SM1 2AE
VAT number 372 8290 34.
____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to