1+ import { getScore } from "./getScore" ;
2+
13export const categories = [
24 "Aces" ,
35 "Two" ,
@@ -20,6 +22,15 @@ export type Category = (typeof categories)[number];
2022export type DiceValue = 1 | 2 | 3 | 4 | 5 | 6 ;
2123
2224export type ScoreSheet = Record < Category , DiceValue [ ] | null > ;
25+ export type FinishedScoreSheet = Record < Category , DiceValue [ ] > ;
26+
27+ export const isScoreSheet = ( s : any , nDice : number ) : s is ScoreSheet =>
28+ s &&
29+ categories . every (
30+ ( c ) =>
31+ ! s [ c ] ||
32+ ( Array . isArray ( s [ c ] ) && s [ c ] . length === nDice && s [ c ] . every ( isDiceValue ) )
33+ ) ;
2334
2435export const isDiceValue = ( d : any ) : d is DiceValue =>
2536 d === 1 || d === 2 || d === 3 || d === 4 || d === 5 || d === 6 ;
@@ -29,8 +40,15 @@ export const createEmptyScoreSheet = () =>
2940 categories . map ( ( category ) => [ category , null ] )
3041 ) as ScoreSheet ;
3142
32- export const isScoreSheetFinished = ( scoreSheet : ScoreSheet ) =>
33- categories . every ( ( c ) => scoreSheet [ c ] ) ;
43+ export const isScoreSheetFinished = (
44+ scoreSheet : ScoreSheet
45+ ) : scoreSheet is FinishedScoreSheet => categories . every ( ( c ) => scoreSheet [ c ] ) ;
3446
3547export const isScoreSheetEmpty = ( scoreSheet : ScoreSheet ) =>
3648 ! categories . some ( ( c ) => scoreSheet [ c ] ) ;
49+
50+ export const getScoreSheetScore = ( scoreSheet : ScoreSheet ) =>
51+ categories . reduce (
52+ ( sum , c ) => sum + ( scoreSheet [ c ] ? getScore ( c , scoreSheet [ c ] ) : 0 ) ,
53+ 0
54+ ) ;
0 commit comments