Hi Tom,<div><br></div><div>thanks for the comments.</div><div><br></div><div>As far as reading the data into a vector, that can be accomplished with &quot;(define vec (read in))&quot;  I was more interested in how to create an srfi/25 array from that vector.</div>
<div><br></div><div>Thanks also for the example of using for*/fold.</div><div><br></div><div>-Joe</div><div><br></div><div><br><br><div class="gmail_quote">On Sat, Mar 24, 2012 at 11:26 PM, Tom McNulty <span dir="ltr">&lt;<a href="mailto:tom.mcnulty@gmail.com">tom.mcnulty@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The format of prob11&#39;s data is already quite close to what the reader expects for a vector, so you can read it directly by including #( ...<br>

<br>
(define tbl<br>
  #(08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08<br>
        &lt;snip&gt; ...<br>
    01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48))<br>
<br>
A convenience function to read the table is then:<br>
<br>
(define (get i j)<br>
  (vector-ref tbl (+ (* i 20) j)))<br>
<br>
Here is my across function, I use a for/fold loop.  The vertical and diagonal cases are similar.<br>
<br>
(define (across)<br>
  (for*/fold ([mx 0])<br>
             ([i (in-range 0 20)]<br>
              [j (in-range 0 17)])<br>
             (max mx (* (get i j)<br>
                        (get i (+ j 1))<br>
                        (get i (+ j 2))<br>
                        (get i (+ j 3))))))<br>
<br>
Does that help?<br>
<br>
<br>
- Tom<br>
<div><div class="h5"><br>
On 2012-03-24, at 11:01 PM, Joe Gilray wrote:<br>
<br>
&gt; I was playing around with ProjectEuler #11 and found a lisp solution and adapted it to Racket.  Part of the solution had code like the following to find products of values in a 20x20 vector.<br>
&gt;<br>
&gt; (define (prod-of-vec-lines-of-length-4 v ix iy dx dy)<br>
&gt;   (do ([p 1 (* p (if (in-vector? x y 20 20) (vector-ref v (+ (* 20 y) x)) 0))]<br>
&gt;        [x ix (+ x dx)]<br>
&gt;        [y iy (+ y dy)]<br>
&gt;        [c 0 (add1 c)])<br>
&gt;     ((= c 4) p)))<br>
&gt;<br>
&gt; I realize I&#39;ve hard-coded this in a very ugly fashion to 20x20 vectors.<br>
&gt;<br>
&gt; My questions are:<br>
&gt;<br>
&gt; 1) Is there a more Racket-idiomatic way to write the &quot;do&quot; loop above?<br>
&gt; 2) If I wanted to use srfi/25 to do this in a nicer fashion, how would I read in the array? - I liked being able to read in the vector with simply (read in) - is there a simply , one-line way to convert a vector to an array (make-array (shape 0 20 0 20) vec) puts the entire 400 element vector into the first element of the array!<br>

&gt;<br>
&gt; Thanks,<br>
&gt; -joe<br>
</div></div>&gt; ____________________<br>
&gt;  Racket Users list:<br>
&gt;  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</blockquote></div><br></div>