| 1 | #include "muscle.h" |
|---|
| 2 | #include "gonnet.h" |
|---|
| 3 | |
|---|
| 4 | #define ROW(A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y) \ |
|---|
| 5 | { A/4.0, C/4.0, D/4.0, E/4.0, F/4.0, G/4.0, H/4.0, I/4.0, K/4.0, L/4.0, M/4.0, N/4.0, P/4.0, Q/4.0, R/4.0, S/4.0, T/4.0, V/4.0, W/4.0, Y/4.0 }, |
|---|
| 6 | |
|---|
| 7 | static double Gonnet80[20][20] = |
|---|
| 8 | { |
|---|
| 9 | // A C D E F G H I K L |
|---|
| 10 | // M N P Q R S T V W Y |
|---|
| 11 | ROW( 1990, 1140, 930, 1070, 600, 1130, 850, 810, 940, 810, |
|---|
| 12 | 980, 900, 1080, 1020, 880, 1380, 1190, 1180, 370, 590) // A |
|---|
| 13 | |
|---|
| 14 | ROW( 1140, 2780, 310, 300, 850, 630, 810, 700, 360, 690, |
|---|
| 15 | 850, 690, 310, 480, 640, 1090, 900, 1030, 810, 920) // C |
|---|
| 16 | |
|---|
| 17 | ROW( 930, 310, 2200, 1550, 130, 980, 1070, 180, 1030, 150, |
|---|
| 18 | 360, 1450, 820, 1150, 800, 1100, 1000, 350, 0, 550) // D |
|---|
| 19 | |
|---|
| 20 | ROW( 1070, 300, 1550, 2120, 220, 770, 1070, 510, 1280, 490, |
|---|
| 21 | 710, 1110, 890, 1470, 1010, 1050, 970, 730, 260, 500) // E |
|---|
| 22 | |
|---|
| 23 | ROW( 600, 850, 130, 220, 2380, 90, 980, 1090, 350, 1310, |
|---|
| 24 | 1270, 490, 310, 540, 340, 470, 620, 930, 1400, 1730) // F |
|---|
| 25 | |
|---|
| 26 | ROW( 1130, 630, 980, 770, 90, 2210, 710, 100, 740, 200, |
|---|
| 27 | 410, 1060, 660, 800, 810, 1080, 720, 380, 430, 300) // G |
|---|
| 28 | |
|---|
| 29 | ROW( 850, 810, 1070, 1070, 980, 710, 2510, 600, 1120, 670, |
|---|
| 30 | 860, 1330, 790, 1380, 1140, 990, 1000, 590, 810, 1450) // H |
|---|
| 31 | |
|---|
| 32 | ROW( 810, 700, 180, 510, 1090, 100, 600, 2100, 650, 1460, |
|---|
| 33 | 1490, 530, 490, 640, 530, 620, 960, 1650, 610, 770) // I |
|---|
| 34 | |
|---|
| 35 | ROW( 940, 360, 1030, 1280, 350, 740, 1120, 650, 2090, 660, |
|---|
| 36 | 870, 1220, 870, 1410, 1570, 1040, 1090, 700, 350, 640) // K |
|---|
| 37 | |
|---|
| 38 | ROW( 810, 690, 150, 490, 1310, 200, 670, 1460, 660, 2010, |
|---|
| 39 | 1550, 450, 660, 850, 660, 600, 750, 1270, 800, 890) // L |
|---|
| 40 | |
|---|
| 41 | ROW( 980, 850, 360, 710, 1270, 410, 860, 1490, 870, 1550, |
|---|
| 42 | 2410, 620, 460, 1050, 710, 830, 990, 1250, 790, 870) // M |
|---|
| 43 | |
|---|
| 44 | ROW( 900, 690, 1450, 1110, 490, 1060, 1330, 530, 1220, 450, |
|---|
| 45 | 620, 2210, 760, 1180, 1020, 1290, 1170, 550, 380, 850) // N |
|---|
| 46 | |
|---|
| 47 | ROW( 1080, 310, 820, 890, 310, 660, 790, 490, 870, 660, |
|---|
| 48 | 460, 760, 2380, 1000, 790, 1100, 1040, 670, 120, 480) // P |
|---|
| 49 | |
|---|
| 50 | ROW( 1020, 480, 1150, 1470, 540, 800, 1380, 640, 1410, 850, |
|---|
| 51 | 1050, 1180, 1000, 2190, 1350, 1090, 1060, 730, 620, 710) // Q |
|---|
| 52 | |
|---|
| 53 | ROW( 880, 640, 800, 1010, 340, 810, 1140, 530, 1570, 660, |
|---|
| 54 | 710, 1020, 790, 1350, 2210, 970, 970, 640, 830, 740) // R |
|---|
| 55 | |
|---|
| 56 | ROW( 1380, 1090, 1100, 1050, 470, 1080, 990, 620, 1040, 600, |
|---|
| 57 | 830, 1290, 1100, 1090, 970, 2020, 1490, 810, 520, 780) // S |
|---|
| 58 | |
|---|
| 59 | ROW( 1190, 900, 1000, 970, 620, 720, 1000, 960, 1090, 750, |
|---|
| 60 | 990, 1170, 1040, 1060, 970, 1490, 2050, 1150, 370, 660) // T |
|---|
| 61 | |
|---|
| 62 | ROW( 1180, 1030, 350, 730, 930, 380, 590, 1650, 700, 1270, |
|---|
| 63 | 1250, 550, 670, 730, 640, 810, 1150, 2040, 440, 770) // V |
|---|
| 64 | |
|---|
| 65 | ROW( 370, 810, 0, 260, 1400, 430, 810, 610, 350, 800, |
|---|
| 66 | 790, 380, 120, 620, 830, 520, 370, 440, 2970, 1470) // W |
|---|
| 67 | |
|---|
| 68 | ROW( 590, 920, 550, 500, 1730, 300, 1450, 770, 640, 890, |
|---|
| 69 | 870, 850, 480, 710, 740, 780, 660, 770, 1470, 2470) // Y |
|---|
| 70 | }; |
|---|
| 71 | |
|---|
| 72 | static double Gonnet120[20][20] = |
|---|
| 73 | { |
|---|
| 74 | // A C D E F G H I K L |
|---|
| 75 | // M N P Q R S T V W Y |
|---|
| 76 | ROW( 1550, 950, 780, 870, 480, 930, 700, 690, 770, 660, |
|---|
| 77 | 790, 760, 900, 840, 730, 1120, 980, 960, 280, 480) // A |
|---|
| 78 | |
|---|
| 79 | ROW( 950, 2400, 270, 280, 700, 510, 650, 600, 320, 570, |
|---|
| 80 | 700, 550, 280, 400, 510, 890, 750, 850, 670, 760) // C |
|---|
| 81 | |
|---|
| 82 | ROW( 780, 270, 1780, 1310, 90, 820, 890, 160, 880, 140, |
|---|
| 83 | 320, 1220, 680, 970, 690, 910, 830, 310, 0, 430) // D |
|---|
| 84 | |
|---|
| 85 | ROW( 870, 280, 1310, 1680, 180, 650, 900, 410, 1070, 390, |
|---|
| 86 | 560, 950, 740, 1210, 860, 870, 810, 580, 180, 400) // E |
|---|
| 87 | |
|---|
| 88 | ROW( 480, 700, 90, 180, 1980, 40, 820, 930, 290, 1110, |
|---|
| 89 | 1070, 380, 240, 430, 280, 380, 490, 790, 1230, 1510) // F |
|---|
| 90 | |
|---|
| 91 | ROW( 930, 510, 820, 650, 40, 1860, 590, 90, 620, 140, |
|---|
| 92 | 310, 890, 550, 660, 660, 900, 610, 310, 300, 220) // G |
|---|
| 93 | |
|---|
| 94 | ROW( 700, 650, 890, 900, 820, 590, 2060, 480, 940, 540, |
|---|
| 95 | 680, 1100, 650, 1130, 950, 820, 820, 490, 680, 1220) // H |
|---|
| 96 | |
|---|
| 97 | ROW( 690, 600, 160, 410, 930, 90, 480, 1680, 520, 1240, |
|---|
| 98 | 1250, 410, 400, 530, 430, 520, 790, 1380, 500, 650) // I |
|---|
| 99 | |
|---|
| 100 | ROW( 770, 320, 880, 1070, 290, 620, 940, 520, 1650, 520, |
|---|
| 101 | 690, 1010, 720, 1160, 1320, 860, 900, 570, 280, 520) // K |
|---|
| 102 | |
|---|
| 103 | ROW( 660, 570, 140, 390, 1110, 140, 540, 1240, 520, 1620, |
|---|
| 104 | 1300, 350, 520, 660, 520, 490, 620, 1090, 670, 760) // L |
|---|
| 105 | |
|---|
| 106 | ROW( 790, 700, 320, 560, 1070, 310, 680, 1250, 690, 1300, |
|---|
| 107 | 1910, 500, 400, 820, 580, 670, 800, 1060, 650, 740) // M |
|---|
| 108 | |
|---|
| 109 | ROW( 760, 550, 1220, 950, 380, 890, 1100, 410, 1010, 350, |
|---|
| 110 | 500, 1760, 640, 970, 860, 1060, 960, 460, 280, 680) // N |
|---|
| 111 | |
|---|
| 112 | ROW( 900, 280, 680, 740, 240, 550, 650, 400, 720, 520, |
|---|
| 113 | 400, 640, 2010, 820, 660, 910, 860, 540, 70, 370) // P |
|---|
| 114 | |
|---|
| 115 | ROW( 840, 400, 970, 1210, 430, 660, 1130, 530, 1160, 660, |
|---|
| 116 | 820, 970, 820, 1700, 1120, 890, 870, 600, 470, 580) // Q |
|---|
| 117 | |
|---|
| 118 | ROW( 730, 510, 690, 860, 280, 660, 950, 430, 1320, 520, |
|---|
| 119 | 580, 860, 660, 1120, 1790, 810, 800, 520, 660, 590) // R |
|---|
| 120 | |
|---|
| 121 | ROW( 1120, 890, 910, 870, 380, 900, 820, 520, 860, 490, |
|---|
| 122 | 670, 1060, 910, 890, 810, 1560, 1220, 680, 390, 610) // S |
|---|
| 123 | |
|---|
| 124 | ROW( 980, 750, 830, 810, 490, 610, 820, 790, 900, 620, |
|---|
| 125 | 800, 960, 860, 870, 800, 1220, 1600, 930, 290, 540) // T |
|---|
| 126 | |
|---|
| 127 | ROW( 960, 850, 310, 580, 790, 310, 490, 1380, 570, 1090, |
|---|
| 128 | 1060, 460, 540, 600, 520, 680, 930, 1610, 370, 630) // V |
|---|
| 129 | |
|---|
| 130 | ROW( 280, 670, 0, 180, 1230, 300, 680, 500, 280, 670, |
|---|
| 131 | 650, 280, 70, 470, 660, 390, 290, 370, 2620, 1290) // W |
|---|
| 132 | |
|---|
| 133 | ROW( 480, 760, 430, 400, 1510, 220, 1220, 650, 520, 760, |
|---|
| 134 | 740, 680, 370, 580, 590, 610, 540, 630, 1290, 2070) // Y |
|---|
| 135 | }; |
|---|
| 136 | |
|---|
| 137 | static SCORE Gonnet160[20][20] = |
|---|
| 138 | { |
|---|
| 139 | // A C D E F G H I K L |
|---|
| 140 | // M N P Q R S T V W Y |
|---|
| 141 | ROW( 1240, 810, 670, 740, 400, 800, 600, 600, 660, 560, |
|---|
| 142 | 660, 660, 770, 710, 620, 940, 830, 790, 230, 410) // A |
|---|
| 143 | |
|---|
| 144 | ROW( 810, 2130, 250, 260, 600, 440, 550, 530, 300, 490, |
|---|
| 145 | 590, 470, 260, 360, 430, 760, 640, 720, 570, 650) // C |
|---|
| 146 | |
|---|
| 147 | ROW( 670, 250, 1480, 1120, 80, 710, 770, 160, 770, 130, |
|---|
| 148 | 280, 1040, 590, 840, 620, 780, 720, 290, 0, 360) // D |
|---|
| 149 | |
|---|
| 150 | ROW( 740, 260, 1120, 1370, 160, 570, 770, 350, 910, 330, |
|---|
| 151 | 470, 830, 640, 1010, 750, 750, 700, 480, 140, 340) // E |
|---|
| 152 | |
|---|
| 153 | ROW( 400, 600, 80, 160, 1690, 20, 710, 810, 250, 970, |
|---|
| 154 | 920, 310, 200, 370, 250, 330, 420, 700, 1100, 1340) // F |
|---|
| 155 | |
|---|
| 156 | ROW( 800, 440, 710, 570, 20, 1600, 510, 80, 540, 110, |
|---|
| 157 | 260, 760, 480, 570, 570, 770, 540, 260, 230, 180) // G |
|---|
| 158 | |
|---|
| 159 | ROW( 600, 550, 770, 770, 710, 510, 1710, 410, 800, 460, |
|---|
| 160 | 570, 930, 560, 950, 810, 700, 700, 430, 590, 1050) // H |
|---|
| 161 | |
|---|
| 162 | ROW( 600, 530, 160, 350, 810, 80, 410, 1370, 430, 1080, |
|---|
| 163 | 1070, 340, 350, 460, 370, 450, 660, 1180, 440, 580) // I |
|---|
| 164 | |
|---|
| 165 | ROW( 660, 300, 770, 910, 250, 540, 800, 430, 1330, 440, |
|---|
| 166 | 570, 860, 620, 980, 1130, 740, 760, 480, 240, 430) // K |
|---|
| 167 | |
|---|
| 168 | ROW( 560, 490, 130, 330, 970, 110, 460, 1080, 440, 1350, |
|---|
| 169 | 1120, 300, 430, 540, 430, 420, 540, 950, 580, 670) // L |
|---|
| 170 | |
|---|
| 171 | ROW( 660, 590, 280, 470, 920, 260, 570, 1070, 570, 1120, |
|---|
| 172 | 1540, 420, 360, 660, 490, 550, 670, 920, 560, 650) // M |
|---|
| 173 | |
|---|
| 174 | ROW( 660, 470, 1040, 830, 310, 760, 930, 340, 860, 300, |
|---|
| 175 | 420, 1430, 560, 830, 740, 890, 810, 400, 230, 560) // N |
|---|
| 176 | |
|---|
| 177 | ROW( 770, 260, 590, 640, 200, 480, 560, 350, 620, 430, |
|---|
| 178 | 360, 560, 1740, 700, 570, 780, 740, 460, 40, 300) // P |
|---|
| 179 | |
|---|
| 180 | ROW( 710, 360, 840, 1010, 370, 570, 950, 460, 980, 540, |
|---|
| 181 | 660, 830, 700, 1340, 950, 760, 740, 510, 380, 490) // Q |
|---|
| 182 | |
|---|
| 183 | ROW( 620, 430, 620, 750, 250, 570, 810, 370, 1130, 430, |
|---|
| 184 | 490, 740, 570, 950, 1490, 690, 690, 440, 540, 490) // R |
|---|
| 185 | |
|---|
| 186 | ROW( 940, 760, 780, 750, 330, 770, 700, 450, 740, 420, |
|---|
| 187 | 550, 890, 780, 760, 690, 1220, 1010, 580, 310, 500) // S |
|---|
| 188 | |
|---|
| 189 | ROW( 830, 640, 720, 700, 420, 540, 700, 660, 760, 540, |
|---|
| 190 | 670, 810, 740, 740, 690, 1010, 1280, 780, 240, 460) // T |
|---|
| 191 | |
|---|
| 192 | ROW( 790, 720, 290, 480, 700, 260, 430, 1180, 480, 950, |
|---|
| 193 | 920, 400, 460, 510, 440, 580, 780, 1310, 330, 540) // V |
|---|
| 194 | |
|---|
| 195 | ROW( 230, 570, 0, 140, 1100, 230, 590, 440, 240, 580, |
|---|
| 196 | 560, 230, 40, 380, 540, 310, 240, 330, 2360, 1160) // W |
|---|
| 197 | |
|---|
| 198 | ROW( 410, 650, 360, 340, 1340, 180, 1050, 580, 430, 670, |
|---|
| 199 | 650, 560, 300, 490, 490, 500, 460, 540, 1160, 1780) // Y |
|---|
| 200 | }; |
|---|
| 201 | |
|---|
| 202 | double Gonnet16[21][21] = |
|---|
| 203 | { |
|---|
| 204 | // A C D E F G H I K L |
|---|
| 205 | // M N P Q R S T V W Y |
|---|
| 206 | ROW( 124, 81, 67, 74, 40, 80, 60, 60, 66, 56, |
|---|
| 207 | 66, 66, 77, 71, 62, 94, 83, 79, 23, 41) // A |
|---|
| 208 | |
|---|
| 209 | ROW( 81, 213, 25, 26, 60, 44, 55, 53, 30, 49, |
|---|
| 210 | 59, 47, 26, 36, 43, 76, 64, 72, 57, 65) // C |
|---|
| 211 | |
|---|
| 212 | ROW( 67, 25, 148, 112, 8, 71, 77, 16, 77, 13, |
|---|
| 213 | 28, 104, 59, 84, 62, 78, 72, 29, 0, 36) // D |
|---|
| 214 | |
|---|
| 215 | ROW( 74, 26, 112, 137, 16, 57, 77, 35, 91, 33, |
|---|
| 216 | 47, 83, 64, 101, 75, 75, 70, 48, 14, 34) // E |
|---|
| 217 | |
|---|
| 218 | ROW( 40, 60, 8, 16, 169, 2, 71, 81, 25, 97, |
|---|
| 219 | 92, 31, 20, 37, 25, 33, 42, 70, 110, 134) // F |
|---|
| 220 | |
|---|
| 221 | ROW( 80, 44, 71, 57, 2, 160, 51, 8, 54, 11, |
|---|
| 222 | 26, 76, 48, 57, 57, 77, 54, 26, 23, 18) // G |
|---|
| 223 | |
|---|
| 224 | ROW( 60, 55, 77, 77, 71, 51, 171, 41, 80, 46, |
|---|
| 225 | 57, 93, 56, 95, 81, 70, 70, 43, 59, 105) // H |
|---|
| 226 | |
|---|
| 227 | ROW( 60, 53, 16, 35, 81, 8, 41, 137, 43, 108, |
|---|
| 228 | 107, 34, 35, 46, 37, 45, 66, 118, 44, 58) // I |
|---|
| 229 | |
|---|
| 230 | ROW( 66, 30, 77, 91, 25, 54, 80, 43, 133, 44, |
|---|
| 231 | 57, 86, 62, 98, 113, 74, 76, 48, 24, 43) // K |
|---|
| 232 | |
|---|
| 233 | ROW( 56, 49, 13, 33, 97, 11, 46, 108, 44, 135, |
|---|
| 234 | 112, 30, 43, 54, 43, 42, 54, 95, 58, 67) // L |
|---|
| 235 | |
|---|
| 236 | ROW( 66, 59, 28, 47, 92, 26, 57, 107, 57, 112, |
|---|
| 237 | 154, 42, 36, 66, 49, 55, 67, 92, 56, 65) // M |
|---|
| 238 | |
|---|
| 239 | ROW( 66, 47, 104, 83, 31, 76, 93, 34, 86, 30, |
|---|
| 240 | 42, 143, 56, 83, 74, 89, 81, 40, 23, 56) // N |
|---|
| 241 | |
|---|
| 242 | ROW( 77, 26, 59, 64, 20, 48, 56, 35, 62, 43, |
|---|
| 243 | 36, 56, 174, 70, 57, 78, 74, 46, 4, 30) // P |
|---|
| 244 | |
|---|
| 245 | ROW( 71, 36, 84, 101, 37, 57, 95, 46, 98, 54, |
|---|
| 246 | 66, 83, 70, 134, 95, 76, 74, 51, 38, 49) // Q |
|---|
| 247 | |
|---|
| 248 | ROW( 62, 43, 62, 75, 25, 57, 81, 37, 113, 43, |
|---|
| 249 | 49, 74, 57, 95, 149, 69, 69, 44, 54, 49) // R |
|---|
| 250 | |
|---|
| 251 | ROW( 94, 76, 78, 75, 33, 77, 70, 45, 74, 42, |
|---|
| 252 | 55, 89, 78, 76, 69, 122, 101, 58, 31, 50) // S |
|---|
| 253 | |
|---|
| 254 | ROW( 83, 64, 72, 70, 42, 54, 70, 66, 76, 54, |
|---|
| 255 | 67, 81, 74, 74, 69, 101, 128, 78, 24, 46) // T |
|---|
| 256 | |
|---|
| 257 | ROW( 79, 72, 29, 48, 70, 26, 43, 118, 48, 95, |
|---|
| 258 | 92, 40, 46, 51, 44, 58, 78, 131, 33, 54) // V |
|---|
| 259 | |
|---|
| 260 | ROW( 23, 57, 0, 14, 110, 23, 59, 44, 24, 58, |
|---|
| 261 | 56, 23, 4, 38, 54, 31, 24, 33, 236, 116) // W |
|---|
| 262 | |
|---|
| 263 | ROW( 41, 65, 36, 34, 134, 18, 105, 58, 43, 67, |
|---|
| 264 | 65, 56, 30, 49, 49, 50, 46, 54, 116, 178) // Y |
|---|
| 265 | }; |
|---|
| 266 | |
|---|
| 267 | static double Gonnet250[20][20] = |
|---|
| 268 | { |
|---|
| 269 | // A C D E F G H I K L |
|---|
| 270 | // M N P Q R S T V W Y |
|---|
| 271 | ROW( 760, 570, 490, 520, 290, 570, 440, 440, 480, 400, |
|---|
| 272 | 450, 490, 550, 500, 460, 630, 580, 530, 160, 300) // A |
|---|
| 273 | |
|---|
| 274 | ROW( 570, 1670, 200, 220, 440, 320, 390, 410, 240, 370, |
|---|
| 275 | 430, 340, 210, 280, 300, 530, 470, 520, 420, 470) // C |
|---|
| 276 | |
|---|
| 277 | ROW( 490, 200, 990, 790, 70, 530, 560, 140, 570, 120, |
|---|
| 278 | 220, 740, 450, 610, 490, 570, 520, 230, 0, 240) // D |
|---|
| 279 | |
|---|
| 280 | ROW( 520, 220, 790, 880, 130, 440, 560, 250, 640, 240, |
|---|
| 281 | 320, 610, 470, 690, 560, 540, 510, 330, 90, 250) // E |
|---|
| 282 | |
|---|
| 283 | ROW( 290, 440, 70, 130, 1220, 0, 510, 620, 190, 720, |
|---|
| 284 | 680, 210, 140, 260, 200, 240, 300, 530, 880, 1030) // F |
|---|
| 285 | |
|---|
| 286 | ROW( 570, 320, 530, 440, 0, 1180, 380, 70, 410, 80, |
|---|
| 287 | 170, 560, 360, 420, 420, 560, 410, 190, 120, 120) // G |
|---|
| 288 | |
|---|
| 289 | ROW( 440, 390, 560, 560, 510, 380, 1120, 300, 580, 330, |
|---|
| 290 | 390, 640, 410, 640, 580, 500, 490, 320, 440, 740) // H |
|---|
| 291 | |
|---|
| 292 | ROW( 440, 410, 140, 250, 620, 70, 300, 920, 310, 800, |
|---|
| 293 | 770, 240, 260, 330, 280, 340, 460, 830, 340, 450) // I |
|---|
| 294 | |
|---|
| 295 | ROW( 480, 240, 570, 640, 190, 410, 580, 310, 840, 310, |
|---|
| 296 | 380, 600, 460, 670, 790, 530, 530, 350, 170, 310) // K |
|---|
| 297 | |
|---|
| 298 | ROW( 400, 370, 120, 240, 720, 80, 330, 800, 310, 920, |
|---|
| 299 | 800, 220, 290, 360, 300, 310, 390, 700, 450, 520) // L |
|---|
| 300 | |
|---|
| 301 | ROW( 450, 430, 220, 320, 680, 170, 390, 770, 380, 800, |
|---|
| 302 | 950, 300, 280, 420, 350, 380, 460, 680, 420, 500) // M |
|---|
| 303 | |
|---|
| 304 | ROW( 490, 340, 740, 610, 210, 560, 640, 240, 600, 220, |
|---|
| 305 | 300, 900, 430, 590, 550, 610, 570, 300, 160, 380) // N |
|---|
| 306 | |
|---|
| 307 | ROW( 550, 210, 450, 470, 140, 360, 410, 260, 460, 290, |
|---|
| 308 | 280, 430, 1280, 500, 430, 560, 530, 340, 20, 210) // P |
|---|
| 309 | |
|---|
| 310 | ROW( 500, 280, 610, 690, 260, 420, 640, 330, 670, 360, |
|---|
| 311 | 420, 590, 500, 790, 670, 540, 520, 370, 250, 350) // Q |
|---|
| 312 | |
|---|
| 313 | ROW( 460, 300, 490, 560, 200, 420, 580, 280, 790, 300, |
|---|
| 314 | 350, 550, 430, 670, 990, 500, 500, 320, 360, 340) // R |
|---|
| 315 | |
|---|
| 316 | ROW( 630, 530, 570, 540, 240, 560, 500, 340, 530, 310, |
|---|
| 317 | 380, 610, 560, 540, 500, 740, 670, 420, 190, 330) // S |
|---|
| 318 | |
|---|
| 319 | ROW( 580, 470, 520, 510, 300, 410, 490, 460, 530, 390, |
|---|
| 320 | 460, 570, 530, 520, 500, 670, 770, 520, 170, 330) // T |
|---|
| 321 | |
|---|
| 322 | ROW( 530, 520, 230, 330, 530, 190, 320, 830, 350, 700, |
|---|
| 323 | 680, 300, 340, 370, 320, 420, 520, 860, 260, 410) // V |
|---|
| 324 | |
|---|
| 325 | ROW( 160, 420, 0, 90, 880, 120, 440, 340, 170, 450, |
|---|
| 326 | 420, 160, 20, 250, 360, 190, 170, 260, 1940, 930) // W |
|---|
| 327 | |
|---|
| 328 | ROW( 300, 470, 240, 250, 1030, 120, 740, 450, 310, 520, |
|---|
| 329 | 500, 380, 210, 350, 340, 330, 330, 410, 930, 1300) // Y |
|---|
| 330 | }; |
|---|
| 331 | |
|---|
| 332 | static double Gonnet350[20][20] = |
|---|
| 333 | { |
|---|
| 334 | // A C D E F G H I K L |
|---|
| 335 | // M N P Q R S T V W Y |
|---|
| 336 | ROW( 450, 390, 350, 360, 210, 400, 310, 310, 340, 280, |
|---|
| 337 | 310, 350, 380, 350, 330, 410, 390, 350, 110, 210) // A |
|---|
| 338 | |
|---|
| 339 | ROW( 390, 1280, 160, 180, 320, 230, 270, 300, 190, 280, |
|---|
| 340 | 310, 240, 170, 210, 220, 360, 330, 370, 310, 340) // C |
|---|
| 341 | |
|---|
| 342 | ROW( 350, 160, 640, 540, 50, 390, 400, 110, 410, 100, |
|---|
| 343 | 160, 500, 330, 430, 370, 400, 370, 170, 0, 170) // D |
|---|
| 344 | |
|---|
| 345 | ROW( 360, 180, 540, 550, 100, 330, 390, 180, 440, 170, |
|---|
| 346 | 220, 440, 350, 460, 410, 380, 360, 230, 60, 180) // E |
|---|
| 347 | |
|---|
| 348 | ROW( 210, 320, 50, 100, 860, 0, 360, 460, 140, 530, |
|---|
| 349 | 490, 150, 100, 190, 150, 170, 220, 400, 700, 770) // F |
|---|
| 350 | |
|---|
| 351 | ROW( 400, 230, 390, 330, 0, 860, 280, 60, 310, 50, |
|---|
| 352 | 120, 400, 280, 310, 310, 400, 300, 140, 50, 80) // G |
|---|
| 353 | |
|---|
| 354 | ROW( 310, 270, 400, 390, 360, 280, 680, 220, 400, 240, |
|---|
| 355 | 270, 430, 300, 420, 410, 350, 340, 240, 320, 500) // H |
|---|
| 356 | |
|---|
| 357 | ROW( 310, 300, 110, 180, 460, 60, 220, 620, 220, 570, |
|---|
| 358 | 540, 170, 190, 240, 200, 240, 320, 570, 260, 340) // I |
|---|
| 359 | |
|---|
| 360 | ROW( 340, 190, 410, 440, 140, 310, 400, 220, 530, 210, |
|---|
| 361 | 260, 420, 330, 450, 530, 370, 370, 250, 120, 210) // K |
|---|
| 362 | |
|---|
| 363 | ROW( 280, 280, 100, 170, 530, 50, 240, 570, 210, 630, |
|---|
| 364 | 560, 160, 200, 240, 210, 220, 280, 510, 340, 400) // L |
|---|
| 365 | |
|---|
| 366 | ROW( 310, 310, 160, 220, 490, 120, 270, 540, 260, 560, |
|---|
| 367 | 580, 210, 210, 280, 240, 260, 310, 490, 320, 370) // M |
|---|
| 368 | |
|---|
| 369 | ROW( 350, 240, 500, 440, 150, 400, 430, 170, 420, 160, |
|---|
| 370 | 210, 550, 320, 410, 390, 410, 390, 220, 110, 250) // N |
|---|
| 371 | |
|---|
| 372 | ROW( 380, 170, 330, 350, 100, 280, 300, 190, 330, 200, |
|---|
| 373 | 210, 320, 910, 350, 310, 390, 370, 240, 10, 150) // P |
|---|
| 374 | |
|---|
| 375 | ROW( 350, 210, 430, 460, 190, 310, 420, 240, 450, 240, |
|---|
| 376 | 280, 410, 350, 470, 450, 370, 360, 260, 160, 240) // Q |
|---|
| 377 | |
|---|
| 378 | ROW( 330, 220, 370, 410, 150, 310, 410, 200, 530, 210, |
|---|
| 379 | 240, 390, 310, 450, 630, 360, 350, 230, 230, 230) // R |
|---|
| 380 | |
|---|
| 381 | ROW( 410, 360, 400, 380, 170, 400, 350, 240, 370, 220, |
|---|
| 382 | 260, 410, 390, 370, 360, 450, 430, 290, 130, 230) // S |
|---|
| 383 | |
|---|
| 384 | ROW( 390, 330, 370, 360, 220, 300, 340, 320, 370, 280, |
|---|
| 385 | 310, 390, 370, 360, 350, 430, 460, 350, 120, 230) // T |
|---|
| 386 | |
|---|
| 387 | ROW( 350, 370, 170, 230, 400, 140, 240, 570, 250, 510, |
|---|
| 388 | 490, 220, 240, 260, 230, 290, 350, 560, 210, 310) // V |
|---|
| 389 | |
|---|
| 390 | ROW( 110, 310, 0, 60, 700, 50, 320, 260, 120, 340, |
|---|
| 391 | 320, 110, 10, 160, 230, 130, 120, 210, 1590, 740) // W |
|---|
| 392 | |
|---|
| 393 | ROW( 210, 340, 170, 180, 770, 80, 500, 340, 210, 400, |
|---|
| 394 | 370, 250, 150, 240, 230, 230, 230, 310, 740, 920) // Y |
|---|
| 395 | }; |
|---|
| 396 | |
|---|
| 397 | const t_ROW *GetGonnetMatrix(unsigned N) |
|---|
| 398 | { |
|---|
| 399 | switch (N) |
|---|
| 400 | { |
|---|
| 401 | case 80: |
|---|
| 402 | return Gonnet80; |
|---|
| 403 | case 120: |
|---|
| 404 | return Gonnet120; |
|---|
| 405 | //case 16: |
|---|
| 406 | // return Gonnet16; |
|---|
| 407 | //case 160: |
|---|
| 408 | // return Gonnet160; |
|---|
| 409 | case 250: |
|---|
| 410 | return Gonnet250; |
|---|
| 411 | case 350: |
|---|
| 412 | return Gonnet350; |
|---|
| 413 | } |
|---|
| 414 | Quit("Invalid Gonnet%u", N); |
|---|
| 415 | return 0; |
|---|
| 416 | } |
|---|
| 417 | |
|---|
| 418 | //SCORE GetGonnetGapOpen(unsigned N) |
|---|
| 419 | // { |
|---|
| 420 | // switch (N) |
|---|
| 421 | // { |
|---|
| 422 | // case 80: |
|---|
| 423 | // return -639; |
|---|
| 424 | // case 120: |
|---|
| 425 | // return -863; |
|---|
| 426 | // case 160: |
|---|
| 427 | // return -611; |
|---|
| 428 | // case 250: |
|---|
| 429 | // return -308; |
|---|
| 430 | // case 350: |
|---|
| 431 | // return -158; |
|---|
| 432 | // } |
|---|
| 433 | // Quit("Invalid Gonnet%u", N); |
|---|
| 434 | // return 0; |
|---|
| 435 | // } |
|---|
| 436 | |
|---|
| 437 | SCORE GetGonnetGapOpen(unsigned N) |
|---|
| 438 | { |
|---|
| 439 | switch (N) |
|---|
| 440 | { |
|---|
| 441 | case 80: |
|---|
| 442 | return -1000; |
|---|
| 443 | case 120: |
|---|
| 444 | return -800; |
|---|
| 445 | case 160: |
|---|
| 446 | return -700; |
|---|
| 447 | case 250: |
|---|
| 448 | return -200; |
|---|
| 449 | case 350: |
|---|
| 450 | return -175; |
|---|
| 451 | } |
|---|
| 452 | Quit("Invalid Gonnet%u", N); |
|---|
| 453 | return 0; |
|---|
| 454 | } |
|---|
| 455 | |
|---|
| 456 | SCORE GetGonnetGapExtend(unsigned N) |
|---|
| 457 | { |
|---|
| 458 | switch (N) |
|---|
| 459 | { |
|---|
| 460 | case 80: |
|---|
| 461 | return 350; |
|---|
| 462 | case 120: |
|---|
| 463 | return 200; |
|---|
| 464 | case 160: |
|---|
| 465 | return 175; |
|---|
| 466 | case 250: |
|---|
| 467 | return 20; |
|---|
| 468 | case 350: |
|---|
| 469 | return 20; |
|---|
| 470 | } |
|---|
| 471 | Quit("Invalid Gonnet%u", N); |
|---|
| 472 | return 0; |
|---|
| 473 | } |
|---|
| 474 | |
|---|
| 475 | //double GonnetLookup[400][400]; |
|---|
| 476 | // |
|---|
| 477 | //static bool InitGonnetLookup() |
|---|
| 478 | // { |
|---|
| 479 | // for (unsigned i = 0; i < 400; ++i) |
|---|
| 480 | // { |
|---|
| 481 | // const unsigned A1 = i/20; |
|---|
| 482 | // const unsigned A2 = i%20; |
|---|
| 483 | // for (unsigned j = 0; j <= i; ++j) |
|---|
| 484 | // { |
|---|
| 485 | // const unsigned B1 = j/20; |
|---|
| 486 | // const unsigned B2 = j%20; |
|---|
| 487 | // |
|---|
| 488 | // const double s00 = Gonnet16[A1][B1]; |
|---|
| 489 | // const double s01 = Gonnet16[A1][B2]; |
|---|
| 490 | // const double s10 = Gonnet16[A2][B1]; |
|---|
| 491 | // const double s11 = Gonnet16[A2][B2]; |
|---|
| 492 | // |
|---|
| 493 | // GonnetLookup[i][j] = GonnetLookup[j][i] = (s00 + s01 + s10 + s11)/4; |
|---|
| 494 | // } |
|---|
| 495 | // } |
|---|
| 496 | // return true; |
|---|
| 497 | // } |
|---|
| 498 | // |
|---|
| 499 | //static bool bGonnetLookupInitialized = InitGonnetLookup(); |
|---|