• Re: Lisp problem to solve

    From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp on Thu Jun 19 22:19:47 2025
    From Newsgroup: comp.lang.lisp


    John Thingstad wrote:

    Pn++ Tue, 20 Nov 2007 23:59:24 +0100, skrev Mark Tarver <dr.mtarver@ukonline.co.uk>:

    On 20 Nov, 14:48, ryan.dufra...@gmail.com wrote:
    You are given a list of transactions along with the
    profits from the transactions. Write code that will return the
    transaction with the maximum profit. If many transactions have the
    same and maximusm profit, the code can return any of these. For
    example,
    given ((T1 20) (T2 88) (T3 188) (T4 99) (T5 66)), the code should.
    return T3.

    I am looking for code or pseudocode.

    (SETQ *LIST* '((T1 20) (T2 88) (T3 188) (T4 99) (T5 66)))

    Shortest solution is 1 line.

    (FIRST (FIRST (SORT *LIST* (FUNCTION (LAMBDA (X Y) (> (SECOND X)
    (SECOND Y)))))))

    Mark


    or (caar (sort *list* #'> :key #'second))

    Gauche Scheme:

    (define List '((T1 20) (T2 88) (T3 188) (T4 99) (T5 66)))

    (caar (sort List > last))
    ===>
    T3

    Without sorting:

    (car
    (reduce
    (lambda(b a) (if (> (last b) (last a)) b a))
    #f
    List))


    Reverse look-up in association list:

    (car
    (let ((biggest (apply max (map last List))))
    (rassoc (list biggest) List)))

    --- Synchronet 3.21d-Linux NewsLink 1.2
  • From B. Pym@Nobody447095@here-nor-there.org to comp.lang.lisp on Mon Jun 30 22:34:19 2025
    From Newsgroup: comp.lang.lisp

    B. Pym wrote:


    John Thingstad wrote:

    Pn++ Tue, 20 Nov 2007 23:59:24 +0100, skrev Mark Tarver <dr.mtarver@ukonline.co.uk>:

    On 20 Nov, 14:48, ryan.dufra...@gmail.com wrote:
    You are given a list of transactions along with the
    profits from the transactions. Write code that will return the
    transaction with the maximum profit. If many transactions have the
    same and maximusm profit, the code can return any of these. For
    example,
    given ((T1 20) (T2 88) (T3 188) (T4 99) (T5 66)), the code should.
    return T3.

    I am looking for code or pseudocode.

    (SETQ LIST '((T1 20) (T2 88) (T3 188) (T4 99) (T5 66)))

    Shortest solution is 1 line.

    (FIRST (FIRST (SORT LIST (FUNCTION (LAMBDA (X Y) (> (SECOND X)
    (SECOND Y)))))))

    Mark


    or (caar (sort list #'> :key #'second))

    Gauche Scheme:

    (define List '((T1 20) (T2 88) (T3 188) (T4 99) (T5 66)))

    (caar (sort List > last))
    ===>
    T3

    Without sorting:

    (car
    (reduce
    (lambda(b a) (if (> (last b) (last a)) b a))
    #f
    List))


    Reverse look-up in association list:

    (car
    (let ((biggest (apply max (map last List))))
    (rassoc (list biggest) List)))


    (car (max-by cadr List))

    Given:

    (define (max-by key seq)
    (reduce
    (lambda(b a) (if (> (key b)(key a)) b a))
    #f ;; Returned if list is empty.
    seq))
    --- Synchronet 3.21d-Linux NewsLink 1.2