blob: b4fa384f6b76bc84b3247559f06b9ee8fdddeb69 (
plain)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
(fate_version 1)
(declare_structure #card
(text name)
(int number)
(int score)
)
(local (lambda (list #card) (string)) card_generator)
(set! card_generator
(lambda ( (string family) )
(list:map
(lambda
(
(int number)
(string family)
)
(struct:set_fields (default #card)
(number (var number))
(name
(text
(switch (var number)
(1 Ace)
(11 Jack)
(12 Queen)
(13 Kind)
(cast string (var number))
)
of (var family)
)
)
(score (clamp 1 number 10))
)
)
(list:range 1 13 1)
(var family)
)
)
)
(global (list #card) deck_template)
(list:add_all!
(eval card_generator Hearts)
(eval card_generator Spades)
(eval card_generator Diamonds)
(eval card_generator Clubs)
deck_template
)
(define_sequence compute_score (((ptr (list #card)) deck) ((ptr int) result))
(local int aces_count 0)
(local int maybe_better_score 0)
(set! (at result) 0)
(foreach (at deck) card
(set! (at result) (+ card.score (at result)))
(if (= (var card.number) 1)
(++! aces_count)
)
)
(while (> aces_count 0)
(set! maybe_better_score (+ (at result) 10))
(if (=< maybe_better_score 21)
(set! (at result) (var maybe_better_score))
)
(--! aces_count)
)
)
|