| Deutsch English Français Italiano |
|
<v8ors5$8fen$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp
Subject: Re: The "Strand" puzzle --- ( Continued Fractions using Lisp orPython? )
Date: Sun, 4 Aug 2024 21:29:45 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 69
Message-ID: <v8ors5$8fen$1@dont-email.me>
References: <v7u7qd$2dgbs$1@dont-email.me> <6f90c2b4abed28c153dea46de3af408d@www.novabbs.com> <v88ood$jnp6$1@dont-email.me> <v8fkps$23nr5$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 04 Aug 2024 23:29:46 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="e14708043080897b7486957644b6603d";
logging-data="277975"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Y+2y/ttBGO96oacjeN61G"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:8t/RDeCLCZIZt2NsfQq0w4Q9sVA=
Bytes: 2514
B. Pym wrote:
> HenHanna wrote:
>
> > > > e.g. -------- For the (street) Numbers (1,2,3,4,5,6,7,8)
> > > >
> > > > (1,2,3,4,5) and (7,8) both add up to 15.
> > > >
> > > >
> > > >
> > > > "In a given street of houses with consecutive numbers between
> > > > 50 and 500, find the house number, for which, the sum of
> > > > numbers on the left is equal to the sum of numbers on the
> > > > right"
>
> Gauche Scheme
>
> (define (strand lst)
> (let go ((left-sum 0) (tail lst))
> (if (null? tail)
> #f
> (let ((right-sum (fold + 0 (cdr tail))))
> (cond ((< left-sum right-sum)
> (go (+ left-sum (car tail)) (cdr tail)))
> ((= left-sum right-sum) (car tail))
> (#t #f))))))
>
> (strand '(1 2 3 4 5 6 7 8))
> ===>
> 6
>
> (lrange 2 5)
> ===>
> (2 3 4)
>
> (any
> (lambda (n)
> (if (strand (lrange 50 n))
> n
> #f))
> (lrange 500 50 -1))
> ===>
> 352
>
> (strand (lrange 50 352))
> ===>
> 251
newLISP
(define (strand lst)
(let (left-sum 0
right-sum (apply + (rest lst) 2))
(while (< left-sum right-sum)
(++ left-sum (pop lst))
(-- right-sum (first lst)))
(and (= left-sum right-sum) (first lst))))
(sequence 2 4)
===>
(2 3 4)
(exists (fn (n) (strand (sequence 50 n))) (sequence 500 50))
===>
351
(strand (sequence 50 351))
===>
251