@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.
- package/LICENSE +15 -0
- package/README.md +184 -0
- package/dist/index.cjs +1194 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +107 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.js +1155 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
- package/src/dartboard.ts +122 -0
- package/src/data/dartboard-dimensions.json +77 -0
- package/src/data/dartboard-layout.json +66 -0
- package/src/data/double-out-checkouts.ts +168 -0
- package/src/data/single-out-checkouts.ts +177 -0
- package/src/filter.ts +35 -0
- package/src/generate.ts +91 -0
- package/src/index.ts +37 -0
- package/src/lookup.ts +47 -0
- package/src/miss-analysis.ts +90 -0
- package/src/notation.ts +69 -0
- package/src/recommend.ts +434 -0
- package/src/types.ts +141 -0
|
@@ -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
|
+
}
|
package/src/generate.ts
ADDED
|
@@ -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';
|