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

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/README.md CHANGED
@@ -15,7 +15,7 @@ $ npm install --save puzzle-lib
15
15
  import { decodeMorse, caesarRotations, vigenereEncrypt } from 'puzzle-lib';
16
16
 
17
17
  // Decode morse code
18
- decodeMorse('.----/..---/...--'); // '123'
18
+ decodeMorse('.---- ..--- ...--'); // '123'
19
19
 
20
20
  // Get all Caesar cipher rotations
21
21
  caesarRotations('hello');
@@ -82,8 +82,25 @@ function convertCharacter(input, forcedCharacterEncoding) {
82
82
  }
83
83
  return '';
84
84
  }
85
+ // Auto-chunk a continuous binary string into 8-bit, 7-bit, or 5-bit groups.
86
+ function chunkBinary(token) {
87
+ if (!appearsBinary(token) || token.length <= 8) {
88
+ return [token];
89
+ }
90
+ const chunkSize = token.length % 8 === 0
91
+ ? 8
92
+ : token.length % 7 === 0
93
+ ? 7
94
+ : token.length % 5 === 0
95
+ ? 5
96
+ : 8;
97
+ return token.match(new RegExp(`.{1,${chunkSize}}`, 'g'));
98
+ }
85
99
  function splitString(input) {
86
- return input.split(' ').filter(item => item !== '');
100
+ return input
101
+ .split(' ')
102
+ .filter(item => item !== '')
103
+ .flatMap(chunkBinary);
87
104
  }
88
105
  /**
89
106
  * Determines the most common encoding across all tokens in a string.
@@ -1 +1 @@
1
- {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../../src/Conversion/conversion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../../src/Conversion/conversion.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import { EncodingLookupResult } from '../Common/EncodingLookupResult';
3
3
  import { MorseEncoding } from './MorseEncoding';
4
4
  export declare const MORSE_DOT = ".";
5
5
  export declare const MORSE_DASH = "-";
6
- export declare const MORSE_CHARACTER_DIVIDER = "/";
7
- export declare const MORSE_WORD_DIVIDER = " ";
6
+ export declare const MORSE_CHARACTER_DIVIDER = " ";
7
+ export declare const MORSE_WORD_DIVIDER = "/";
8
8
  /**
9
9
  * Converts a MorseEncoding value to its dot/dash string representation.
10
10
  */
@@ -14,8 +14,8 @@ const EncodingLookupResult_1 = require("../Common/EncodingLookupResult");
14
14
  const MorseEncoding_1 = require("./MorseEncoding");
15
15
  exports.MORSE_DOT = '.';
16
16
  exports.MORSE_DASH = '-';
17
- exports.MORSE_CHARACTER_DIVIDER = '/';
18
- exports.MORSE_WORD_DIVIDER = ' ';
17
+ exports.MORSE_CHARACTER_DIVIDER = ' ';
18
+ exports.MORSE_WORD_DIVIDER = '/';
19
19
  // Reserved character used internally for dot/dash swap
20
20
  const RESERVED_DIVIDER = 'A';
21
21
  const MORSE_BITMASK = MorseEncoding_1.MorseEncoding.Dot | MorseEncoding_1.MorseEncoding.Dash;
@@ -1,16 +1,10 @@
1
1
  import { Result } from './Result';
2
2
  import { WordSearchDirection } from './WordSearchDirection';
3
- export declare enum WordSearchSpaceTreatment {
4
- None = 0,
5
- RemoveWithinPuzzle = 1,
6
- RemoveAll = 2
7
- }
8
3
  export interface WordSearchOptions {
9
4
  grid: string[][];
10
5
  words: string[];
11
6
  directions?: WordSearchDirection;
12
7
  canBend?: boolean;
13
- spaceTreatment?: WordSearchSpaceTreatment;
14
8
  }
15
9
  export declare function parseWordSearchGrid(input: string): string[][];
16
10
  export declare function findWords(options: WordSearchOptions): Result[];
@@ -1,28 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WordSearchSpaceTreatment = void 0;
4
3
  exports.parseWordSearchGrid = parseWordSearchGrid;
5
4
  exports.findWords = findWords;
6
5
  const trie = require("trie-prefix-tree");
7
6
  const Result_1 = require("./Result");
8
7
  const WordSearchDirection_1 = require("./WordSearchDirection");
9
- var WordSearchSpaceTreatment;
10
- (function (WordSearchSpaceTreatment) {
11
- WordSearchSpaceTreatment[WordSearchSpaceTreatment["None"] = 0] = "None";
12
- WordSearchSpaceTreatment[WordSearchSpaceTreatment["RemoveWithinPuzzle"] = 1] = "RemoveWithinPuzzle";
13
- WordSearchSpaceTreatment[WordSearchSpaceTreatment["RemoveAll"] = 2] = "RemoveAll";
14
- })(WordSearchSpaceTreatment || (exports.WordSearchSpaceTreatment = WordSearchSpaceTreatment = {}));
8
+ // Remove columns that are entirely spaces across all rows.
9
+ function collapseSpaceColumns(matrix) {
10
+ if (matrix.length === 0) {
11
+ return matrix;
12
+ }
13
+ const maxCols = Math.max(...matrix.map(row => row.length));
14
+ const keepColumn = [];
15
+ for (let col = 0; col < maxCols; col++) {
16
+ keepColumn.push(matrix.some(row => col < row.length && row[col] !== ' '));
17
+ }
18
+ return matrix.map(row => row.filter((_, col) => keepColumn[col]));
19
+ }
15
20
  function parseWordSearchGrid(input) {
16
- const lines = input.split(/\r?\n/).filter(line => line.length > 0);
21
+ const lines = input.split(/\r?\n/).filter(line => line.trimEnd().length > 0);
17
22
  const grid = [];
18
23
  for (const line of lines) {
19
24
  grid.push(line.split(''));
20
25
  }
21
- return grid;
26
+ return collapseSpaceColumns(grid);
22
27
  }
23
28
  function findWords(options) {
24
- const { words, directions: directionOption = WordSearchDirection_1.WordSearchDirection.CardinalAndDiagonal, canBend = false, spaceTreatment = WordSearchSpaceTreatment.None, } = options;
25
- let matrix = options.grid;
29
+ const { words, directions: directionOption = WordSearchDirection_1.WordSearchDirection.CardinalAndDiagonal, canBend = false, } = options;
30
+ const matrix = options.grid;
26
31
  // Build trie from words
27
32
  const targets = trie([]);
28
33
  for (const full of words) {
@@ -39,8 +44,6 @@ function findWords(options) {
39
44
  }
40
45
  // Resolve directions
41
46
  const directionVectors = resolveDirections(directionOption);
42
- // Handle space treatment
43
- matrix = applySpaceTreatment(matrix, spaceTreatment);
44
47
  // Search
45
48
  const results = [];
46
49
  const numRows = matrix.length;
@@ -76,32 +79,6 @@ function resolveDirections(direction) {
76
79
  }
77
80
  return directions;
78
81
  }
79
- function applySpaceTreatment(matrix, treatment) {
80
- if (matrix.length === 0 || treatment === WordSearchSpaceTreatment.None) {
81
- return matrix;
82
- }
83
- const nextMatrix = [];
84
- for (let yIdx = 0; yIdx < matrix.length; yIdx++) {
85
- const line = [];
86
- let inPuzzle = false;
87
- for (let xIdx = 0; xIdx < matrix[yIdx].length; xIdx++) {
88
- const letter = matrix[yIdx][xIdx];
89
- if (letter !== ' ') {
90
- inPuzzle = true;
91
- }
92
- if (treatment === WordSearchSpaceTreatment.RemoveAll && letter !== ' ') {
93
- line.push(matrix[yIdx][xIdx]);
94
- }
95
- else if (letter !== ' ' && inPuzzle) {
96
- line.push(matrix[yIdx][xIdx]);
97
- }
98
- }
99
- if (line.length > 0) {
100
- nextMatrix.push(line);
101
- }
102
- }
103
- return nextMatrix;
104
- }
105
82
  function search(start, matrix, targets, directions, canBend) {
106
83
  const results = [];
107
84
  if (canBend) {
@@ -1 +1 @@
1
- {"version":3,"file":"wordSearch.js","sourceRoot":"","sources":["../../../src/WordSearch/wordSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wordSearch.js","sourceRoot":"","sources":["../../../src/WordSearch/wordSearch.ts"],"names":[],"mappings":"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"}
@@ -25,5 +25,5 @@ export { SemaphoreEncoding } from './Semaphore/SemaphoreEncoding';
25
25
  export { Point as WordSearchPoint } from './WordSearch/Point';
26
26
  export { Result as WordSearchResult } from './WordSearch/Result';
27
27
  export { WordSearchDirection } from './WordSearch/WordSearchDirection';
28
- export { findWords, parseWordSearchGrid, WordSearchSpaceTreatment, } from './WordSearch/wordSearch';
28
+ export { findWords, parseWordSearchGrid } from './WordSearch/wordSearch';
29
29
  export type { WordSearchOptions } from './WordSearch/wordSearch';
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getResistorDisplayValue = exports.NAVAL_FLAGS = exports.getNavalFlag = exports.NATO_ALPHABET = exports.lookupNatoPhonetic = exports.NatoCharacter = exports.MorseEncoding = exports.reverseMorse = exports.parseMorseString = exports.MORSE_WORD_DIVIDER = exports.MORSE_DOT = exports.MORSE_DASH = exports.MORSE_CHARACTER_DIVIDER = exports.morseEncodingToString = exports.lookupMorseEncoding = exports.invertMorse = exports.invertAndReverseMorse = exports.decodeMorse = exports.sigFigRound = exports.sigFigFloor = exports.sigFigCeil = exports.CharacterTableEntry = exports.CharacterEncoding = exports.toOrdinal = exports.toAscii = exports.getOrdinalTable = exports.getAsciiTable = exports.determineStringEncoding = exports.determineCharacterEncoding = exports.convertString = exports.convertCharacter = exports.InlineSvg = exports.EncodingLookupResult = exports.EncodingEntry = exports.EncodingCategory = exports.CharacterImage = exports.vigenereEncrypt = exports.vigenereDecrypt = exports.rotateLetter = exports.isAlpha = exports.caesarRotations = exports.caesarRotate = exports.autokeyEncrypt = exports.autokeyDecrypt = exports.BrailleEncoding = exports.BrailleDot = exports.toggleBrailleDot = exports.lookupBrailleEncoding = exports.getBrailleDot = exports.decodeBrailleStream = void 0;
4
- exports.WordSearchSpaceTreatment = exports.parseWordSearchGrid = exports.findWords = exports.WordSearchDirection = exports.WordSearchResult = exports.SemaphoreEncoding = exports.SemaphoreDirection = exports.semaphoreDirectionToDegrees = exports.removeSemaphoreDirection = exports.lookupSemaphoreEncoding = exports.hasSemaphoreDirection = exports.getEncodingDegrees = exports.directionsToEncoding = exports.degreesToSemaphoreDirection = exports.decodeSemaphoreStream = exports.addSemaphoreDirection = exports.RESISTOR_COLOR_TABLE = exports.INVALID_RESISTOR = exports.hasResistorValue = exports.hasResistorTolerance = exports.getResistorValue = void 0;
4
+ exports.parseWordSearchGrid = exports.findWords = exports.WordSearchDirection = exports.WordSearchResult = exports.SemaphoreEncoding = exports.SemaphoreDirection = exports.semaphoreDirectionToDegrees = exports.removeSemaphoreDirection = exports.lookupSemaphoreEncoding = exports.hasSemaphoreDirection = exports.getEncodingDegrees = exports.directionsToEncoding = exports.degreesToSemaphoreDirection = exports.decodeSemaphoreStream = exports.addSemaphoreDirection = exports.RESISTOR_COLOR_TABLE = exports.INVALID_RESISTOR = exports.hasResistorValue = exports.hasResistorTolerance = exports.getResistorValue = void 0;
5
5
  var braille_1 = require("./Braille/braille");
6
6
  Object.defineProperty(exports, "decodeBrailleStream", { enumerable: true, get: function () { return braille_1.decodeBrailleStream; } });
7
7
  Object.defineProperty(exports, "getBrailleDot", { enumerable: true, get: function () { return braille_1.getBrailleDot; } });
@@ -98,5 +98,4 @@ Object.defineProperty(exports, "WordSearchDirection", { enumerable: true, get: f
98
98
  var wordSearch_1 = require("./WordSearch/wordSearch");
99
99
  Object.defineProperty(exports, "findWords", { enumerable: true, get: function () { return wordSearch_1.findWords; } });
100
100
  Object.defineProperty(exports, "parseWordSearchGrid", { enumerable: true, get: function () { return wordSearch_1.parseWordSearchGrid; } });
101
- Object.defineProperty(exports, "WordSearchSpaceTreatment", { enumerable: true, get: function () { return wordSearch_1.WordSearchSpaceTreatment; } });
102
101
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,6CAK2B;AAJzB,8GAAA,mBAAmB,OAAA;AACnB,wGAAA,aAAa,OAAA;AACb,gHAAA,qBAAqB,OAAA;AACrB,2GAAA,gBAAgB,OAAA;AAElB,mDAAgD;AAAxC,wGAAA,UAAU,OAAA;AAClB,6DAA0D;AAAlD,kHAAA,eAAe,OAAA;AACvB,0CASyB;AARvB,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AACd,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AACf,iGAAA,OAAO,OAAA;AACP,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AAEjB,0DAAuD;AAA/C,gHAAA,cAAc,OAAA;AACtB,8DAA2D;AAAnD,oHAAA,gBAAgB,OAAA;AACxB,wDAAqD;AAA7C,8GAAA,aAAa,OAAA;AACrB,sEAAmE;AAA3D,4HAAA,oBAAoB,OAAA;AAC5B,gDAA6C;AAArC,sGAAA,SAAS,OAAA;AACjB,sDAKiC;AAJ/B,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,wHAAA,0BAA0B,OAAA;AAC1B,qHAAA,uBAAuB,OAAA;AAEzB,wEAK0C;AAJxC,oHAAA,aAAa,OAAA;AACb,sHAAA,eAAe,OAAA;AACf,8GAAA,OAAO,OAAA;AACP,gHAAA,SAAS,OAAA;AAEX,oEAAiE;AAAzD,sHAAA,iBAAiB,OAAA;AACzB,wEAAqE;AAA7D,0HAAA,mBAAmB,OAAA;AAC3B,sEAIyC;AAHvC,gHAAA,UAAU,OAAA;AACV,iHAAA,WAAW,OAAA;AACX,iHAAA,WAAW,OAAA;AAEb,uCAYuB;AAXrB,oGAAA,WAAW,OAAA;AACX,8GAAA,qBAAqB,OAAA;AACrB,oGAAA,WAAW,OAAA;AACX,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,gHAAA,uBAAuB,OAAA;AACvB,mGAAA,UAAU,OAAA;AACV,kGAAA,SAAS,OAAA;AACT,2GAAA,kBAAkB,OAAA;AAClB,yGAAA,gBAAgB,OAAA;AAChB,qGAAA,YAAY,OAAA;AAEd,uDAAoD;AAA5C,8GAAA,aAAa,OAAA;AACrB,sDAAmD;AAA3C,8GAAA,aAAa,OAAA;AACrB,oCAA8D;AAAtD,0GAAA,kBAAkB,OAAA;AAAE,qGAAA,aAAa,OAAA;AACzC,sDAAkE;AAA1D,0GAAA,YAAY,OAAA;AAAE,yGAAA,WAAW,OAAA;AACjC,gDAO6B;AAN3B,mHAAA,uBAAuB,OAAA;AACvB,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AACpB,4GAAA,gBAAgB,OAAA;AAChB,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AAGtB,mDAU+B;AAT7B,kHAAA,qBAAqB,OAAA;AACrB,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,qHAAA,wBAAwB,OAAA;AACxB,wHAAA,2BAA2B,OAAA;AAE7B,qEAAkE;AAA1D,wHAAA,kBAAkB,OAAA;AAC1B,mEAAgE;AAAxD,sHAAA,iBAAiB,OAAA;AAEzB,8CAA+D;AAAvD,0GAAA,MAAM,OAAoB;AAClC,wEAAqE;AAA7D,0HAAA,mBAAmB,OAAA;AAC3B,sDAIiC;AAH/B,uGAAA,SAAS,OAAA;AACT,iHAAA,mBAAmB,OAAA;AACnB,sHAAA,wBAAwB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,6CAK2B;AAJzB,8GAAA,mBAAmB,OAAA;AACnB,wGAAA,aAAa,OAAA;AACb,gHAAA,qBAAqB,OAAA;AACrB,2GAAA,gBAAgB,OAAA;AAElB,mDAAgD;AAAxC,wGAAA,UAAU,OAAA;AAClB,6DAA0D;AAAlD,kHAAA,eAAe,OAAA;AACvB,0CASyB;AARvB,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AACd,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AACf,iGAAA,OAAO,OAAA;AACP,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AAEjB,0DAAuD;AAA/C,gHAAA,cAAc,OAAA;AACtB,8DAA2D;AAAnD,oHAAA,gBAAgB,OAAA;AACxB,wDAAqD;AAA7C,8GAAA,aAAa,OAAA;AACrB,sEAAmE;AAA3D,4HAAA,oBAAoB,OAAA;AAC5B,gDAA6C;AAArC,sGAAA,SAAS,OAAA;AACjB,sDAKiC;AAJ/B,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,wHAAA,0BAA0B,OAAA;AAC1B,qHAAA,uBAAuB,OAAA;AAEzB,wEAK0C;AAJxC,oHAAA,aAAa,OAAA;AACb,sHAAA,eAAe,OAAA;AACf,8GAAA,OAAO,OAAA;AACP,gHAAA,SAAS,OAAA;AAEX,oEAAiE;AAAzD,sHAAA,iBAAiB,OAAA;AACzB,wEAAqE;AAA7D,0HAAA,mBAAmB,OAAA;AAC3B,sEAIyC;AAHvC,gHAAA,UAAU,OAAA;AACV,iHAAA,WAAW,OAAA;AACX,iHAAA,WAAW,OAAA;AAEb,uCAYuB;AAXrB,oGAAA,WAAW,OAAA;AACX,8GAAA,qBAAqB,OAAA;AACrB,oGAAA,WAAW,OAAA;AACX,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,gHAAA,uBAAuB,OAAA;AACvB,mGAAA,UAAU,OAAA;AACV,kGAAA,SAAS,OAAA;AACT,2GAAA,kBAAkB,OAAA;AAClB,yGAAA,gBAAgB,OAAA;AAChB,qGAAA,YAAY,OAAA;AAEd,uDAAoD;AAA5C,8GAAA,aAAa,OAAA;AACrB,sDAAmD;AAA3C,8GAAA,aAAa,OAAA;AACrB,oCAA8D;AAAtD,0GAAA,kBAAkB,OAAA;AAAE,qGAAA,aAAa,OAAA;AACzC,sDAAkE;AAA1D,0GAAA,YAAY,OAAA;AAAE,yGAAA,WAAW,OAAA;AACjC,gDAO6B;AAN3B,mHAAA,uBAAuB,OAAA;AACvB,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AACpB,4GAAA,gBAAgB,OAAA;AAChB,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AAGtB,mDAU+B;AAT7B,kHAAA,qBAAqB,OAAA;AACrB,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,qHAAA,wBAAwB,OAAA;AACxB,wHAAA,2BAA2B,OAAA;AAE7B,qEAAkE;AAA1D,wHAAA,kBAAkB,OAAA;AAC1B,mEAAgE;AAAxD,sHAAA,iBAAiB,OAAA;AAEzB,8CAA+D;AAAvD,0GAAA,MAAM,OAAoB;AAClC,wEAAqE;AAA7D,0HAAA,mBAAmB,OAAA;AAC3B,sDAAuE;AAA/D,uGAAA,SAAS,OAAA;AAAE,iHAAA,mBAAmB,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "puzzle-lib",
3
- "version": "2.0.0-alpha.2",
3
+ "version": "2.0.0-beta.1",
4
4
  "description": "Library of puzzle-solving algorithms",
5
5
  "main": "build/src/index.js",
6
6
  "types": "build/src/index.d.ts",
@@ -98,8 +98,27 @@ export function convertCharacter(
98
98
  return '';
99
99
  }
100
100
 
101
+ // Auto-chunk a continuous binary string into 8-bit, 7-bit, or 5-bit groups.
102
+ function chunkBinary(token: string): string[] {
103
+ if (!appearsBinary(token) || token.length <= 8) {
104
+ return [token];
105
+ }
106
+ const chunkSize =
107
+ token.length % 8 === 0
108
+ ? 8
109
+ : token.length % 7 === 0
110
+ ? 7
111
+ : token.length % 5 === 0
112
+ ? 5
113
+ : 8;
114
+ return token.match(new RegExp(`.{1,${chunkSize}}`, 'g'))!;
115
+ }
116
+
101
117
  function splitString(input: string): string[] {
102
- return input.split(' ').filter(item => item !== '');
118
+ return input
119
+ .split(' ')
120
+ .filter(item => item !== '')
121
+ .flatMap(chunkBinary);
103
122
  }
104
123
 
105
124
  /**
@@ -5,8 +5,8 @@ import {MorseEncoding} from './MorseEncoding';
5
5
 
6
6
  export const MORSE_DOT = '.';
7
7
  export const MORSE_DASH = '-';
8
- export const MORSE_CHARACTER_DIVIDER = '/';
9
- export const MORSE_WORD_DIVIDER = ' ';
8
+ export const MORSE_CHARACTER_DIVIDER = ' ';
9
+ export const MORSE_WORD_DIVIDER = '/';
10
10
 
11
11
  // Reserved character used internally for dot/dash swap
12
12
  const RESERVED_DIVIDER = 'A';
@@ -4,27 +4,35 @@ import {Point} from './Point';
4
4
  import {Result} from './Result';
5
5
  import {WordSearchDirection} from './WordSearchDirection';
6
6
 
7
- export enum WordSearchSpaceTreatment {
8
- None = 0,
9
- RemoveWithinPuzzle = 1,
10
- RemoveAll = 2,
11
- }
12
-
13
7
  export interface WordSearchOptions {
14
8
  grid: string[][];
15
9
  words: string[];
16
10
  directions?: WordSearchDirection;
17
11
  canBend?: boolean;
18
- spaceTreatment?: WordSearchSpaceTreatment;
12
+ }
13
+
14
+ // Remove columns that are entirely spaces across all rows.
15
+ function collapseSpaceColumns(matrix: string[][]): string[][] {
16
+ if (matrix.length === 0) {
17
+ return matrix;
18
+ }
19
+
20
+ const maxCols = Math.max(...matrix.map(row => row.length));
21
+ const keepColumn: boolean[] = [];
22
+ for (let col = 0; col < maxCols; col++) {
23
+ keepColumn.push(matrix.some(row => col < row.length && row[col] !== ' '));
24
+ }
25
+
26
+ return matrix.map(row => row.filter((_, col) => keepColumn[col]));
19
27
  }
20
28
 
21
29
  export function parseWordSearchGrid(input: string): string[][] {
22
- const lines = input.split(/\r?\n/).filter(line => line.length > 0);
30
+ const lines = input.split(/\r?\n/).filter(line => line.trimEnd().length > 0);
23
31
  const grid: string[][] = [];
24
32
  for (const line of lines) {
25
33
  grid.push(line.split(''));
26
34
  }
27
- return grid;
35
+ return collapseSpaceColumns(grid);
28
36
  }
29
37
 
30
38
  export function findWords(options: WordSearchOptions): Result[] {
@@ -32,9 +40,8 @@ export function findWords(options: WordSearchOptions): Result[] {
32
40
  words,
33
41
  directions: directionOption = WordSearchDirection.CardinalAndDiagonal,
34
42
  canBend = false,
35
- spaceTreatment = WordSearchSpaceTreatment.None,
36
43
  } = options;
37
- let matrix = options.grid;
44
+ const matrix = options.grid;
38
45
 
39
46
  // Build trie from words
40
47
  const targets = trie([]);
@@ -53,9 +60,6 @@ export function findWords(options: WordSearchOptions): Result[] {
53
60
  // Resolve directions
54
61
  const directionVectors = resolveDirections(directionOption);
55
62
 
56
- // Handle space treatment
57
- matrix = applySpaceTreatment(matrix, spaceTreatment);
58
-
59
63
  // Search
60
64
  const results: Result[] = [];
61
65
  const numRows = matrix.length;
@@ -103,36 +107,6 @@ function resolveDirections(direction: WordSearchDirection): number[][] {
103
107
  return directions;
104
108
  }
105
109
 
106
- function applySpaceTreatment(
107
- matrix: string[][],
108
- treatment: WordSearchSpaceTreatment,
109
- ): string[][] {
110
- if (matrix.length === 0 || treatment === WordSearchSpaceTreatment.None) {
111
- return matrix;
112
- }
113
-
114
- const nextMatrix: string[][] = [];
115
- for (let yIdx = 0; yIdx < matrix.length; yIdx++) {
116
- const line: string[] = [];
117
- let inPuzzle = false;
118
- for (let xIdx = 0; xIdx < matrix[yIdx].length; xIdx++) {
119
- const letter = matrix[yIdx][xIdx];
120
- if (letter !== ' ') {
121
- inPuzzle = true;
122
- }
123
- if (treatment === WordSearchSpaceTreatment.RemoveAll && letter !== ' ') {
124
- line.push(matrix[yIdx][xIdx]);
125
- } else if (letter !== ' ' && inPuzzle) {
126
- line.push(matrix[yIdx][xIdx]);
127
- }
128
- }
129
- if (line.length > 0) {
130
- nextMatrix.push(line);
131
- }
132
- }
133
- return nextMatrix;
134
- }
135
-
136
110
  function search(
137
111
  start: Point,
138
112
  matrix: string[][],
package/src/index.ts CHANGED
@@ -82,9 +82,5 @@ export {SemaphoreEncoding} from './Semaphore/SemaphoreEncoding';
82
82
  export {Point as WordSearchPoint} from './WordSearch/Point';
83
83
  export {Result as WordSearchResult} from './WordSearch/Result';
84
84
  export {WordSearchDirection} from './WordSearch/WordSearchDirection';
85
- export {
86
- findWords,
87
- parseWordSearchGrid,
88
- WordSearchSpaceTreatment,
89
- } from './WordSearch/wordSearch';
85
+ export {findWords, parseWordSearchGrid} from './WordSearch/wordSearch';
90
86
  export type {WordSearchOptions} from './WordSearch/wordSearch';