You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.3 KiB
Racket

#lang debug racket
(require racket/dict)
(provide (all-defined-out))
(define letter-scores
'((A 4 4)
(B 1 3)
(C 2 3)
(D 1 2)
(E 1 3)
(F 1 3)
(G 2 3)
(H 1 1)
(I 1 1)
(J 3 1)
(K 1 3)
(L 1 4)
(M 1 1)
(N 1 1)
(O 2 2)
(P 1 3)
(Q 2 2)
(R 1 3)
(S 3 3)
(T 4 4)
(U 1 1)
(V 4 4)
(W 4 4)
(X 3 3)
(Y 4 4)
(Z 3 3)
(a 3 3)
(b 1 2)
(c 2 3)
(d 2 1)
(e 2 3)
(f 3 3)
(g 3 3)
(h 1 1)
(i 1.5 1.5)
(j 3 1)
(k 1 3)
(l 1.5 1.5)
(m 1 1)
(n 1 1)
(o 2 2)
(p 1 2)
(q 2 1)
(r 1 3)
(s 3 3)
(t 3 3)
(u 1 1)
(v 4 4)
(w 4 4)
(x 3 3)
(y 4 4)
(z 3 3)))
(define left-score-table
(for/hasheqv ([(letter scores) (in-dict letter-scores)])
(values (car (string->list (symbol->string letter))) (car scores))))
(define right-score-table
(for/hasheqv ([(letter scores) (in-dict letter-scores)])
(values (car (string->list (symbol->string letter))) (cadr scores))))
(define (kernscore word)
(define cs (string->list word))
(/ (for/sum ([left-c (in-list cs)]
[right-c (in-list (cdr cs))])
(* (hash-ref right-score-table left-c)
(hash-ref left-score-table right-c)))
(length cs)))