Deutsch   English   Français   Italiano  
<vc55k8$1nud1$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!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,comp.lang.scheme
Subject: palindromic number
Date: Sat, 14 Sep 2024 23:18:36 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 37
Message-ID: <vc55k8$1nud1$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Sun, 15 Sep 2024 01:18:37 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="0f43c1e237ee538ebdb678e0d9ed742f";
	logging-data="1833377"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX185GFI7PQXnb1F24UnVbyln"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:+MrsjK8VX7UXqmTcbsgmtKiQ6SA=
Bytes: 1719

> "A palindromic number reads the same both ways. The largest
> palindrome made from the product of two 2-digit numbers is 9009
> = 91 x 99. Find the largest palindrome made from the product of
> two 3-digit numbers."


Gauche Scheme

(use srfi-13)  ;; string-reverse

(define (divisor? n m) (= 0 (mod m n)))

"We don't need no stinkin' loops!"

(define (prod-of-3-dig-nums? n)
  (let1 sq (exact-integer-sqrt n)
    (any (is divisor? n) (lrange sq 999))))

(define (good? n)
  (let1 s (number->string n)
    (and (equal? s (string-reverse s))
         (prod-of-3-dig-nums? n))))

(find good? (lrange 998001 0 -1))
  ===>
906609

Given:

(define-syntax is
  (syntax-rules ()
    [(is x)
     (lambda (y) (equal? y x))]
    [(is compare x)
     (lambda (y) (compare y x))]
    [(is key compare x)
     (lambda (y) (compare (key y) x))]))