; last man standind
(define (f xs k)
(define (last-pair xs) (if (null? (cdr xs)) xs (last-pair (cdr xs))))
(define (cycle xs) (set-cdr! (last-pair xs) xs) xs)
(let loop ((k (- k 1)) (xs (cycle xs)))
(cond ((= (car xs) (cadr xs))
(car xs))
((zero? k)
(let ((k (cadr xs)))
(set-cdr! xs (cddr xs))
(loop k xs)))
(else (loop (- k 1) (cdr xs))))))
(display (f '(6 2 3 1 4 7 5) 3)) (newline)
OyBsYXN0IG1hbiBzdGFuZGluZAoKKGRlZmluZSAoZiB4cyBrKQogIChkZWZpbmUgKGxhc3QtcGFpciB4cykgKGlmIChudWxsPyAoY2RyIHhzKSkgeHMgKGxhc3QtcGFpciAoY2RyIHhzKSkpKQogIChkZWZpbmUgKGN5Y2xlIHhzKSAoc2V0LWNkciEgKGxhc3QtcGFpciB4cykgeHMpIHhzKQogIChsZXQgbG9vcCAoKGsgKC0gayAxKSkgKHhzIChjeWNsZSB4cykpKQogICAgKGNvbmQgKCg9IChjYXIgeHMpIChjYWRyIHhzKSkKICAgICAgICAgICAgKGNhciB4cykpCiAgICAgICAgICAoKHplcm8/IGspCiAgICAgICAgICAgIChsZXQgKChrIChjYWRyIHhzKSkpCiAgICAgICAgICAgICAgKHNldC1jZHIhIHhzIChjZGRyIHhzKSkKICAgICAgICAgICAgICAobG9vcCBrIHhzKSkpCiAgICAgICAgICAoZWxzZSAobG9vcCAoLSBrIDEpIChjZHIgeHMpKSkpKSkKCihkaXNwbGF5IChmICcoNiAyIDMgMSA0IDcgNSkgMykpIChuZXdsaW5lKQ==