<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Google Treasure Hunt 2008 Puzzle 4</title>
	<atom:link href="http://programmingpraxis.com/2009/04/14/google-treasure-hunt-2008-puzzle-4/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingpraxis.com/2009/04/14/google-treasure-hunt-2008-puzzle-4/</link>
	<description>A collection of etudes, updated weekly, for the education and enjoyment of the savvy programmer</description>
	<lastBuildDate>Sat, 11 Feb 2012 09:48:16 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: FalconNL</title>
		<link>http://programmingpraxis.com/2009/04/14/google-treasure-hunt-2008-puzzle-4/#comment-66</link>
		<dc:creator><![CDATA[FalconNL]]></dc:creator>
		<pubDate>Thu, 16 Apr 2009 22:23:08 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=421#comment-66</guid>
		<description><![CDATA[In Haskell:

[sourcecode lang=&#039;css&#039;]
import Data.List
import Data.Numbers.Primes

main = print $ test [541,41,17,7,1]

consecutivePrimes n = map (sum . take n) $ tails primes

test = head . foldl1 (\a b -&gt; filter (\x -&gt; elem x $ takeWhile (&lt;= x) b) a) . map consecutivePrimes[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>In Haskell:</p>
<pre class="brush: css;">
import Data.List
import Data.Numbers.Primes

main = print $ test [541,41,17,7,1]

consecutivePrimes n = map (sum . take n) $ tails primes

test = head . foldl1 (\a b -&gt; filter (\x -&gt; elem x $ takeWhile (&lt;= x) b) a) . map consecutivePrimes</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: jcs</title>
		<link>http://programmingpraxis.com/2009/04/14/google-treasure-hunt-2008-puzzle-4/#comment-65</link>
		<dc:creator><![CDATA[jcs]]></dc:creator>
		<pubDate>Thu, 16 Apr 2009 19:45:22 +0000</pubDate>
		<guid isPermaLink="false">http://programmingpraxis.wordpress.com/?p=421#comment-65</guid>
		<description><![CDATA[Here is a solution that makes no assumptions about the size of the solution and does not compute unnecessary sums.  The primes module provides a stream (as in SICP) of primes and the primitive &lt;code&gt;prime?&lt;/code&gt;; &lt;code&gt; push, pop&lt;/code&gt;, and &lt;code&gt;dotimes&lt;/code&gt; are Scheme implementations of the like-named Common Lisp macros.

&lt;code&gt;
(use-modules (private primes))  ;for stream-of-primes, prime?

;;; Queue object that holds n consecutive primes and sums them
(define make-summing-queue
&#160;&#160;(lambda (n)
&#160;&#160;&#160;&#160;(let ((front &#039;()) (back &#039;()) (primes stream-of-primes))
&#160;&#160;&#160;&#160;&#160;&#160;(define popq    ;just throw away the head of queue
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(lambda ()
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(unless (pop front)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(set! front (reverse back))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(set! back &#039;())
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(pop front))))
&#160;&#160;&#160;&#160;&#160;&#160;(define popp    ;return the next prime
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(lambda ()
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(let ((p (str-car primes)))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(set! primes (str-cdr primes))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;p)))
&#160;&#160;&#160;&#160;&#160;&#160;(dotimes (i n)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(push (popp) back))
&#160;&#160;&#160;&#160;&#160;&#160;(lambda (cmd)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(case cmd
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((next) (push (popp) back) (popq))   ;shift sum
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((fb) (format &#035;t &quot;front: ~s, back: ~s&#092;n&quot; front back))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((show) (princ (append front (reverse back))))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((sum) (apply + (append front back))))))))

;;; Find sums of primes

(define queues (list (make-summing-queue 541)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(make-summing-queue 41)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(make-summing-queue 17)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(make-summing-queue 7)))

(define run
&#160;&#160;(lambda (queues)
&#160;&#160;&#160;&#160;(let ((first (car queues)))
&#160;&#160;&#160;&#160;&#160;&#160;(while (not (prime? (first &#039;sum)))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(first &#039;next))
&#160;&#160;&#160;&#160;&#160;&#160;(let iter ((goal (first &#039;sum)) (rest (cdr queues)))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(cond ((null? rest) (first &#039;sum))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((= goal ((car rest) &#039;sum)) (iter goal (cdr rest)))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;((&lt; goal ((car rest) &#039;sum)) (first &#039;next) (run queues))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;(else ((car rest) &#039;next) (iter goal rest)))))))

;; (for-each (lambda (q) (q &#039;show)) queues)
;; to see lists of primes
&lt;/code&gt;]]></description>
		<content:encoded><![CDATA[<p>Here is a solution that makes no assumptions about the size of the solution and does not compute unnecessary sums.  The primes module provides a stream (as in SICP) of primes and the primitive <code>prime?</code>; <code> push, pop</code>, and <code>dotimes</code> are Scheme implementations of the like-named Common Lisp macros.</p>
<p><code><br />
(use-modules (private primes))  ;for stream-of-primes, prime?</p>
<p>;;; Queue object that holds n consecutive primes and sums them<br />
(define make-summing-queue<br />
&nbsp;&nbsp;(lambda (n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(let ((front '()) (back '()) (primes stream-of-primes))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define popq    ;just throw away the head of queue<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unless (pop front)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! front (reverse back))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! back '())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pop front))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(define popp    ;return the next prime<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((p (str-car primes)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! primes (str-cdr primes))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(dotimes (i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(push (popp) back))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (cmd)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case cmd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((next) (push (popp) back) (popq))   ;shift sum<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((fb) (format &#35;t "front: ~s, back: ~s&#92;n" front back))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((show) (princ (append front (reverse back))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((sum) (apply + (append front back))))))))</p>
<p>;;; Find sums of primes</p>
<p>(define queues (list (make-summing-queue 541)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-summing-queue 41)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-summing-queue 17)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-summing-queue 7)))</p>
<p>(define run<br />
&nbsp;&nbsp;(lambda (queues)<br />
&nbsp;&nbsp;&nbsp;&nbsp;(let ((first (car queues)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(while (not (prime? (first 'sum)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first 'next))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let iter ((goal (first 'sum)) (rest (cdr queues)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond ((null? rest) (first 'sum))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= goal ((car rest) 'sum)) (iter goal (cdr rest)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((&lt; goal ((car rest) 'sum)) (first 'next) (run queues))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(else ((car rest) 'next) (iter goal rest)))))))</p>
<p>;; (for-each (lambda (q) (q 'show)) queues)<br />
;; to see lists of primes<br />
</code></p>
]]></content:encoded>
	</item>
</channel>
</rss>

