#include "board.h" #include "checkouts.h" #include #include int checkouts_suggested(char *buf, int rem, int darts_in_hand) { buf[0] = 0; if (rem < 2 || rem > 170) return 0; char *p = buf; char *target; int i = darts_in_hand, trem = rem; while (i && trem && (target = CHECKOUTS[--i][trem - 1])) { if (i < darts_in_hand - 1) *p++ = '-'; p = stpcpy(p, target); trem -= segment_points(segment_from_name(target)); } return p - buf; } #define CHECKOUT_2_PRE " (" #define CHECKOUT_2_POST ")" // buf must be at least 32 bytes int checkouts_suggested_3_2(char *buf, int rem) { int len = checkouts_suggested(buf, rem, 3); if (!len) return 0; char *buf2 = buf + len + sizeof(CHECKOUT_2_PRE) - 1; int len2 = checkouts_suggested(buf2, rem, 2); if (!len2 || (len == len2 && !strncmp(buf, buf2, len > len2 ? len : len2))) return len; memcpy(buf + len, CHECKOUT_2_PRE, sizeof(CHECKOUT_2_PRE) - 1); memcpy(buf2 + len2, CHECKOUT_2_POST, sizeof(CHECKOUT_2_POST)); len += sizeof(CHECKOUT_2_PRE) + len2 + sizeof(CHECKOUT_2_POST) - 2; return len; } char *CHECKOUTS[][170] = { { NULL, // 1 "D1", // 2 NULL, // 3 "D2", // 4 NULL, // 5 "D3", // 6 NULL, // 7 "D4", // 8 NULL, // 9 "D5", // 10 NULL, // 11 "D6", // 12 NULL, // 13 "D7", // 14 NULL, // 15 "D8", // 16 NULL, // 17 "D9", // 18 NULL, // 19 "D10", // 20 NULL, // 21 "D11", // 22 NULL, // 23 "D12", // 24 NULL, // 25 "D13", // 26 NULL, // 27 "D14", // 28 NULL, // 29 "D15", // 30 NULL, // 31 "D16", // 32 NULL, // 33 "D17", // 34 NULL, // 35 "D18", // 36 NULL, // 37 "D19", // 38 NULL, // 39 "D20", // 40 NULL, // 41 NULL, // 42 NULL, // 43 NULL, // 44 NULL, // 45 NULL, // 46 NULL, // 47 NULL, // 48 NULL, // 49 "BULL", // 50 NULL, // 51 NULL, // 52 NULL, // 53 NULL, // 54 NULL, // 55 NULL, // 56 NULL, // 57 NULL, // 58 NULL, // 59 NULL, // 60 NULL, // 61 NULL, // 62 NULL, // 63 NULL, // 64 NULL, // 65 NULL, // 66 NULL, // 67 NULL, // 68 NULL, // 69 NULL, // 70 NULL, // 71 NULL, // 72 NULL, // 73 NULL, // 74 NULL, // 75 NULL, // 76 NULL, // 77 NULL, // 78 NULL, // 79 NULL, // 80 NULL, // 81 NULL, // 82 NULL, // 83 NULL, // 84 NULL, // 85 NULL, // 86 NULL, // 87 NULL, // 88 NULL, // 89 NULL, // 90 NULL, // 91 NULL, // 92 NULL, // 93 NULL, // 94 NULL, // 95 NULL, // 96 NULL, // 97 NULL, // 98 NULL, // 99 NULL, // 100 NULL, // 101 NULL, // 102 NULL, // 103 NULL, // 104 NULL, // 105 NULL, // 106 NULL, // 107 NULL, // 108 NULL, // 109 NULL, // 110 NULL, // 111 NULL, // 112 NULL, // 113 NULL, // 114 NULL, // 115 NULL, // 116 NULL, // 117 NULL, // 118 NULL, // 119 NULL, // 120 NULL, // 121 NULL, // 122 NULL, // 123 NULL, // 124 NULL, // 125 NULL, // 126 NULL, // 127 NULL, // 128 NULL, // 129 NULL, // 130 NULL, // 131 NULL, // 132 NULL, // 133 NULL, // 134 NULL, // 135 NULL, // 136 NULL, // 137 NULL, // 138 NULL, // 139 NULL, // 140 NULL, // 141 NULL, // 142 NULL, // 143 NULL, // 144 NULL, // 145 NULL, // 146 NULL, // 147 NULL, // 148 NULL, // 149 NULL, // 150 NULL, // 151 NULL, // 152 NULL, // 153 NULL, // 154 NULL, // 155 NULL, // 156 NULL, // 157 NULL, // 158 NULL, // 159 NULL, // 160 NULL, // 161 NULL, // 162 NULL, // 163 NULL, // 164 NULL, // 165 NULL, // 166 NULL, // 167 NULL, // 168 NULL, // 169 NULL, // 170 }, { NULL, // 1 "D1", // 2 "1", // 3 "D2", // 4 "1", // 5 "D3", // 6 "3", // 7 "D4", // 8 "1", // 9 "D5", // 10 "3", // 11 "D6", // 12 "5", // 13 "D7", // 14 "7", // 15 "D8", // 16 "1", // 17 "D9", // 18 "3", // 19 "D10", // 20 "5", // 21 "D11", // 22 "7", // 23 "D12", // 24 "9", // 25 "D13", // 26 "11", // 27 "D14", // 28 "13", // 29 "D15", // 30 "15", // 31 "D16", // 32 "1", // 33 "D17", // 34 "3", // 35 "D18", // 36 "5", // 37 "D19", // 38 "7", // 39 "D20", // 40 "9", // 41 "10", // 42 "11", // 43 "12", // 44 "13", // 45 "14", // 46 "15", // 47 "16", // 48 "17", // 49 "18", // 50 "19", // 51 "20", // 52 "13", // 53 "14", // 54 "15", // 55 "16", // 56 "17", // 57 "18", // 58 "19", // 59 "20", // 60 "T11", // 61 "T12", // 62 "T13", // 63 "T14", // 64 "T15", // 65 "T16", // 66 "T17", // 67 "T18", // 68 "T19", // 69 "T20", // 70 "T13", // 71 "T16", // 72 "T19", // 73 "T14", // 74 "T17", // 75 "T20", // 76 "T19", // 77 "T18", // 78 "T19", // 79 "T20", // 80 "T19", // 81 "T14", // 82 "T17", // 83 "T20", // 84 "T15", // 85 "T18", // 86 "T17", // 87 "T16", // 88 "T19", // 89 "T18", // 90 "T17", // 91 "T20", // 92 "T19", // 93 "T18", // 94 "T19", // 95 "T20", // 96 "T19", // 97 "T20", // 98 NULL, // 99 "T20", // 100 "T17", // 101 NULL, // 102 NULL, // 103 "T18", // 104 NULL, // 105 NULL, // 106 "T19", // 107 NULL, // 108 NULL, // 109 "T20", // 110 NULL, // 111 NULL, // 112 NULL, // 113 NULL, // 114 NULL, // 115 NULL, // 116 NULL, // 117 NULL, // 118 NULL, // 119 NULL, // 120 NULL, // 121 NULL, // 122 NULL, // 123 NULL, // 124 NULL, // 125 NULL, // 126 NULL, // 127 NULL, // 128 NULL, // 129 NULL, // 130 NULL, // 131 NULL, // 132 NULL, // 133 NULL, // 134 NULL, // 135 NULL, // 136 NULL, // 137 NULL, // 138 NULL, // 139 NULL, // 140 NULL, // 141 NULL, // 142 NULL, // 143 NULL, // 144 NULL, // 145 NULL, // 146 NULL, // 147 NULL, // 148 NULL, // 149 NULL, // 150 NULL, // 151 NULL, // 152 NULL, // 153 NULL, // 154 NULL, // 155 NULL, // 156 NULL, // 157 NULL, // 158 NULL, // 159 NULL, // 160 NULL, // 161 NULL, // 162 NULL, // 163 NULL, // 164 NULL, // 165 NULL, // 166 NULL, // 167 NULL, // 168 NULL, // 169 NULL, // 170 }, { NULL, // 1 "D1", // 2 "1", // 3 "D2", // 4 "1", // 5 "D3", // 6 "3", // 7 "D4", // 8 "1", // 9 "D5", // 10 "3", // 11 "D6", // 12 "5", // 13 "D7", // 14 "7", // 15 "D8", // 16 "1", // 17 "D9", // 18 "3", // 19 "D10", // 20 "5", // 21 "D11", // 22 "7", // 23 "D12", // 24 "9", // 25 "D13", // 26 "11", // 27 "D14", // 28 "13", // 29 "D15", // 30 "15", // 31 "D16", // 32 "1", // 33 "D17", // 34 "3", // 35 "D18", // 36 "5", // 37 "D19", // 38 "7", // 39 "D20", // 40 "9", // 41 "10", // 42 "11", // 43 "12", // 44 "13", // 45 "14", // 46 "15", // 47 "16", // 48 "17", // 49 "18", // 50 "19", // 51 "20", // 52 "13", // 53 "14", // 54 "15", // 55 "16", // 56 "17", // 57 "18", // 58 "19", // 59 "20", // 60 "25", // 61 "T10", // 62 "T13", // 63 "T16", // 64 "25", // 65 "T14", // 66 "T17", // 67 "T12", // 68 "T15", // 69 "T18", // 70 "T13", // 71 "T16", // 72 "T19", // 73 "T14", // 74 "T17", // 75 "T20", // 76 "T19", // 77 "T18", // 78 "T19", // 79 "T20", // 80 "T19", // 81 "BULL", // 82 "T17", // 83 "T20", // 84 "T15", // 85 "T18", // 86 "T17", // 87 "T20", // 88 "T19", // 89 "BULL", // 90 "T17", // 91 "T20", // 92 "T19", // 93 "T18", // 94 "BULL", // 95 "T20", // 96 "T19", // 97 "T20", // 98 "T17", // 99 "T20", // 100 "T19", // 101 "T20", // 102 "T19", // 103 "T20", // 104 "T20", // 105 "T20", // 106 "T19", // 107 "T19", // 108 "T20", // 109 "T18", // 110 "T20", // 111 "T20", // 112 "T19", // 113 "T20", // 114 "T19", // 115 "T19", // 116 "T20", // 117 "T20", // 118 "T19", // 119 "T20", // 120 "T20", // 121 "T18", // 122 "T19", // 123 "T20", // 124 "BULL", // 125 "T19", // 126 "T20", // 127 "T20", // 128 "T19", // 129 "T20", // 130 "T19", // 131 "BULL", // 132 "T20", // 133 "T20", // 134 "BULL", // 135 "T20", // 136 "T15", // 137 "T20", // 138 "T19", // 139 "T20", // 140 "T19", // 141 "T20", // 142 "T18", // 143 "T19", // 144 "T20", // 145 "T19", // 146 "T19", // 147 "T20", // 148 "T20", // 149 "T20", // 150 "T20", // 151 "T20", // 152 "T20", // 153 "T19", // 154 "T20", // 155 "T20", // 156 "T20", // 157 "T20", // 158 NULL, // 159 "T20", // 160 "T20", // 161 NULL, // 162 NULL, // 163 "T19", // 164 NULL, // 165 NULL, // 166 "T20", // 167 NULL, // 168 NULL, // 169 "T20", // 170 } }; char *SETUP_SHOTS[191] = { NULL, // 1 "D1", // 2 "1", // 3 "D2", // 4 "1", // 5 "D3", // 6 "3", // 7 "D4", // 8 "1", // 9 "D5", // 10 "3", // 11 "D6", // 12 "5", // 13 "D7", // 14 "7", // 15 "D8", // 16 "1", // 17 "D9", // 18 "3", // 19 "D10", // 20 "5", // 21 "D11", // 22 "7", // 23 "D12", // 24 "9", // 25 "D13", // 26 "11", // 27 "D14", // 28 "13", // 29 "D15", // 30 "15", // 31 "D16", // 32 "1", // 33 "D17", // 34 "3", // 35 "D18", // 36 "5", // 37 "D19", // 38 "7", // 39 "D20", // 40 "9", // 41 "10", // 42 "11", // 43 "12", // 44 "13", // 45 "14", // 46 "15", // 47 "16", // 48 "17", // 49 "18", // 50 "19", // 51 "20", // 52 "13", // 53 "14", // 54 "15", // 55 "16", // 56 "17", // 57 "18", // 58 "19", // 59 "20", // 60 "25", // 61 "T10", // 62 "T13", // 63 "T16", // 64 "25", // 65 "T14", // 66 "T17", // 67 "T12", // 68 "T15", // 69 "T18", // 70 "T13", // 71 "T16", // 72 "T19", // 73 "T14", // 74 "T17", // 75 "T20", // 76 "T19", // 77 "T18", // 78 "T19", // 79 "T20", // 80 "T19", // 81 "BULL", // 82 "T17", // 83 "T20", // 84 "T15", // 85 "T18", // 86 "T17", // 87 "T20", // 88 "T19", // 89 "BULL", // 90 "T17", // 91 "T20", // 92 "T19", // 93 "T18", // 94 "BULL", // 95 "T20", // 96 "T19", // 97 "T20", // 98 "T17", // 99 "T20", // 100 "T19", // 101 "T20", // 102 "T19", // 103 "T20", // 104 "T20", // 105 "T20", // 106 "T19", // 107 "T19", // 108 "T20", // 109 "T18", // 110 "T20", // 111 "T20", // 112 "T19", // 113 "T20", // 114 "T19", // 115 "T19", // 116 "T20", // 117 "T20", // 118 "T19", // 119 "T20", // 120 "T20", // 121 "T18", // 122 "T19", // 123 "T20", // 124 "BULL", // 125 "T19", // 126 "T20", // 127 "T20", // 128 "T19", // 129 "T20", // 130 "T19", // 131 "BULL", // 132 "T20", // 133 "T20", // 134 "BULL", // 135 "T20", // 136 "T15", // 137 "T20", // 138 "T19", // 139 "T20", // 140 "T19", // 141 "T20", // 142 "T18", // 143 "T19", // 144 "T20", // 145 "T19", // 146 "T19", // 147 "T20", // 148 "T20", // 149 "T20", // 150 "T20", // 151 "T20", // 152 "T20", // 153 "T19", // 154 "T20", // 155 "T20", // 156 "T20", // 157 "T20", // 158 "T19", // 159 "T20", // 160 "T20", // 161 "T20", // 162 "T20", // 163 "T19", // 164 "T20", // 165 "T20", // 166 "T20", // 167 "T20", // 168 "T20", // 169 "T20", // 170 "T20", // 171 "T20", // 172 "T20", // 173 "T19", // 174 "T20", // 175 "T20", // 176 "T20", // 177 "T20", // 178 "T19", // 179 "T20", // 180 "T20", // 181 "T20", // 182 "T19", // 183 "T20", // 184 "BULL", // 185 "T20", // 186 "T20", // 187 "T18", // 188 "T19", // 189 "T20", // 190 "T19", // 191 };