Traverse a 2d array from the centre in a spiral
(+ other useful functions)
👀 Displaying the data
const array = generateArray(3);
printArrayTable(array)
Traversing 9 cells
┌─────────┬───┬───┬───┐
│ (index) │ 0 │ 1 │ 2 │
├─────────┼───┼───┼───┤
│ 0 │ 1 │ 2 │ 3 │
│ 1 │ 4 │ 5 │ 6 │
│ 2 │ 7 │ 8 │ 9 │
└─────────┴───┴───┴───┘
🎯 Finding the centre of an array
const centre = locateCentre(array)
centre { contents: 5, coordinates: [ 1, 1 ] }
🧭 Traversing the array
const results = spiral(array);
results {
contents: [
5, 6, 3, 2, 1,
4, 7, 8, 9
],
coordinates: [
[ 1, 1 ], [ 1, 2 ],
[ 0, 2 ], [ 0, 1 ],
[ 0, 0 ], [ 1, 0 ],
[ 2, 0 ], [ 2, 1 ],
[ 2, 2 ]
]
}
🔍 Find the next cell
const cell = nextCell(array, [0,2], 'l');
cell {
contents: [2],
coordinates: [ [ 0, 1 ] ]
}
💻 API
type
There are two types of response that can be returned from some functions.
- Contents of the cell
- Coordinates of the cell
If type
is not specified, both contents
and coordinates
will be returned.
You can import these functions into your project:
module.exports = {
spiral: (array, type) => traverseArray(array, type),
generateArray: (size) => generateArray(size),
printArrayTable: (array) => console.table(array),
locateCentre: (array, type) => locateCentre(array, type),
nextCell: (array, currentCell, direction, type) => nextCell(array, currentCell, direction, type)
};
ℹ️ Help
Node.js heap out of memory
When dealing with very large arrays (around 1000 x 1000 or higher) more memory can be allocated to your node process. See: https://stackoverflow.com/questions/38558989/node-js-heap-out-of-memory