Re: Rosetta birthday problem

Liste des GroupesRevenir à cl scheme 
Sujet : Re: Rosetta birthday problem
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.lisp comp.lang.scheme
Date : 27. Jul 2024, 09:43:35
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240726235406.930@kylheku.com>
References : 1
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2024-07-26, B. Pym <Nobody447095@here-nor-there.org> wrote:
http://rosettacode.org/wiki/Cheryl%27s_birthday
>
Cheryl's birthday
 
Albert and Bernard just became friends with Cheryl, and they
want to know when her birthday is.
 
Cheryl gave them a list of ten possible dates:
 
     May 15,     May 16,     May 19
     June 17,    June 18
     July 14,    July 16
     August 14,  August 15,  August 17
 
Cheryl then tells Albert the   month   of birth,   and Bernard
the   day   (of the month)   of birth.
 
1)  Albert:   I don't know when Cheryl's birthday is, but I
know that Bernard does not know, too.
 
2)  Bernard:  At first I didn't know when Cheryl's birthday is,
but I know now.
 
3)  Albert:   Then I also know when Cheryl's birthday is.
>
>
Gauche Scheme
>
(use gauche.generator)
(use gauche.collection)
>
(define (remove-from xs key pred  group?)
  (let* ((keys (map key xs))
         (bad
           (filter
             (lambda (k)
               (let ((cnt (count (lambda(x) (equal? x k)) keys)))
                 (pred cnt)))
             keys)))
    (append-map
      (lambda(g)
        (if (any (lambda(x) (member (key x) bad)) g) '() g))
      (if group?
        (group-collection xs :key car :test equal?)
        (map list xs)))))
>
(define (foo)
  (define dates
    (slices
      (with-input-from-string
        "May 15     May 16     May 19
        June 17    June 18
        July 14    July 16
        August 14  August 15  August 17"
        (cut  generator->list read))
      2))
  (set! dates (remove-from dates cadr (^c (= c 1)) #t))
  (print dates)
  (set! dates (remove-from dates cadr (^c (> c 1)) #f))
  (print dates)
  (set! dates (remove-from dates car (^c (> c 1)) #t))
  dates)
>
 ===>
((July 14) (July 16) (August 14) (August 15) (August 17))
((July 16) (August 15) (August 17))
((July 16))

$ txr cheryls-birthday.tl
((July 14) (July 16) (August 14) (August 15) (August 17))
((July 16) (August 15) (August 17))
((July 16))

$ cat cheryls-birthday.tl
(defun munge (groupfn selfn keepfn filfn data)
  (flow data
    (group-by groupfn)
    (mappend (do if-match (@nil @pair) @1 (list [selfn pair])))
    (keepfn (opip filfn (member @1 @@1)) data)))

(flow "May 15,     May 16,     May 19\n   \
       June 17,    June 18\n              \
       July 14,    July 16\n              \
       August 14,  August 15,  August 17\n"
  (remq #\,)
  read-objects
  (tuples 2)
  (munge second first remove-if first)
  prinl
  (munge second second keep-if second)
  prinl
  (munge first second keep-if second)
  prinl)

--
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca

Date Sujet#  Auteur
26 Jul 24 * Rosetta birthday problem3B. Pym
27 Jul 24 +- Re: Rosetta birthday problem1Kaz Kylheku
4 Aug 24 `- Re: Rosetta birthday problem1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal