@tungstenstudio/outschart-generator 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,66 @@
1
+ {
2
+ "meta": {
3
+ "description": "Physical dartboard layout: number order, neighbors, and miss targets for each bed",
4
+ "notes": "Board order is clockwise starting from the top. Each number has two lateral neighbors (clockwise/counterclockwise) and each bed has radial neighbors (closer to or farther from the center)."
5
+ },
6
+ "boardOrder": [20, 1, 18, 4, 13, 6, 10, 15, 2, 17, 3, 19, 7, 16, 8, 11, 14, 9, 12, 5],
7
+ "neighbors": {
8
+ "1": { "clockwise": 18, "counterClockwise": 20 },
9
+ "2": { "clockwise": 17, "counterClockwise": 15 },
10
+ "3": { "clockwise": 19, "counterClockwise": 17 },
11
+ "4": { "clockwise": 13, "counterClockwise": 18 },
12
+ "5": { "clockwise": 20, "counterClockwise": 12 },
13
+ "6": { "clockwise": 10, "counterClockwise": 13 },
14
+ "7": { "clockwise": 16, "counterClockwise": 19 },
15
+ "8": { "clockwise": 11, "counterClockwise": 16 },
16
+ "9": { "clockwise": 12, "counterClockwise": 14 },
17
+ "10": { "clockwise": 15, "counterClockwise": 6 },
18
+ "11": { "clockwise": 14, "counterClockwise": 8 },
19
+ "12": { "clockwise": 5, "counterClockwise": 9 },
20
+ "13": { "clockwise": 6, "counterClockwise": 4 },
21
+ "14": { "clockwise": 9, "counterClockwise": 11 },
22
+ "15": { "clockwise": 2, "counterClockwise": 10 },
23
+ "16": { "clockwise": 8, "counterClockwise": 7 },
24
+ "17": { "clockwise": 3, "counterClockwise": 2 },
25
+ "18": { "clockwise": 4, "counterClockwise": 1 },
26
+ "19": { "clockwise": 7, "counterClockwise": 3 },
27
+ "20": { "clockwise": 5, "counterClockwise": 1 }
28
+ },
29
+ "radialBeds": {
30
+ "description": "From center outward: Bull, 25, smallSingle, treble, largeSingle, double, off-board",
31
+ "order": ["Bull", "25", "smallSingle", "treble", "largeSingle", "double", "off"]
32
+ },
33
+ "missTargets": {
34
+ "description": "For each bed type, the possible miss results: radial (in/out from center) and lateral (adjacent numbers). 'off' means off the board (no score).",
35
+ "Bull": {
36
+ "radialOut": "25",
37
+ "radialIn": null,
38
+ "lateralMiss": false
39
+ },
40
+ "25": {
41
+ "radialOut": "smallSingle",
42
+ "radialIn": "Bull",
43
+ "lateralMiss": false
44
+ },
45
+ "smallSingle": {
46
+ "radialOut": "treble",
47
+ "radialIn": "25",
48
+ "lateralMiss": true
49
+ },
50
+ "treble": {
51
+ "radialOut": "largeSingle",
52
+ "radialIn": "smallSingle",
53
+ "lateralMiss": true
54
+ },
55
+ "largeSingle": {
56
+ "radialOut": "double",
57
+ "radialIn": "treble",
58
+ "lateralMiss": true
59
+ },
60
+ "double": {
61
+ "radialOut": "off",
62
+ "radialIn": "largeSingle",
63
+ "lateralMiss": true
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,168 @@
1
+ import type { CheckoutChart } from "../types.js";
2
+
3
+ export const DOUBLE_OUT_BOGEY_NUMBERS: number[] = [159,162,163,165,166,168,169];
4
+
5
+ export const DOUBLE_OUT_CHECKOUTS: CheckoutChart = {
6
+ 2: { darts: ['D1'], numDarts: 1 },
7
+ 3: { darts: ['1', 'D1'], numDarts: 2 },
8
+ 4: { darts: ['D2'], numDarts: 1 },
9
+ 5: { darts: ['1', 'D2'], numDarts: 2 },
10
+ 6: { darts: ['D3'], numDarts: 1 },
11
+ 7: { darts: ['3', 'D2'], numDarts: 2 },
12
+ 8: { darts: ['D4'], numDarts: 1 },
13
+ 9: { darts: ['1', 'D4'], numDarts: 2 },
14
+ 10: { darts: ['D5'], numDarts: 1 },
15
+ 11: { darts: ['3', 'D4'], numDarts: 2 },
16
+ 12: { darts: ['D6'], numDarts: 1 },
17
+ 13: { darts: ['5', 'D4'], numDarts: 2 },
18
+ 14: { darts: ['D7'], numDarts: 1 },
19
+ 15: { darts: ['7', 'D4'], numDarts: 2 },
20
+ 16: { darts: ['D8'], numDarts: 1 },
21
+ 17: { darts: ['1', 'D8'], numDarts: 2 },
22
+ 18: { darts: ['D9'], numDarts: 1 },
23
+ 19: { darts: ['3', 'D8'], numDarts: 2 },
24
+ 20: { darts: ['D10'], numDarts: 1 },
25
+ 21: { darts: ['5', 'D8'], numDarts: 2 },
26
+ 22: { darts: ['D11'], numDarts: 1 },
27
+ 23: { darts: ['7', 'D8'], numDarts: 2 },
28
+ 24: { darts: ['D12'], numDarts: 1 },
29
+ 25: { darts: ['9', 'D8'], numDarts: 2 },
30
+ 26: { darts: ['D13'], numDarts: 1 },
31
+ 27: { darts: ['3', 'D12'], numDarts: 2 },
32
+ 28: { darts: ['D14'], numDarts: 1 },
33
+ 29: { darts: ['5', 'D12'], numDarts: 2 },
34
+ 30: { darts: ['D15'], numDarts: 1 },
35
+ 31: { darts: ['7', 'D12'], numDarts: 2 },
36
+ 32: { darts: ['D16'], numDarts: 1 },
37
+ 33: { darts: ['1', 'D16'], numDarts: 2 },
38
+ 34: { darts: ['D17'], numDarts: 1 },
39
+ 35: { darts: ['3', 'D16'], numDarts: 2 },
40
+ 36: { darts: ['D18'], numDarts: 1 },
41
+ 37: { darts: ['5', 'D16'], numDarts: 2 },
42
+ 38: { darts: ['D19'], numDarts: 1 },
43
+ 39: { darts: ['7', 'D16'], numDarts: 2 },
44
+ 40: { darts: ['D20'], numDarts: 1 },
45
+ 41: { darts: ['9', 'D16'], numDarts: 2 },
46
+ 42: { darts: ['10', 'D16'], numDarts: 2 },
47
+ 43: { darts: ['11', 'D16'], numDarts: 2 },
48
+ 44: { darts: ['12', 'D16'], numDarts: 2 },
49
+ 45: { darts: ['13', 'D16'], numDarts: 2 },
50
+ 46: { darts: ['14', 'D16'], numDarts: 2 },
51
+ 47: { darts: ['15', 'D16'], numDarts: 2 },
52
+ 48: { darts: ['16', 'D16'], numDarts: 2 },
53
+ 49: { darts: ['9', 'D20'], numDarts: 2 },
54
+ 50: { darts: ['Bull'], numDarts: 1 },
55
+ 51: { darts: ['11', 'D20'], numDarts: 2 },
56
+ 52: { darts: ['12', 'D20'], numDarts: 2 },
57
+ 53: { darts: ['13', 'D20'], numDarts: 2 },
58
+ 54: { darts: ['14', 'D20'], numDarts: 2 },
59
+ 55: { darts: ['15', 'D20'], numDarts: 2 },
60
+ 56: { darts: ['16', 'D20'], numDarts: 2 },
61
+ 57: { darts: ['17', 'D20'], numDarts: 2 },
62
+ 58: { darts: ['18', 'D20'], numDarts: 2 },
63
+ 59: { darts: ['19', 'D20'], numDarts: 2 },
64
+ 60: { darts: ['20', 'D20'], numDarts: 2 },
65
+ 61: { darts: ['T15', 'D8'], numDarts: 2 },
66
+ 62: { darts: ['T10', 'D16'], numDarts: 2 },
67
+ 63: { darts: ['T13', 'D12'], numDarts: 2 },
68
+ 64: { darts: ['T16', 'D8'], numDarts: 2 },
69
+ 65: { darts: ['T19', 'D4'], numDarts: 2 },
70
+ 66: { darts: ['T10', 'D18'], numDarts: 2 },
71
+ 67: { darts: ['T17', 'D8'], numDarts: 2 },
72
+ 68: { darts: ['T20', 'D4'], numDarts: 2 },
73
+ 69: { darts: ['T15', 'D12'], numDarts: 2 },
74
+ 70: { darts: ['T10', 'D20'], numDarts: 2 },
75
+ 71: { darts: ['T13', 'D16'], numDarts: 2 },
76
+ 72: { darts: ['T16', 'D12'], numDarts: 2 },
77
+ 73: { darts: ['T19', 'D8'], numDarts: 2 },
78
+ 74: { darts: ['T14', 'D16'], numDarts: 2 },
79
+ 75: { darts: ['T17', 'D12'], numDarts: 2 },
80
+ 76: { darts: ['T20', 'D8'], numDarts: 2 },
81
+ 77: { darts: ['T19', 'D10'], numDarts: 2 },
82
+ 78: { darts: ['T18', 'D12'], numDarts: 2 },
83
+ 79: { darts: ['T13', 'D20'], numDarts: 2 },
84
+ 80: { darts: ['T20', 'D10'], numDarts: 2 },
85
+ 81: { darts: ['T19', 'D12'], numDarts: 2 },
86
+ 82: { darts: ['T14', 'D20'], numDarts: 2 },
87
+ 83: { darts: ['T17', 'D16'], numDarts: 2 },
88
+ 84: { darts: ['T20', 'D12'], numDarts: 2 },
89
+ 85: { darts: ['T15', 'D20'], numDarts: 2 },
90
+ 86: { darts: ['T18', 'D16'], numDarts: 2 },
91
+ 87: { darts: ['T17', 'D18'], numDarts: 2 },
92
+ 88: { darts: ['T16', 'D20'], numDarts: 2 },
93
+ 89: { darts: ['T19', 'D16'], numDarts: 2 },
94
+ 90: { darts: ['T20', 'D15'], numDarts: 2 },
95
+ 91: { darts: ['T17', 'D20'], numDarts: 2 },
96
+ 92: { darts: ['T20', 'D16'], numDarts: 2 },
97
+ 93: { darts: ['T19', 'D18'], numDarts: 2 },
98
+ 94: { darts: ['T18', 'D20'], numDarts: 2 },
99
+ 95: { darts: ['T19', 'D19'], numDarts: 2 },
100
+ 96: { darts: ['T20', 'D18'], numDarts: 2 },
101
+ 97: { darts: ['T19', 'D20'], numDarts: 2 },
102
+ 98: { darts: ['T20', 'D19'], numDarts: 2 },
103
+ 99: { darts: ['T19', '10', 'D16'], numDarts: 3 },
104
+ 100: { darts: ['T20', 'D20'], numDarts: 2 },
105
+ 101: { darts: ['T17', 'Bull'], numDarts: 2 },
106
+ 102: { darts: ['T20', '10', 'D16'], numDarts: 3 },
107
+ 103: { darts: ['T19', '10', 'D18'], numDarts: 3 },
108
+ 104: { darts: ['T18', 'Bull'], numDarts: 2 },
109
+ 105: { darts: ['T20', '13', 'D16'], numDarts: 3 },
110
+ 106: { darts: ['T20', '14', 'D16'], numDarts: 3 },
111
+ 107: { darts: ['T19', 'Bull'], numDarts: 2 },
112
+ 108: { darts: ['T20', '16', 'D16'], numDarts: 3 },
113
+ 109: { darts: ['T20', '17', 'D16'], numDarts: 3 },
114
+ 110: { darts: ['T20', 'Bull'], numDarts: 2 },
115
+ 111: { darts: ['T20', '19', 'D16'], numDarts: 3 },
116
+ 112: { darts: ['T20', '12', 'D20'], numDarts: 3 },
117
+ 113: { darts: ['T20', '13', 'D20'], numDarts: 3 },
118
+ 114: { darts: ['T20', '14', 'D20'], numDarts: 3 },
119
+ 115: { darts: ['T20', '15', 'D20'], numDarts: 3 },
120
+ 116: { darts: ['T20', '16', 'D20'], numDarts: 3 },
121
+ 117: { darts: ['T20', '17', 'D20'], numDarts: 3 },
122
+ 118: { darts: ['T20', '18', 'D20'], numDarts: 3 },
123
+ 119: { darts: ['T19', 'T10', 'D16'], numDarts: 3 },
124
+ 120: { darts: ['T20', '20', 'D20'], numDarts: 3 },
125
+ 121: { darts: ['T17', 'T10', 'D20'], numDarts: 3 },
126
+ 122: { darts: ['T18', 'T20', 'D4'], numDarts: 3 },
127
+ 123: { darts: ['T19', 'T16', 'D9'], numDarts: 3 },
128
+ 124: { darts: ['T20', 'T14', 'D11'], numDarts: 3 },
129
+ 125: { darts: ['25', 'T20', 'D20'], numDarts: 3 },
130
+ 126: { darts: ['T19', 'T19', 'D6'], numDarts: 3 },
131
+ 127: { darts: ['T20', 'T17', 'D8'], numDarts: 3 },
132
+ 128: { darts: ['T18', 'T14', 'D16'], numDarts: 3 },
133
+ 129: { darts: ['T19', 'T16', 'D12'], numDarts: 3 },
134
+ 130: { darts: ['T20', '20', 'Bull'], numDarts: 3 },
135
+ 131: { darts: ['T20', 'T13', 'D16'], numDarts: 3 },
136
+ 132: { darts: ['Bull', 'T14', 'D20'], numDarts: 3 },
137
+ 133: { darts: ['T20', 'T19', 'D8'], numDarts: 3 },
138
+ 134: { darts: ['T20', 'T14', 'D16'], numDarts: 3 },
139
+ 135: { darts: ['Bull', 'T15', 'D20'], numDarts: 3 },
140
+ 136: { darts: ['T20', 'T20', 'D8'], numDarts: 3 },
141
+ 137: { darts: ['T20', 'T19', 'D10'], numDarts: 3 },
142
+ 138: { darts: ['T20', 'T18', 'D12'], numDarts: 3 },
143
+ 139: { darts: ['T19', 'T14', 'D20'], numDarts: 3 },
144
+ 140: { darts: ['T20', 'T20', 'D10'], numDarts: 3 },
145
+ 141: { darts: ['T20', 'T19', 'D12'], numDarts: 3 },
146
+ 142: { darts: ['T20', 'T14', 'D20'], numDarts: 3 },
147
+ 143: { darts: ['T20', 'T17', 'D16'], numDarts: 3 },
148
+ 144: { darts: ['T20', 'T20', 'D12'], numDarts: 3 },
149
+ 145: { darts: ['T20', 'T15', 'D20'], numDarts: 3 },
150
+ 146: { darts: ['T20', 'T18', 'D16'], numDarts: 3 },
151
+ 147: { darts: ['T20', 'T17', 'D18'], numDarts: 3 },
152
+ 148: { darts: ['T20', 'T16', 'D20'], numDarts: 3 },
153
+ 149: { darts: ['T20', 'T19', 'D16'], numDarts: 3 },
154
+ 150: { darts: ['T20', 'T18', 'D18'], numDarts: 3 },
155
+ 151: { darts: ['T20', 'T17', 'D20'], numDarts: 3 },
156
+ 152: { darts: ['T20', 'T20', 'D16'], numDarts: 3 },
157
+ 153: { darts: ['T20', 'T19', 'D18'], numDarts: 3 },
158
+ 154: { darts: ['T20', 'T18', 'D20'], numDarts: 3 },
159
+ 155: { darts: ['T20', 'T19', 'D19'], numDarts: 3 },
160
+ 156: { darts: ['T20', 'T20', 'D18'], numDarts: 3 },
161
+ 157: { darts: ['T20', 'T19', 'D20'], numDarts: 3 },
162
+ 158: { darts: ['T20', 'T20', 'D19'], numDarts: 3 },
163
+ 160: { darts: ['T20', 'T20', 'D20'], numDarts: 3 },
164
+ 161: { darts: ['T20', 'T17', 'Bull'], numDarts: 3 },
165
+ 164: { darts: ['T20', 'T18', 'Bull'], numDarts: 3 },
166
+ 167: { darts: ['T20', 'T19', 'Bull'], numDarts: 3 },
167
+ 170: { darts: ['T20', 'T20', 'Bull'], numDarts: 3 },
168
+ };
@@ -0,0 +1,177 @@
1
+ import type { CheckoutChart } from "../types.js";
2
+
3
+ export const SINGLE_OUT_BOGEY_NUMBERS: number[] = [163,166,169,172,173,175,176,178,179];
4
+
5
+ export const SINGLE_OUT_CHECKOUTS: CheckoutChart = {
6
+ 1: { darts: ['1'], numDarts: 1 },
7
+ 2: { darts: ['2'], numDarts: 1 },
8
+ 3: { darts: ['3'], numDarts: 1 },
9
+ 4: { darts: ['4'], numDarts: 1 },
10
+ 5: { darts: ['5'], numDarts: 1 },
11
+ 6: { darts: ['6'], numDarts: 1 },
12
+ 7: { darts: ['7'], numDarts: 1 },
13
+ 8: { darts: ['8'], numDarts: 1 },
14
+ 9: { darts: ['9'], numDarts: 1 },
15
+ 10: { darts: ['10'], numDarts: 1 },
16
+ 11: { darts: ['11'], numDarts: 1 },
17
+ 12: { darts: ['12'], numDarts: 1 },
18
+ 13: { darts: ['13'], numDarts: 1 },
19
+ 14: { darts: ['14'], numDarts: 1 },
20
+ 15: { darts: ['15'], numDarts: 1 },
21
+ 16: { darts: ['16'], numDarts: 1 },
22
+ 17: { darts: ['17'], numDarts: 1 },
23
+ 18: { darts: ['18'], numDarts: 1 },
24
+ 19: { darts: ['19'], numDarts: 1 },
25
+ 20: { darts: ['20'], numDarts: 1 },
26
+ 21: { darts: ['7', '14'], numDarts: 2, alternates: [['1', '20'], ['2', '19'], ['3', '18'], ['4', '17'], ['5', '16']] },
27
+ 22: { darts: ['D11'], numDarts: 1, alternates: [['2', '20'], ['3', '19'], ['4', '18'], ['5', '17'], ['6', '16']] },
28
+ 23: { darts: ['3', '20'], numDarts: 2, alternates: [['4', '19'], ['5', '18'], ['6', '17'], ['7', '16'], ['8', '15']] },
29
+ 24: { darts: ['D12'], numDarts: 1, alternates: [['8', '16'], ['4', '20'], ['5', '19'], ['6', '18'], ['7', '17']] },
30
+ 25: { darts: ['9', '16'], numDarts: 2, alternates: [['25'], ['5', '20'], ['6', '19'], ['7', '18'], ['8', '17']] },
31
+ 26: { darts: ['D13'], numDarts: 1, alternates: [['6', '20'], ['7', '19'], ['8', '18'], ['13', '13'], ['2', 'D12']] },
32
+ 27: { darts: ['9', '18'], numDarts: 2, alternates: [['7', '20'], ['8', '19'], ['3', 'D12'], ['10', '17'], ['11', '16']] },
33
+ 28: { darts: ['D14'], numDarts: 1, alternates: [['8', '20'], ['9', '19'], ['14', '14'], ['4', 'D12'], ['10', '18']] },
34
+ 29: { darts: ['9', '20'], numDarts: 2, alternates: [['5', 'D12'], ['11', '18'], ['12', '17'], ['14', '15']] },
35
+ 30: { darts: ['D15'], numDarts: 1, alternates: [['10', '20'], ['15', '15'], ['6', 'D12'], ['11', '19'], ['12', '18']] },
36
+ 31: { darts: ['12', '19'], numDarts: 2, alternates: [['7', 'D12'], ['13', '18'], ['14', '17'], ['3', 'D14'], ['11', '20']] },
37
+ 32: { darts: ['D16'], numDarts: 1, alternates: [['16', '16'], ['8', 'D12'], ['13', '19'], ['15', '17'], ['4', 'D14']] },
38
+ 33: { darts: ['14', '19'], numDarts: 2, alternates: [['1', 'D16'], ['9', 'D12'], ['16', '17'], ['5', 'D14'], ['13', '20']] },
39
+ 34: { darts: ['D17'], numDarts: 1, alternates: [['2', 'D16'], ['10', 'D12'], ['15', '19'], ['16', '18'], ['6', 'D14']] },
40
+ 35: { darts: ['15', '20'], numDarts: 2, alternates: [['3', 'D16'], ['11', 'D12'], ['16', '19'], ['17', '18'], ['7', 'D14']] },
41
+ 36: { darts: ['D18'], numDarts: 1, alternates: [['4', 'D16'], ['17', '19'], ['8', 'D14'], ['12', 'D12'], ['18', '18']] },
42
+ 37: { darts: ['18', '19'], numDarts: 2, alternates: [['5', 'D16'], ['1', 'D18'], ['17', '20'], ['3', 'D17'], ['7', 'D15']] },
43
+ 38: { darts: ['D19'], numDarts: 1, alternates: [['6', 'D16'], ['18', '20'], ['4', 'D17'], ['8', 'D15'], ['2', 'D18']] },
44
+ 39: { darts: ['19', '20'], numDarts: 2, alternates: [['7', 'D16'], ['3', 'D18'], ['9', 'D15'], ['1', 'D19'], ['5', 'D17']] },
45
+ 40: { darts: ['D20'], numDarts: 1, alternates: [['8', 'D16'], ['4', 'D18'], ['20', '20'], ['6', 'D17'], ['10', 'D15']] },
46
+ 41: { darts: ['9', 'D16'], numDarts: 2, alternates: [['1', 'D20'], ['7', 'D17'], ['11', 'D15'], ['3', 'D19'], ['5', 'D18']] },
47
+ 42: { darts: ['T14'], numDarts: 1, alternates: [['10', 'D16'], ['2', 'D20'], ['14', 'D14'], ['6', 'D18'], ['4', 'D19']] },
48
+ 43: { darts: ['3', 'D20'], numDarts: 2, alternates: [['11', 'D16'], ['7', 'D18'], ['13', 'D15'], ['19', 'D12'], ['5', 'D19']] },
49
+ 44: { darts: ['12', 'D16'], numDarts: 2, alternates: [['8', 'D18'], ['4', 'D20'], ['6', 'D19'], ['10', 'D17'], ['14', 'D15']] },
50
+ 45: { darts: ['T15'], numDarts: 1, alternates: [['13', 'D16'], ['5', 'D20'], ['9', 'D18'], ['7', 'D19'], ['15', 'D15']] },
51
+ 46: { darts: ['6', 'D20'], numDarts: 2, alternates: [['14', 'D16'], ['10', 'D18'], ['8', 'D19']] },
52
+ 47: { darts: ['15', 'D16'], numDarts: 2, alternates: [['11', 'D18'], ['7', 'D20'], ['9', 'D19']] },
53
+ 48: { darts: ['T16'], numDarts: 1, alternates: [['16', 'D16'], ['8', 'D20'], ['10', 'D19'], ['12', 'D18'], ['14', 'D17']] },
54
+ 49: { darts: ['13', 'D18'], numDarts: 2, alternates: [['15', 'D17'], ['9', 'D20'], ['11', 'D19'], ['17', 'D16'], ['19', 'D15']] },
55
+ 50: { darts: ['10', 'D20'], numDarts: 2, alternates: [['Bull'], ['14', 'D18'], ['12', 'D19'], ['16', 'D17'], ['D16', '18']] },
56
+ 51: { darts: ['T17'], numDarts: 1, alternates: [['17', 'D17'], ['13', 'D19'], ['11', 'D20'], ['19', 'D16'], ['15', 'D18']] },
57
+ 52: { darts: ['16', 'D18'], numDarts: 2, alternates: [['12', 'D20'], ['20', 'D16'], ['14', 'D19'], ['18', 'D17']] },
58
+ 53: { darts: ['17', 'D18'], numDarts: 2, alternates: [['13', 'D20'], ['15', 'D19']] },
59
+ 54: { darts: ['T18'], numDarts: 1, alternates: [['14', 'D20'], ['18', 'D18'], ['16', 'D19'], ['20', 'D17']] },
60
+ 55: { darts: ['15', 'D20'], numDarts: 2, alternates: [['17', 'D19']] },
61
+ 56: { darts: ['16', 'D20'], numDarts: 2, alternates: [['18', 'D19']] },
62
+ 57: { darts: ['T19'], numDarts: 1, alternates: [['19', 'D19'], ['17', 'D20']] },
63
+ 58: { darts: ['18', 'D20'], numDarts: 2 },
64
+ 59: { darts: ['19', 'D20'], numDarts: 2 },
65
+ 60: { darts: ['T20'], numDarts: 1, alternates: [['20', 'D20']] },
66
+ 61: { darts: ['T16', '13'], numDarts: 2, alternates: [['T7', 'D20'], ['T14', '19']] },
67
+ 62: { darts: ['T14', '20'], numDarts: 2, alternates: [['D11', 'D20'], ['D15', 'D16'], ['T15', '17'], ['T16', '14'], ['D13', 'D18']] },
68
+ 63: { darts: ['T15', '18'], numDarts: 2, alternates: [['T13', 'D12'], ['T16', '15'], ['T17', '12']] },
69
+ 64: { darts: ['T16', '16'], numDarts: 2, alternates: [['D16', 'D16']] },
70
+ 65: { darts: ['T15', '20'], numDarts: 2, alternates: [['T17', '14'], ['T11', 'D16'], ['25', 'D20'], ['T16', '17']] },
71
+ 66: { darts: ['T16', '18'], numDarts: 2, alternates: [['T18', '12'], ['T17', '15']] },
72
+ 67: { darts: ['T16', '19'], numDarts: 2, alternates: [['T17', '16'], ['T18', '13']] },
73
+ 68: { darts: ['T17', '17'], numDarts: 2, alternates: [['T18', '14'], ['D18', 'D16'], ['D14', 'D20'], ['T16', '20']] },
74
+ 69: { darts: ['T19', '12'], numDarts: 2, alternates: [['T18', '15']] },
75
+ 70: { darts: ['T19', '13'], numDarts: 2, alternates: [['T10', 'D20'], ['D16', 'D19'], ['D20', 'D15'], ['T17', '19'], ['T18', '16']] },
76
+ 71: { darts: ['T17', '20'], numDarts: 2, alternates: [['T19', '14'], ['T18', '17']] },
77
+ 72: { darts: ['T18', '18'], numDarts: 2, alternates: [['T12', 'D18']] },
78
+ 73: { darts: ['T19', '16'], numDarts: 2, alternates: [['T18', '19'], ['T20', '13']] },
79
+ 74: { darts: ['T20', '14'], numDarts: 2, alternates: [['T14', 'D16'], ['D17', 'D20'], ['T18', '20'], ['T19', '17']] },
80
+ 75: { darts: ['T19', '18'], numDarts: 2, alternates: [['T20', '15'], ['T15', 'D15']] },
81
+ 76: { darts: ['T19', '19'], numDarts: 2, alternates: [['T20', '16']] },
82
+ 77: { darts: ['T20', '17'], numDarts: 2, alternates: [['T19', '20']] },
83
+ 78: { darts: ['T18', 'D12'], numDarts: 2, alternates: [['T14', 'D18'], ['D19', 'D20'], ['T16', 'D15'], ['18', 'T20']] },
84
+ 79: { darts: ['T20', '19'], numDarts: 2, alternates: [['T13', 'D20']] },
85
+ 80: { darts: ['T20', '20'], numDarts: 2, alternates: [['D20', 'D20']] },
86
+ 81: { darts: ['T19', 'D12'], numDarts: 2, alternates: [['T15', 'D18'], ['T20', 'T7'], ['T19', 'T8'], ['T18', 'T9'], ['T16', 'T11']] },
87
+ 82: { darts: ['T14', 'D20'], numDarts: 2, alternates: [['Bull', 'D16'], ['T18', 'D14'], ['T16', 'D17']] },
88
+ 83: { darts: ['T17', 'D16'], numDarts: 2, alternates: [['T15', 'D19'], ['T19', 'D13']] },
89
+ 84: { darts: ['T16', 'D18'], numDarts: 2, alternates: [['T20', 'D12'], ['T20', 'T8'], ['T19', 'T9'], ['T17', 'T11'], ['T14', 'T14']] },
90
+ 85: { darts: ['T15', 'D20'], numDarts: 2, alternates: [['T19', 'D14'], ['T17', 'D17']] },
91
+ 86: { darts: ['T18', 'D16'], numDarts: 2, alternates: [['T16', 'D19'], ['T20', 'D13']] },
92
+ 87: { darts: ['T20', 'T9'], numDarts: 2, alternates: [['T15', 'T14'], ['T17', 'D18'], ['T19', 'D15'], ['T19', 'T10'], ['T18', 'T11']] },
93
+ 88: { darts: ['T16', 'D20'], numDarts: 2, alternates: [['T20', 'D14'], ['T18', 'D17'], ['Bull', 'D19']] },
94
+ 89: { darts: ['T19', 'D16'], numDarts: 2, alternates: [['T17', 'D19']] },
95
+ 90: { darts: ['T18', 'D18'], numDarts: 2, alternates: [['T20', 'D15'], ['Bull', 'D20'], ['T20', 'T10'], ['T19', 'T11'], ['T16', 'T14']] },
96
+ 91: { darts: ['T17', 'D20'], numDarts: 2, alternates: [['T19', 'D17']] },
97
+ 92: { darts: ['T20', 'D16'], numDarts: 2, alternates: [['T18', 'D19']] },
98
+ 93: { darts: ['T19', 'D18'], numDarts: 2, alternates: [['T20', 'T11'], ['T17', 'T14'], ['T19', 'T12'], ['T18', 'T13'], ['T16', 'T15']] },
99
+ 94: { darts: ['T18', 'D20'], numDarts: 2, alternates: [['T20', 'D17']] },
100
+ 95: { darts: ['T19', 'D19'], numDarts: 2 },
101
+ 96: { darts: ['T20', 'D18'], numDarts: 2, alternates: [['T20', 'T12'], ['T19', 'T13'], ['T18', 'T14'], ['T17', 'T15'], ['T16', 'T16']] },
102
+ 97: { darts: ['T19', 'D20'], numDarts: 2 },
103
+ 98: { darts: ['T20', 'D19'], numDarts: 2 },
104
+ 99: { darts: ['T20', 'T13'], numDarts: 2, alternates: [['T19', 'T14'], ['T18', 'T15'], ['T17', 'T16']] },
105
+ 100: { darts: ['T20', 'D20'], numDarts: 2 },
106
+ 101: { darts: ['T17', 'Bull'], numDarts: 2 },
107
+ 102: { darts: ['T20', 'T14'], numDarts: 2, alternates: [['T19', 'T15'], ['T18', 'T16'], ['T17', 'T17']] },
108
+ 103: { darts: ['T19', '6', 'D20'], numDarts: 3, alternates: [['T15', '18', 'D20'], ['T20', '3', 'D20'], ['T19', '14', 'D16'], ['T20', '11', 'D16'], ['T20', '7', 'D18']] },
109
+ 104: { darts: ['T18', 'Bull'], numDarts: 2 },
110
+ 105: { darts: ['T20', 'T15'], numDarts: 2, alternates: [['T19', 'T16'], ['T18', 'T17']] },
111
+ 106: { darts: ['T16', '18', 'D20'], numDarts: 3, alternates: [['T20', '6', 'D20'], ['T20', '14', 'D16'], ['T17', '15', 'D20'], ['T18', '16', 'D18'], ['T20', '10', 'D18']] },
112
+ 107: { darts: ['T19', 'Bull'], numDarts: 2 },
113
+ 108: { darts: ['T20', 'T16'], numDarts: 2, alternates: [['T19', 'T17'], ['T18', 'T18']] },
114
+ 109: { darts: ['T17', '18', 'D20'], numDarts: 3, alternates: [['T18', '15', 'D20'], ['T19', '16', 'D18'], ['T20', '13', 'D18'], ['T19', '12', 'D20'], ['T20', '15', 'D17']] },
115
+ 110: { darts: ['T20', 'Bull'], numDarts: 2 },
116
+ 111: { darts: ['T20', 'T17'], numDarts: 2, alternates: [['T19', 'T18']] },
117
+ 112: { darts: ['T18', '18', 'D20'], numDarts: 3, alternates: [['T19', '15', 'D20'], ['T20', '16', 'D18'], ['T20', '12', 'D20'], ['T20', '20', 'D16']] },
118
+ 113: { darts: ['T20', '17', 'D18'], numDarts: 3, alternates: [['T19', '16', 'D20'], ['T18', '19', 'D20'], ['T20', '13', 'D20'], ['T20', '15', 'D19'], ['T19', '18', 'D19']] },
119
+ 114: { darts: ['T20', 'T18'], numDarts: 2, alternates: [['T19', 'T19']] },
120
+ 115: { darts: ['T19', '18', 'D20'], numDarts: 3, alternates: [['T20', '15', 'D20']] },
121
+ 116: { darts: ['T20', '16', 'D20'], numDarts: 3, alternates: [['T19', '19', 'D20'], ['T20', '18', 'D19']] },
122
+ 117: { darts: ['T20', 'T19'], numDarts: 2 },
123
+ 118: { darts: ['T20', '18', 'D20'], numDarts: 3 },
124
+ 119: { darts: ['T20', '19', 'D20'], numDarts: 3 },
125
+ 120: { darts: ['T20', 'T20'], numDarts: 2 },
126
+ 121: { darts: ['T19', 'T16', '16'], numDarts: 3, alternates: [['T20', 'T16', '13'], ['T19', 'D16', 'D16'], ['T19', 'T15', '19'], ['T19', 'T17', '13'], ['T18', 'T16', '19']] },
127
+ 122: { darts: ['T20', 'T14', '20'], numDarts: 3, alternates: [['T20', 'T15', '17'], ['T20', 'T16', '14'], ['T17', 'T17', '20'], ['T18', 'T18', '14'], ['T18', 'D18', 'D16']] },
128
+ 123: { darts: ['T19', 'T18', '12'], numDarts: 3, alternates: [['T19', 'T16', '18'], ['T20', 'T15', '18'], ['T18', 'T17', '18'], ['T18', 'T18', '15'], ['T20', 'T13', 'D12']] },
129
+ 124: { darts: ['T20', 'T16', '16'], numDarts: 3, alternates: [['T20', 'D16', 'D16'], ['T19', 'T16', '19'], ['T19', 'T17', '16'], ['T19', 'T18', '13'], ['T18', 'D19', 'D16']] },
130
+ 125: { darts: ['T20', 'T15', '20'], numDarts: 3, alternates: [['T20', 'T16', '17'], ['T20', 'T17', '14'], ['T19', 'D18', 'D16'], ['T17', 'T14', 'D16'], ['T20', 'T11', 'D16']] },
131
+ 126: { darts: ['T19', 'T19', '12'], numDarts: 3, alternates: [['T20', 'T16', '18'], ['T18', 'T18', '18'], ['T19', 'T18', '15'], ['T20', 'T18', '12']] },
132
+ 127: { darts: ['T19', 'T17', '19'], numDarts: 3, alternates: [['T19', 'T18', '16'], ['T19', 'T19', '13'], ['T19', 'T10', 'D20'], ['T19', 'D16', 'D19'], ['T19', 'D20', 'D15']] },
133
+ 128: { darts: ['T20', 'T16', '20'], numDarts: 3, alternates: [['T20', 'T17', '17'], ['T20', 'T18', '14'], ['T20', 'D18', 'D16'], ['T18', 'T14', 'D16'], ['T20', 'D14', 'D20']] },
134
+ 129: { darts: ['T20', 'T19', '12'], numDarts: 3, alternates: [['T19', 'T18', '18'], ['T20', 'T18', '15']] },
135
+ 130: { darts: ['T19', 'T18', '19'], numDarts: 3, alternates: [['T19', 'T19', '16'], ['T20', 'T10', 'D20'], ['T20', 'D16', 'D19'], ['T20', 'D20', 'D15'], ['T20', 'T17', '19']] },
136
+ 131: { darts: ['T20', 'T17', '20'], numDarts: 3, alternates: [['T20', 'T18', '17'], ['T20', 'T19', '14'], ['T19', 'T14', 'D16'], ['T17', 'D20', 'D20'], ['T19', 'D17', 'D20']] },
137
+ 132: { darts: ['T20', 'T18', '18'], numDarts: 3, alternates: [['T20', 'T12', 'D18'], ['T19', 'T19', '18'], ['T20', 'T19', '15'], ['T20', 'T20', '12']] },
138
+ 133: { darts: ['T19', 'T19', '19'], numDarts: 3, alternates: [['T20', 'T18', '19'], ['T20', 'T19', '16'], ['T20', 'T20', '13']] },
139
+ 134: { darts: ['T20', 'T18', '20'], numDarts: 3, alternates: [['T20', 'T19', '17'], ['T20', 'T20', '14'], ['T20', 'T14', 'D16'], ['T18', 'D20', 'D20'], ['T20', 'D17', 'D20']] },
140
+ 135: { darts: ['T20', 'T19', '18'], numDarts: 3, alternates: [['T20', 'T20', '15'], ['T20', 'T15', 'D15'], ['T19', 'T14', 'D18'], ['T19', 'D19', 'D20'], ['T19', 'T18', 'D12']] },
141
+ 136: { darts: ['T20', 'T19', '19'], numDarts: 3, alternates: [['T20', 'T20', '16']] },
142
+ 137: { darts: ['T20', 'T19', '20'], numDarts: 3, alternates: [['T20', 'T20', '17'], ['T19', 'D20', 'D20']] },
143
+ 138: { darts: ['T20', 'T18', 'D12'], numDarts: 3, alternates: [['T20', 'T14', 'D18'], ['T20', 'D19', 'D20'], ['T19', 'T19', 'D12'], ['T20', 'T16', 'D15'], ['T18', 'T16', 'D18']] },
144
+ 139: { darts: ['T20', 'T20', '19'], numDarts: 3, alternates: [['T19', 'Bull', 'D16'], ['T20', 'T13', 'D20'], ['T19', 'T14', 'D20'], ['T18', 'T15', 'D20'], ['T17', 'T16', 'D20']] },
145
+ 140: { darts: ['T20', 'T20', '20'], numDarts: 3, alternates: [['T20', 'D20', 'D20']] },
146
+ 141: { darts: ['T20', 'T19', 'D12'], numDarts: 3, alternates: [['T18', 'T20', 'T9'], ['T18', 'T15', 'T14'], ['T19', 'T20', 'T8'], ['T19', 'T19', 'T9'], ['T19', 'T14', 'T14']] },
147
+ 142: { darts: ['T20', 'Bull', 'D16'], numDarts: 3, alternates: [['T20', 'T14', 'D20'], ['T19', 'T15', 'D20'], ['T18', 'T16', 'D20'], ['T17', 'T17', 'D20'], ['T20', 'T18', 'D14']] },
148
+ 143: { darts: ['T20', 'T17', 'D16'], numDarts: 3, alternates: [['T19', 'T18', 'D16'], ['T20', 'T15', 'D19'], ['T19', 'T16', 'D19'], ['T18', 'T17', 'D19'], ['T20', 'T19', 'D13']] },
149
+ 144: { darts: ['T20', 'T16', 'D18'], numDarts: 3, alternates: [['T20', 'T20', 'D12'], ['T19', 'T17', 'D18'], ['T18', 'T18', 'D18'], ['T20', 'T18', 'D15'], ['T19', 'T19', 'D15']] },
150
+ 145: { darts: ['T20', 'T15', 'D20'], numDarts: 3, alternates: [['T19', 'T16', 'D20'], ['T18', 'T17', 'D20'], ['T20', 'T19', 'D14'], ['T20', 'T17', 'D17'], ['T19', 'T18', 'D17']] },
151
+ 146: { darts: ['T20', 'T18', 'D16'], numDarts: 3, alternates: [['T19', 'T19', 'D16'], ['T20', 'T16', 'D19'], ['T19', 'T17', 'D19'], ['T18', 'T18', 'D19'], ['T20', 'T20', 'D13']] },
152
+ 147: { darts: ['T20', 'T17', 'D18'], numDarts: 3, alternates: [['T20', 'T20', 'T9'], ['T19', 'T18', 'D18'], ['T20', 'T19', 'D15'], ['T19', 'Bull', 'D20'], ['T19', 'T20', 'T10']] },
153
+ 148: { darts: ['T20', 'T16', 'D20'], numDarts: 3, alternates: [['T19', 'T17', 'D20'], ['T18', 'T18', 'D20'], ['T20', 'T20', 'D14'], ['T20', 'T18', 'D17'], ['T19', 'T19', 'D17']] },
154
+ 149: { darts: ['T20', 'T19', 'D16'], numDarts: 3, alternates: [['T20', 'T17', 'D19'], ['T19', 'T18', 'D19']] },
155
+ 150: { darts: ['T20', 'T18', 'D18'], numDarts: 3, alternates: [['T19', 'T19', 'D18'], ['T20', 'T20', 'D15'], ['T20', 'Bull', 'D20'], ['T20', 'T20', 'T10'], ['T19', 'T20', 'T11']] },
156
+ 151: { darts: ['T20', 'T17', 'D20'], numDarts: 3, alternates: [['T19', 'T18', 'D20'], ['T20', 'T19', 'D17']] },
157
+ 152: { darts: ['T20', 'T20', 'D16'], numDarts: 3, alternates: [['T20', 'T18', 'D19'], ['T19', 'T19', 'D19']] },
158
+ 153: { darts: ['T20', 'T19', 'D18'], numDarts: 3, alternates: [['T20', 'T20', 'T11'], ['T19', 'T20', 'T12'], ['T18', 'T20', 'T13'], ['T19', 'T19', 'T13'], ['T17', 'T20', 'T14']] },
159
+ 154: { darts: ['T20', 'T18', 'D20'], numDarts: 3, alternates: [['T19', 'T19', 'D20'], ['T20', 'T20', 'D17']] },
160
+ 155: { darts: ['T20', 'T19', 'D19'], numDarts: 3 },
161
+ 156: { darts: ['T20', 'T20', 'D18'], numDarts: 3, alternates: [['T20', 'T20', 'T12'], ['T19', 'T20', 'T13'], ['T18', 'T20', 'T14'], ['T19', 'T19', 'T14'], ['T17', 'T20', 'T15']] },
162
+ 157: { darts: ['T20', 'T19', 'D20'], numDarts: 3 },
163
+ 158: { darts: ['T20', 'T20', 'D19'], numDarts: 3 },
164
+ 159: { darts: ['T20', 'T20', 'T13'], numDarts: 3, alternates: [['T19', 'T20', 'T14'], ['T18', 'T20', 'T15'], ['T19', 'T19', 'T15'], ['T17', 'T20', 'T16'], ['T18', 'T19', 'T16']] },
165
+ 160: { darts: ['T20', 'T20', 'D20'], numDarts: 3 },
166
+ 161: { darts: ['T20', 'T17', 'Bull'], numDarts: 3, alternates: [['T19', 'T18', 'Bull']] },
167
+ 162: { darts: ['T20', 'T20', 'T14'], numDarts: 3, alternates: [['T19', 'T20', 'T15'], ['T18', 'T20', 'T16'], ['T19', 'T19', 'T16'], ['T17', 'T20', 'T17'], ['T18', 'T19', 'T17']] },
168
+ 164: { darts: ['T20', 'T18', 'Bull'], numDarts: 3, alternates: [['T19', 'T19', 'Bull']] },
169
+ 165: { darts: ['T20', 'T20', 'T15'], numDarts: 3, alternates: [['T19', 'T20', 'T16'], ['T18', 'T20', 'T17'], ['T19', 'T19', 'T17'], ['T18', 'T19', 'T18']] },
170
+ 167: { darts: ['T20', 'T19', 'Bull'], numDarts: 3 },
171
+ 168: { darts: ['T20', 'T20', 'T16'], numDarts: 3, alternates: [['T19', 'T20', 'T17'], ['T18', 'T20', 'T18'], ['T19', 'T19', 'T18']] },
172
+ 170: { darts: ['T20', 'T20', 'Bull'], numDarts: 3 },
173
+ 171: { darts: ['T20', 'T20', 'T17'], numDarts: 3, alternates: [['T19', 'T20', 'T18'], ['T19', 'T19', 'T19']] },
174
+ 174: { darts: ['T20', 'T20', 'T18'], numDarts: 3, alternates: [['T19', 'T20', 'T19']] },
175
+ 177: { darts: ['T20', 'T20', 'T19'], numDarts: 3 },
176
+ 180: { darts: ['T20', 'T20', 'T20'], numDarts: 3 },
177
+ };
package/src/filter.ts ADDED
@@ -0,0 +1,35 @@
1
+ import type { EnumeratedCheckoutMap } from './types.js';
2
+
3
+ function normalizeTargetLabel(str: string): string {
4
+ if (str === 'Bull') return 'Bull';
5
+ if (str === '25') return '25';
6
+ const m = str.match(/^([SDT])(\d+)$/);
7
+ if (m) {
8
+ return m[1] === 'S' ? m[2] : `${m[1]}${m[2]}`;
9
+ }
10
+ if (/^\d+$/.test(str)) return str;
11
+ return str;
12
+ }
13
+
14
+ export function filterByPreferredTargets(
15
+ checkouts: EnumeratedCheckoutMap,
16
+ preferredTargets: string[],
17
+ ): EnumeratedCheckoutMap {
18
+ const preferredLabels = new Set(preferredTargets.map(normalizeTargetLabel));
19
+ const filtered: EnumeratedCheckoutMap = {};
20
+
21
+ for (const [score, entry] of Object.entries(checkouts)) {
22
+ const matching = entry.options.filter((darts) =>
23
+ preferredLabels.has(darts[darts.length - 1]),
24
+ );
25
+
26
+ if (matching.length > 0) {
27
+ filtered[Number(score)] = {
28
+ options: matching,
29
+ count: matching.length,
30
+ };
31
+ }
32
+ }
33
+
34
+ return filtered;
35
+ }
@@ -0,0 +1,91 @@
1
+ import type { OutMode, EnumeratedCheckoutMap, EnumeratedResult } from './types.js';
2
+
3
+ interface Target {
4
+ label: string;
5
+ value: number;
6
+ }
7
+
8
+ function buildTargets(): Target[] {
9
+ const targets: Target[] = [];
10
+ for (let i = 1; i <= 20; i++) {
11
+ targets.push({ label: `${i}`, value: i });
12
+ targets.push({ label: `D${i}`, value: i * 2 });
13
+ targets.push({ label: `T${i}`, value: i * 3 });
14
+ }
15
+ targets.push({ label: '25', value: 25 });
16
+ targets.push({ label: 'Bull', value: 50 });
17
+ return targets;
18
+ }
19
+
20
+ function buildFinishingDoubles(): Target[] {
21
+ const doubles: Target[] = [];
22
+ for (let i = 1; i <= 20; i++) {
23
+ doubles.push({ label: `D${i}`, value: i * 2 });
24
+ }
25
+ doubles.push({ label: 'Bull', value: 50 });
26
+ return doubles;
27
+ }
28
+
29
+ export function generateAllCheckouts(options: {
30
+ outMode: OutMode;
31
+ min?: number;
32
+ max?: number;
33
+ }): EnumeratedResult {
34
+ const { outMode } = options;
35
+ const isDouble = outMode === 'double';
36
+ const min = options.min ?? (isDouble ? 2 : 1);
37
+ const max = options.max ?? 170;
38
+
39
+ const allTargets = buildTargets();
40
+ const finishingTargets = isDouble ? buildFinishingDoubles() : allTargets;
41
+ const checkouts: EnumeratedCheckoutMap = {};
42
+ const bogeyNumbers: number[] = [];
43
+ let totalOptions = 0;
44
+
45
+ for (let score = min; score <= max; score++) {
46
+ const opts: string[][] = [];
47
+
48
+ // 1-dart finishes
49
+ for (const d of finishingTargets) {
50
+ if (d.value === score) {
51
+ opts.push([d.label]);
52
+ }
53
+ }
54
+
55
+ // 2-dart finishes
56
+ for (const d1 of allTargets) {
57
+ if (d1.value >= score) continue;
58
+ const remainder = score - d1.value;
59
+ for (const d2 of finishingTargets) {
60
+ if (d2.value === remainder) {
61
+ opts.push([d1.label, d2.label]);
62
+ }
63
+ }
64
+ }
65
+
66
+ // 3-dart finishes
67
+ if (score > (isDouble ? 2 : 1)) {
68
+ for (const d1 of allTargets) {
69
+ if (d1.value >= score) continue;
70
+ for (const d2 of allTargets) {
71
+ if (d1.value + d2.value >= score) continue;
72
+ const remainder = score - d1.value - d2.value;
73
+ for (const d3 of finishingTargets) {
74
+ if (d3.value === remainder) {
75
+ opts.push([d1.label, d2.label, d3.label]);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+
82
+ if (opts.length > 0) {
83
+ checkouts[score] = { options: opts, count: opts.length };
84
+ totalOptions += opts.length;
85
+ } else {
86
+ bogeyNumbers.push(score);
87
+ }
88
+ }
89
+
90
+ return { checkouts, bogeyNumbers, totalOptions };
91
+ }
package/src/index.ts ADDED
@@ -0,0 +1,37 @@
1
+ export type {
2
+ OutMode,
3
+ BedType,
4
+ MissType,
5
+ ParsedTarget,
6
+ FormattedTarget,
7
+ MissTarget,
8
+ ThrowEvaluation,
9
+ EvaluatedMiss,
10
+ CheckoutEntry,
11
+ CheckoutChart,
12
+ EnumeratedEntry,
13
+ EnumeratedCheckoutMap,
14
+ EnumeratedResult,
15
+ GenerateOptions,
16
+ RecommendOptions,
17
+ CheckoutResult,
18
+ OutsChartErrorCode,
19
+ } from './types.js';
20
+
21
+ export type { NotationMap } from './notation.js';
22
+
23
+ export { OutsChartError } from './types.js';
24
+
25
+ export { parseTarget, formatTarget } from './dartboard.js';
26
+
27
+ export {
28
+ getCheckout,
29
+ getCheckoutChart,
30
+ getBogeyNumbers,
31
+ isCheckable,
32
+ } from './lookup.js';
33
+
34
+ export { generateAllCheckouts } from './generate.js';
35
+ export { generateRecommended } from './recommend.js';
36
+ export { filterByPreferredTargets } from './filter.js';
37
+ export { formatDart, formatCheckoutChart, NOTATIONS } from './notation.js';