-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdisplay.js
28 lines (27 loc) · 1.18 KB
/
display.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const mk_red = s => `<span style='color: red;'>${s}</span>`;
const suits = {
s: '♠',
h: mk_red('♥'),
c: '♣',
d: mk_red('♦')
};
const mk_rank_digits = (rc, suits_ranking) => {
switch(suits_ranking) {
case 'alternating': return [suits.d + rc, suits.c + rc, suits.h + rc, suits.s + rc];
case 'alphabetical': return [suits.c + rc, suits.d + rc, suits.h + rc, suits.s + rc];
case 'reversed_alpha': return [suits.s + rc, suits.h + rc, suits.d + rc, suits.c + rc];
default: throw 'Invalid suits ranking';
}
};
/** @param A is array of arrays @requires A.length >= 1 */
const concat_arrays = A => A.length === 1 ? A[0] : A[0].concat(concat_arrays(A.slice(1, A.length)));
const digits_display = lang => ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'].
concat(concat_arrays((lang.ace_high ?
['2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'] :
['A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K']).
map(rc => mk_rank_digits(rc, lang.suits_ranking)))).
concat(['🃏', '🃏']);
const mk_tetra_display = (A, lang) => {
const digits = digits_display(lang);
return A.map(d => digits[d]).join('');
};