fork(2) download
  1. ; monkeys and coconuts
  2.  
  3. (define (range . args)
  4. (case (length args)
  5. ((1) (range 0 (car args) (if (negative? (car args)) -1 1)))
  6. ((2) (range (car args) (cadr args) (if (< (car args) (cadr args)) 1 -1)))
  7. ((3) (let ((le? (if (negative? (caddr args)) >= <=)))
  8. (let loop ((x(car args)) (xs '()))
  9. (if (le? (cadr args) x)
  10. (reverse xs)
  11. (loop (+ x (caddr args)) (cons x xs))))))
  12. (else (error 'range "unrecognized arguments"))))
  13.  
  14. (define (coconuts sailors)
  15. (let loop ((nuts sailors) (left sailors)
  16. (takes sailors) (result (list)))
  17. (cond ((and (zero? takes) (zero? (modulo left sailors)))
  18. (reverse (cons (list left (quotient left sailors) 0) result)))
  19. ((and (positive? takes) (= (modulo left sailors) 1))
  20. (loop nuts (- left (quotient left sailors) 1) (- takes 1)
  21. (cons (list left (quotient left sailors) 1) result)))
  22. (else (loop (+ nuts 1) (+ nuts 1) sailors (list))))))
  23.  
  24. (display (coconuts 5)) (newline)
  25. (display (coconuts 6)) (newline)
  26.  
  27. (define (coconuts n)
  28. (if (odd? n)
  29. (- (expt n n) n -1)
  30. (* (- n 1) (- (expt n n) 1))))
  31.  
  32. (display (map coconuts (range 31))) (newline)
Success #stdin #stdout 11.05s 9832KB
stdin
Standard input is empty
stdout
((3121 624 1) (2496 499 1) (1996 399 1) (1596 319 1) (1276 255 1) (1020 204 0))
((233275 38879 1) (194395 32399 1) (161995 26999 1) (134995 22499 1) (112495 18749 1) (93745 15624 1) (78120 13020 0))
(0 1 3 25 765 3121 233275 823537 117440505 387420481 89999999991 285311670601 98077104930805 302875106592241 144456088732254195 437893890380859361 276701161105643274225 827240261886336764161 668888937280041138782191 1978419655660313589123961 1992294399999999999999999981 5842587018385982521381124401 7169985424648610705329581195243 20880467999847912034355032910545 30675922867556534862328873875406825 88817841970012523233890533447265601 153902989505178932769916857210005094375 443426488243037769948249630619149892777 894929124057841121289463662840844356943845 2567686153161211134561828214731016126483441 5970842830744820999999999999999999999999999971)