puzzle-lib 2.0.0-beta.1 → 2.0.0-beta.2

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.
Files changed (244) hide show
  1. package/README.md +62 -9
  2. package/build/src/{Braille → braille}/braille.d.ts +4 -4
  3. package/build/src/braille/braille.js +121 -0
  4. package/build/src/braille/braille.js.map +1 -0
  5. package/build/src/{Braille/BrailleDot.js → braille/dot.js} +3 -6
  6. package/build/src/braille/dot.js.map +1 -0
  7. package/build/src/{Braille/BrailleEncoding.js → braille/encoding.js} +4 -7
  8. package/build/src/braille/encoding.js.map +1 -0
  9. package/build/src/braille/index.d.ts +3 -0
  10. package/build/src/braille/index.js +4 -0
  11. package/build/src/braille/index.js.map +1 -0
  12. package/build/src/{Cipher → cipher}/cipher.js +10 -20
  13. package/build/src/cipher/cipher.js.map +1 -0
  14. package/build/src/cipher/index.d.ts +1 -0
  15. package/build/src/cipher/index.js +2 -0
  16. package/build/src/cipher/index.js.map +1 -0
  17. package/build/src/{Common/CharacterImage.d.ts → common/character-image.d.ts} +1 -1
  18. package/build/src/common/character-image.js +9 -0
  19. package/build/src/common/character-image.js.map +1 -0
  20. package/build/src/{Common/EncodingCategory.js → common/encoding-category.js} +3 -6
  21. package/build/src/common/encoding-category.js.map +1 -0
  22. package/build/src/{Common/EncodingEntry.d.ts → common/encoding-entry.d.ts} +1 -1
  23. package/build/src/{Common/EncodingEntry.js → common/encoding-entry.js} +2 -6
  24. package/build/src/common/encoding-entry.js.map +1 -0
  25. package/build/src/{Common/EncodingLookupResult.d.ts → common/encoding-lookup-result.d.ts} +1 -1
  26. package/build/src/common/encoding-lookup-result.js +8 -0
  27. package/build/src/common/encoding-lookup-result.js.map +1 -0
  28. package/build/src/common/index.d.ts +5 -0
  29. package/build/src/common/index.js +6 -0
  30. package/build/src/common/index.js.map +1 -0
  31. package/build/src/{Common/InlineSvg.js → common/inline-svg.js} +2 -6
  32. package/build/src/common/inline-svg.js.map +1 -0
  33. package/build/src/{Conversion/characterConversion.d.ts → conversion/character-conversion.d.ts} +1 -1
  34. package/build/src/{Conversion/characterConversion.js → conversion/character-conversion.js} +7 -13
  35. package/build/src/conversion/character-conversion.js.map +1 -0
  36. package/build/src/{Conversion/CharacterEncoding.d.ts → conversion/character-encoding.d.ts} +2 -1
  37. package/build/src/{Conversion/CharacterEncoding.js → conversion/character-encoding.js} +4 -6
  38. package/build/src/conversion/character-encoding.js.map +1 -0
  39. package/build/src/{Conversion/CharacterTableEntry.js → conversion/character-table-entry.js} +2 -6
  40. package/build/src/conversion/character-table-entry.js.map +1 -0
  41. package/build/src/{Conversion → conversion}/conversion.d.ts +3 -1
  42. package/build/src/{Conversion → conversion}/conversion.js +63 -27
  43. package/build/src/conversion/conversion.js.map +1 -0
  44. package/build/src/conversion/index.d.ts +5 -0
  45. package/build/src/conversion/index.js +6 -0
  46. package/build/src/conversion/index.js.map +1 -0
  47. package/build/src/{Conversion/significantFigures.js → conversion/significant-figures.js} +4 -9
  48. package/build/src/conversion/significant-figures.js.map +1 -0
  49. package/build/src/{Morse/MorseEncoding.js → morse/encoding.js} +3 -6
  50. package/build/src/morse/encoding.js.map +1 -0
  51. package/build/src/morse/index.d.ts +2 -0
  52. package/build/src/morse/index.js +3 -0
  53. package/build/src/morse/index.js.map +1 -0
  54. package/build/src/{Morse → morse}/morse.d.ts +3 -3
  55. package/build/src/morse/morse.js +222 -0
  56. package/build/src/morse/morse.js.map +1 -0
  57. package/build/src/nato/character.js +9 -0
  58. package/build/src/nato/character.js.map +1 -0
  59. package/build/src/nato/index.d.ts +2 -0
  60. package/build/src/nato/index.js +3 -0
  61. package/build/src/nato/index.js.map +1 -0
  62. package/build/src/{Nato → nato}/nato.d.ts +1 -1
  63. package/build/src/nato/nato.js +33 -0
  64. package/build/src/nato/nato.js.map +1 -0
  65. package/build/src/naval-flags/index.d.ts +1 -0
  66. package/build/src/naval-flags/index.js +2 -0
  67. package/build/src/naval-flags/index.js.map +1 -0
  68. package/build/src/{NavalFlags/navalFlags.d.ts → naval-flags/naval-flags.d.ts} +1 -1
  69. package/build/src/{NavalFlags/navalFlags.js → naval-flags/naval-flags.js} +32 -36
  70. package/build/src/naval-flags/naval-flags.js.map +1 -0
  71. package/build/src/ngrams/bigrams.d.ts +2 -0
  72. package/build/src/ngrams/bigrams.js +684 -0
  73. package/build/src/ngrams/bigrams.js.map +1 -0
  74. package/build/src/ngrams/index.d.ts +1 -0
  75. package/build/src/ngrams/index.js +2 -0
  76. package/build/src/ngrams/index.js.map +1 -0
  77. package/build/src/ngrams/ngrams.d.ts +13 -0
  78. package/build/src/ngrams/ngrams.js +71 -0
  79. package/build/src/ngrams/ngrams.js.map +1 -0
  80. package/build/src/ngrams/trigrams.d.ts +2 -0
  81. package/build/src/ngrams/trigrams.js +17583 -0
  82. package/build/src/ngrams/trigrams.js.map +1 -0
  83. package/build/src/ngrams/unigrams.d.ts +2 -0
  84. package/build/src/ngrams/unigrams.js +34 -0
  85. package/build/src/ngrams/unigrams.js.map +1 -0
  86. package/build/src/phone/index.d.ts +2 -0
  87. package/build/src/phone/index.js +2 -0
  88. package/build/src/phone/index.js.map +1 -0
  89. package/build/src/phone/phone-mapping.d.ts +10 -0
  90. package/build/src/phone/phone-mapping.js +27 -0
  91. package/build/src/phone/phone-mapping.js.map +1 -0
  92. package/build/src/phone/phone.d.ts +27 -0
  93. package/build/src/phone/phone.js +62 -0
  94. package/build/src/phone/phone.js.map +1 -0
  95. package/build/src/pigpen/encoding.d.ts +29 -0
  96. package/build/src/pigpen/encoding.js +36 -0
  97. package/build/src/pigpen/encoding.js.map +1 -0
  98. package/build/src/pigpen/index.d.ts +3 -0
  99. package/build/src/pigpen/index.js +4 -0
  100. package/build/src/pigpen/index.js.map +1 -0
  101. package/build/src/pigpen/pigpen.d.ts +35 -0
  102. package/build/src/pigpen/pigpen.js +137 -0
  103. package/build/src/pigpen/pigpen.js.map +1 -0
  104. package/build/src/pigpen/segment.d.ts +12 -0
  105. package/build/src/pigpen/segment.js +14 -0
  106. package/build/src/pigpen/segment.js.map +1 -0
  107. package/build/src/resistor/index.d.ts +2 -0
  108. package/build/src/resistor/index.js +2 -0
  109. package/build/src/resistor/index.js.map +1 -0
  110. package/build/src/{Resistor → resistor}/resistor.js +7 -14
  111. package/build/src/resistor/resistor.js.map +1 -0
  112. package/build/src/{Semaphore/SemaphoreDirection.js → semaphore/direction.js} +3 -6
  113. package/build/src/semaphore/direction.js.map +1 -0
  114. package/build/src/{Semaphore/SemaphoreEncoding.js → semaphore/encoding.js} +4 -7
  115. package/build/src/semaphore/encoding.js.map +1 -0
  116. package/build/src/semaphore/index.d.ts +3 -0
  117. package/build/src/semaphore/index.js +4 -0
  118. package/build/src/semaphore/index.js.map +1 -0
  119. package/build/src/{Semaphore → semaphore}/semaphore.d.ts +4 -4
  120. package/build/src/semaphore/semaphore.js +207 -0
  121. package/build/src/semaphore/semaphore.js.map +1 -0
  122. package/build/src/{WordSearch/WordSearchDirection.js → word-search/direction.js} +3 -6
  123. package/build/src/word-search/direction.js.map +1 -0
  124. package/build/src/word-search/index.d.ts +5 -0
  125. package/build/src/word-search/index.js +4 -0
  126. package/build/src/word-search/index.js.map +1 -0
  127. package/build/src/word-search/point.d.ts +4 -0
  128. package/build/src/word-search/point.js +2 -0
  129. package/build/src/word-search/point.js.map +1 -0
  130. package/build/src/word-search/result.d.ts +6 -0
  131. package/build/src/word-search/result.js +9 -0
  132. package/build/src/word-search/result.js.map +1 -0
  133. package/build/src/{WordSearch/wordSearch.d.ts → word-search/word-search.d.ts} +3 -3
  134. package/build/src/{WordSearch/wordSearch.js → word-search/word-search.js} +13 -17
  135. package/build/src/word-search/word-search.js.map +1 -0
  136. package/package.json +57 -3
  137. package/src/{Braille → braille}/braille.ts +5 -5
  138. package/src/{Braille/BrailleEncoding.ts → braille/encoding.ts} +1 -1
  139. package/src/braille/index.ts +8 -0
  140. package/src/{Cipher → cipher}/cipher.ts +1 -1
  141. package/src/cipher/index.ts +10 -0
  142. package/src/{Common/CharacterImage.ts → common/character-image.ts} +1 -1
  143. package/src/{Common/EncodingEntry.ts → common/encoding-entry.ts} +1 -1
  144. package/src/{Common/EncodingLookupResult.ts → common/encoding-lookup-result.ts} +1 -1
  145. package/src/common/index.ts +5 -0
  146. package/src/{Conversion/characterConversion.ts → conversion/character-conversion.ts} +1 -1
  147. package/src/{Conversion/CharacterEncoding.ts → conversion/character-encoding.ts} +1 -0
  148. package/src/{Conversion → conversion}/conversion.ts +57 -1
  149. package/src/conversion/index.ts +15 -0
  150. package/src/morse/index.ts +14 -0
  151. package/src/{Morse → morse}/morse.ts +4 -4
  152. package/src/nato/index.ts +2 -0
  153. package/src/{Nato → nato}/nato.ts +1 -1
  154. package/src/naval-flags/index.ts +1 -0
  155. package/src/{NavalFlags/navalFlags.ts → naval-flags/naval-flags.ts} +2 -2
  156. package/src/ngrams/bigrams.ts +684 -0
  157. package/src/ngrams/index.ts +1 -0
  158. package/src/ngrams/ngrams.ts +73 -0
  159. package/src/ngrams/trigrams.ts +17584 -0
  160. package/src/ngrams/unigrams.ts +34 -0
  161. package/src/phone/index.ts +2 -0
  162. package/src/phone/phone-mapping.ts +27 -0
  163. package/src/phone/phone.ts +77 -0
  164. package/src/pigpen/encoding.ts +66 -0
  165. package/src/pigpen/index.ts +11 -0
  166. package/src/pigpen/pigpen.ts +168 -0
  167. package/src/pigpen/segment.ts +12 -0
  168. package/src/resistor/index.ts +9 -0
  169. package/src/{Semaphore/SemaphoreEncoding.ts → semaphore/encoding.ts} +1 -1
  170. package/src/semaphore/index.ts +13 -0
  171. package/src/{Semaphore → semaphore}/semaphore.ts +5 -5
  172. package/src/trie-prefix-tree.d.ts +1 -3
  173. package/src/word-search/index.ts +5 -0
  174. package/src/word-search/point.ts +4 -0
  175. package/src/word-search/result.ts +10 -0
  176. package/src/{WordSearch/wordSearch.ts → word-search/word-search.ts} +26 -26
  177. package/build/src/Braille/BrailleDot.js.map +0 -1
  178. package/build/src/Braille/BrailleEncoding.js.map +0 -1
  179. package/build/src/Braille/braille.js +0 -127
  180. package/build/src/Braille/braille.js.map +0 -1
  181. package/build/src/Cipher/cipher.js.map +0 -1
  182. package/build/src/Common/CharacterImage.js +0 -13
  183. package/build/src/Common/CharacterImage.js.map +0 -1
  184. package/build/src/Common/EncodingCategory.js.map +0 -1
  185. package/build/src/Common/EncodingEntry.js.map +0 -1
  186. package/build/src/Common/EncodingLookupResult.js +0 -12
  187. package/build/src/Common/EncodingLookupResult.js.map +0 -1
  188. package/build/src/Common/InlineSvg.js.map +0 -1
  189. package/build/src/Conversion/CharacterEncoding.js.map +0 -1
  190. package/build/src/Conversion/CharacterTableEntry.js.map +0 -1
  191. package/build/src/Conversion/characterConversion.js.map +0 -1
  192. package/build/src/Conversion/conversion.js.map +0 -1
  193. package/build/src/Conversion/significantFigures.js.map +0 -1
  194. package/build/src/Morse/MorseEncoding.js.map +0 -1
  195. package/build/src/Morse/morse.js +0 -232
  196. package/build/src/Morse/morse.js.map +0 -1
  197. package/build/src/Nato/NatoCharacter.js +0 -13
  198. package/build/src/Nato/NatoCharacter.js.map +0 -1
  199. package/build/src/Nato/nato.js +0 -37
  200. package/build/src/Nato/nato.js.map +0 -1
  201. package/build/src/NavalFlags/navalFlags.js.map +0 -1
  202. package/build/src/Resistor/resistor.js.map +0 -1
  203. package/build/src/Semaphore/SemaphoreDirection.js.map +0 -1
  204. package/build/src/Semaphore/SemaphoreEncoding.js.map +0 -1
  205. package/build/src/Semaphore/semaphore.js +0 -218
  206. package/build/src/Semaphore/semaphore.js.map +0 -1
  207. package/build/src/WordSearch/Point.d.ts +0 -4
  208. package/build/src/WordSearch/Point.js +0 -3
  209. package/build/src/WordSearch/Point.js.map +0 -1
  210. package/build/src/WordSearch/Result.d.ts +0 -6
  211. package/build/src/WordSearch/Result.js +0 -13
  212. package/build/src/WordSearch/Result.js.map +0 -1
  213. package/build/src/WordSearch/WordSearchDirection.js.map +0 -1
  214. package/build/src/WordSearch/wordSearch.js.map +0 -1
  215. package/build/src/index.d.ts +0 -29
  216. package/build/src/index.js +0 -101
  217. package/build/src/index.js.map +0 -1
  218. package/src/WordSearch/Point.ts +0 -4
  219. package/src/WordSearch/Result.ts +0 -10
  220. package/src/index.ts +0 -86
  221. /package/build/src/{Braille/BrailleDot.d.ts → braille/dot.d.ts} +0 -0
  222. /package/build/src/{Braille/BrailleEncoding.d.ts → braille/encoding.d.ts} +0 -0
  223. /package/build/src/{Cipher → cipher}/cipher.d.ts +0 -0
  224. /package/build/src/{Common/EncodingCategory.d.ts → common/encoding-category.d.ts} +0 -0
  225. /package/build/src/{Common/InlineSvg.d.ts → common/inline-svg.d.ts} +0 -0
  226. /package/build/src/{Conversion/CharacterTableEntry.d.ts → conversion/character-table-entry.d.ts} +0 -0
  227. /package/build/src/{Conversion/significantFigures.d.ts → conversion/significant-figures.d.ts} +0 -0
  228. /package/build/src/{Morse/MorseEncoding.d.ts → morse/encoding.d.ts} +0 -0
  229. /package/build/src/{Nato/NatoCharacter.d.ts → nato/character.d.ts} +0 -0
  230. /package/build/src/{Resistor → resistor}/resistor.d.ts +0 -0
  231. /package/build/src/{Semaphore/SemaphoreDirection.d.ts → semaphore/direction.d.ts} +0 -0
  232. /package/build/src/{Semaphore/SemaphoreEncoding.d.ts → semaphore/encoding.d.ts} +0 -0
  233. /package/build/src/{WordSearch/WordSearchDirection.d.ts → word-search/direction.d.ts} +0 -0
  234. /package/src/{Braille/BrailleDot.ts → braille/dot.ts} +0 -0
  235. /package/src/{Common/EncodingCategory.ts → common/encoding-category.ts} +0 -0
  236. /package/src/{Common/InlineSvg.ts → common/inline-svg.ts} +0 -0
  237. /package/src/{Conversion/CharacterTableEntry.ts → conversion/character-table-entry.ts} +0 -0
  238. /package/src/{Conversion/significantFigures.ts → conversion/significant-figures.ts} +0 -0
  239. /package/src/{Morse/MorseEncoding.ts → morse/encoding.ts} +0 -0
  240. /package/src/{Nato/NatoCharacter.ts → nato/character.ts} +0 -0
  241. /package/src/{NavalFlags → naval-flags}/LICENSE +0 -0
  242. /package/src/{Resistor → resistor}/resistor.ts +0 -0
  243. /package/src/{Semaphore/SemaphoreDirection.ts → semaphore/direction.ts} +0 -0
  244. /package/src/{WordSearch/WordSearchDirection.ts → word-search/direction.ts} +0 -0
@@ -1,7 +1,8 @@
1
- import {CharacterEncoding} from './CharacterEncoding';
1
+ import {CharacterEncoding} from './character-encoding.js';
2
2
 
3
3
  const BINARY_REGEX = /^[01]+$/;
4
4
  const TERNARY_REGEX = /^[0-2]{3}$/;
5
+ const HEX_REGEX = /^[0-9a-f]{2}$/i;
5
6
 
6
7
  function appearsBinary(str: string): boolean {
7
8
  return BINARY_REGEX.test(str);
@@ -18,10 +19,26 @@ function asciiPrintable(index: number): string {
18
19
  return String.fromCharCode(index);
19
20
  }
20
21
 
22
+ /**
23
+ * Checks if a token could be valid printable hex.
24
+ */
25
+ function appearsHexPrintable(input: string): boolean {
26
+ if (!HEX_REGEX.test(input)) {
27
+ return false;
28
+ }
29
+ const hex = Number.parseInt(input, 16);
30
+ return hex >= 32 && hex <= 126;
31
+ }
32
+
21
33
  /**
22
34
  * Determines the character encoding of a single input token.
23
35
  */
24
36
  export function determineCharacterEncoding(input: string): CharacterEncoding {
37
+ // Unambiguous hex: 2 hex chars with at least one a-f letter and at least one digit
38
+ if (HEX_REGEX.test(input) && /[a-f]/i.test(input) && /[0-9]/.test(input)) {
39
+ return CharacterEncoding.Hexadecimal;
40
+ }
41
+
25
42
  if (input.match(/[a-z]/i)) {
26
43
  return CharacterEncoding.Latin;
27
44
  }
@@ -51,6 +68,11 @@ export function determineCharacterEncoding(input: string): CharacterEncoding {
51
68
  return CharacterEncoding.Ascii;
52
69
  }
53
70
 
71
+ // All-digit 2-char tokens that aren't decimal but are valid printable hex
72
+ if (appearsHexPrintable(input)) {
73
+ return CharacterEncoding.Hexadecimal;
74
+ }
75
+
54
76
  return CharacterEncoding.None;
55
77
  }
56
78
 
@@ -77,6 +99,14 @@ export function convertCharacter(
77
99
  return asciiPrintable(baseTen);
78
100
  }
79
101
 
102
+ if (encoding === CharacterEncoding.Hexadecimal) {
103
+ const hex = Number.parseInt(input, 16);
104
+ if (Number.isNaN(hex)) {
105
+ return '';
106
+ }
107
+ return asciiPrintable(hex);
108
+ }
109
+
80
110
  const asciiOffset = 64;
81
111
  if (encoding === CharacterEncoding.Ordinal) {
82
112
  return asciiPrintable(baseTen + asciiOffset);
@@ -123,6 +153,8 @@ function splitString(input: string): string[] {
123
153
 
124
154
  /**
125
155
  * Determines the most common encoding across all tokens in a string.
156
+ * When hex and decimal encodings are mixed, tries hex for all tokens
157
+ * and picks whichever produces more printable results.
126
158
  */
127
159
  export function determineStringEncoding(input: string): CharacterEncoding {
128
160
  const encodingCount: {[index: number]: number} = {};
@@ -149,6 +181,30 @@ export function determineStringEncoding(input: string): CharacterEncoding {
149
181
  maxEncoding = encoding;
150
182
  }
151
183
  }
184
+
185
+ // Tiebreaker: if we have a mix of hex and decimal (Ascii/Ordinal) and the
186
+ // most common encoding is a decimal type, check if interpreting everything
187
+ // as hex produces more printable results.
188
+ const hasHex = encodingCount[CharacterEncoding.Hexadecimal] > 0;
189
+ const maxIsDecimal =
190
+ maxEncoding === CharacterEncoding.Ascii ||
191
+ maxEncoding === CharacterEncoding.Ordinal;
192
+
193
+ if (hasHex && maxIsDecimal) {
194
+ const hexPrintable = parsed.filter(
195
+ t =>
196
+ appearsHexPrintable(t) &&
197
+ convertCharacter(t, CharacterEncoding.Hexadecimal) !== '',
198
+ ).length;
199
+ const decPrintable = parsed.filter(
200
+ t => convertCharacter(t, maxEncoding) !== '',
201
+ ).length;
202
+
203
+ if (hexPrintable > decPrintable) {
204
+ return CharacterEncoding.Hexadecimal;
205
+ }
206
+ }
207
+
152
208
  return maxEncoding;
153
209
  }
154
210
 
@@ -0,0 +1,15 @@
1
+ export {
2
+ convertCharacter,
3
+ convertString,
4
+ determineCharacterEncoding,
5
+ determineStringEncoding,
6
+ } from './conversion.js';
7
+ export {
8
+ getAsciiTable,
9
+ getOrdinalTable,
10
+ toAscii,
11
+ toOrdinal,
12
+ } from './character-conversion.js';
13
+ export {CharacterEncoding} from './character-encoding.js';
14
+ export {CharacterTableEntry} from './character-table-entry.js';
15
+ export {sigFigCeil, sigFigFloor, sigFigRound} from './significant-figures.js';
@@ -0,0 +1,14 @@
1
+ export {
2
+ decodeMorse,
3
+ invertAndReverseMorse,
4
+ invertMorse,
5
+ lookupMorseEncoding,
6
+ morseEncodingToString,
7
+ MORSE_CHARACTER_DIVIDER,
8
+ MORSE_DASH,
9
+ MORSE_DOT,
10
+ MORSE_WORD_DIVIDER,
11
+ parseMorseString,
12
+ reverseMorse,
13
+ } from './morse.js';
14
+ export {MorseEncoding} from './encoding.js';
@@ -1,7 +1,7 @@
1
- import {EncodingCategory} from '../Common/EncodingCategory';
2
- import {EncodingEntry} from '../Common/EncodingEntry';
3
- import {EncodingLookupResult} from '../Common/EncodingLookupResult';
4
- import {MorseEncoding} from './MorseEncoding';
1
+ import {EncodingCategory} from '../common/encoding-category.js';
2
+ import {EncodingEntry} from '../common/encoding-entry.js';
3
+ import {EncodingLookupResult} from '../common/encoding-lookup-result.js';
4
+ import {MorseEncoding} from './encoding.js';
5
5
 
6
6
  export const MORSE_DOT = '.';
7
7
  export const MORSE_DASH = '-';
@@ -0,0 +1,2 @@
1
+ export {lookupNatoPhonetic, NATO_ALPHABET} from './nato.js';
2
+ export {NatoCharacter} from './character.js';
@@ -1,4 +1,4 @@
1
- import {NatoCharacter} from './NatoCharacter';
1
+ import {NatoCharacter} from './character.js';
2
2
 
3
3
  export const NATO_ALPHABET: readonly NatoCharacter[] = [
4
4
  new NatoCharacter('A', 'Alfa'),
@@ -0,0 +1 @@
1
+ export {getNavalFlag, NAVAL_FLAGS} from './naval-flags.js';
@@ -1,5 +1,5 @@
1
- import {CharacterImage} from '../Common/CharacterImage';
2
- import {InlineSvg} from '../Common/InlineSvg';
1
+ import {CharacterImage} from '../common/character-image.js';
2
+ import {InlineSvg} from '../common/inline-svg.js';
3
3
 
4
4
  export const NAVAL_FLAGS: readonly CharacterImage[] = [
5
5
  new CharacterImage(