Skip to content

Instantly share code, notes, and snippets.

@peas
Created October 5, 2010 03:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peas/610919 to your computer and use it in GitHub Desktop.
Save peas/610919 to your computer and use it in GitHub Desktop.
#lang racket
(define (pontos x)
(define (soma-lista x) (apply + x))
(define (strike? x) (= (length x) 1))
(define (spare? x) (= (soma-lista x) 10))
(define (pontos2 jogada-anterior jogadas)
; devolve a proxima jogada, que pode ter um ou dois lances
(define (proxima-jogada)
(if (= (first jogadas) 10)
(list 10)
(list (first jogadas) (first (rest jogadas)))
)
)
; devolve o restante das jogadas, removendo a proxima
(define (outras-jogadas)
(if (= (length (proxima-jogada)) 1)
(rest jogadas)
(rest (rest jogadas))
)
)
(if (empty? jogadas)
0
(+
(soma-lista (proxima-jogada))
(pontos2 (proxima-jogada) (outras-jogadas))
; calculando bonus
(cond
[(strike? jogada-anterior) (soma-lista (proxima-jogada))]
[(spare? jogada-anterior) (first (proxima-jogada))]
[else 0])
)
)
)
(pontos2 '(0 0) x)
)
(define (assert x y) (begin (display x) (display " should be ") (display y) (newline)))
(assert 10 (pontos '(1 2 3 4 0 0)))
(assert 22 (pontos '(5 5 3 4 1 1)))
(assert 29 (pontos '(5 5 6 4 1 1)))
(assert 20 (pontos '(10 2 3)))
(assert 40 (pontos '(10 10 2 3)))
(assert 28 (pontos '(5 5 5 5 1 1)))
(assert 38 (pontos '(1 1 10 5 5 1 4)))
@lucindo
Copy link

lucindo commented Oct 7, 2010

QUE IDENTAÇÃO É ESSA?
isso não é algol-like, entao feche todos os parenteses na mesma linha, pf.

@peas
Copy link
Author

peas commented Oct 7, 2010

huauha. calma, to aprendendo.

@leandrosilva
Copy link

@lucindo Java background!!! :D

@lucindo
Copy link

lucindo commented Oct 7, 2010

olha como fica melhor de ler: http://gist.github.com/615390

@peas
Copy link
Author

peas commented Oct 7, 2010

ficou bem bom mesmo. Lucindo, aproveitando, sabe a diferenca de usar [] ou () para cada clausula+resultado do cond? ou mesmo pra outra coisa? pq em scheme parece que posso usar tanto [] ou () que tanto faz?

@lucindo
Copy link

lucindo commented Oct 7, 2010

posso estar errado mas acho que tanto faz... em CL é só () mesmo.... acho até estranho quando vejo um [] :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment