Guest User

Untitled

a guest
Jun 24th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #lang racket
  2. (define (pontos x)
  3. (define (soma-lista x) (apply + x))
  4. (define (strike? x) (= (length x) 1))
  5. (define (spare? x) (= (soma-lista x) 10))
  6.  
  7. (define (pontos2 jogada-anterior jogadas)
  8. ;; devolve a proxima jogada, que pode ter um ou dois lances
  9. (define (proxima-jogada)
  10. (if (= (first jogadas) 10)
  11. (list 10)
  12. (list (first jogadas) (first (rest jogadas)))))
  13. ;; devolve o restante das jogadas, removendo a proxima
  14. (define (outras-jogadas)
  15. (if (= (length (proxima-jogada)) 1)
  16. (rest jogadas)
  17. (rest (rest jogadas))))
  18. (if (empty? jogadas) 0
  19. (+ (soma-lista (proxima-jogada))
  20. (pontos2 (proxima-jogada) (outras-jogadas))
  21. ;; calculando bonus
  22. (cond
  23. [(strike? jogada-anterior) (soma-lista (proxima-jogada))]
  24. [(spare? jogada-anterior) (first (proxima-jogada))]
  25. [else 0]))))
  26. (pontos2 '(0 0) x))
  27.  
  28. (define (assert x y)
  29. (begin (display x) (display " should be ") (display y) (newline)))
  30.  
  31. (assert 10 (pontos '(1 2 3 4 0 0)))
  32. (assert 22 (pontos '(5 5 3 4 1 1)))
  33. (assert 29 (pontos '(5 5 6 4 1 1)))
  34. (assert 20 (pontos '(10 2 3)))
  35. (assert 40 (pontos '(10 10 2 3)))
  36. (assert 28 (pontos '(5 5 5 5 1 1)))
  37. (assert 38 (pontos '(1 1 10 5 5 1 4)))
Add Comment
Please, Sign In to add comment