fork download
  1. ; vietnam snake
  2.  
  3. (define (filter pred? xs)
  4. (let loop ((xs xs) (ys '()))
  5. (cond ((null? xs) (reverse ys))
  6. ((pred? (car xs))
  7. (loop (cdr xs) (cons (car xs) ys)))
  8. (else (loop (cdr xs) ys)))))
  9.  
  10. (define (perm s) ; from Rosetta Code
  11. (cond ((null? s) '())
  12. ((null? (cdr s)) (list s))
  13. (else ;; extract each item in list in turn and perm the rest
  14. (let splice ((l '()) (m (car s)) (r (cdr s)))
  15. (append
  16. (map (lambda (x) (cons m x)) (perm (append l r)))
  17. (if (null? r) '()
  18. (splice (cons m l) (car r) (cdr r))))))))
  19.  
  20. (define (vietnam? xs)
  21. (= (+ (list-ref xs 0)
  22. (/ (* 13 (list-ref xs 1))
  23. (list-ref xs 2))
  24. (list-ref xs 3)
  25. (* 12 (list-ref xs 4))
  26. (- (list-ref xs 5))
  27. -11
  28. (/ (* (list-ref xs 6)
  29. (list-ref xs 7))
  30. (list-ref xs 8))
  31. -10)
  32. 66))
  33.  
  34. (define (lt? xs ys)
  35. (let loop ((xs xs) (ys ys))
  36. (cond ((null? xs) #f)
  37. ((null? ys) #t)
  38. ((< (car xs) (car ys)) #t)
  39. ((< (car ys) (car xs)) #f)
  40. (else (loop (cdr xs) (cdr ys))))))
  41.  
  42. (for-each
  43. (lambda (v) (display v) (newline))
  44. (sort lt? (filter vietnam? (perm '(1 2 3 4 5 6 7 8 9)))))
Time limit exceeded #stdin #stdout 5s 14720KB
stdin
Standard input is empty
stdout
Standard output is empty