input-reader
JavaScript library for reading whitespace-separated data, which is a common input data format for tasks in many algorithmic competitions.
Quick Start
Installation
npm install --save input-reader
Example usage
const reader = const data = ` 4 2 9 1 2 3`const pattern = ` a b c ...arr` // { a: 4, b: 2, c: 9, arr: [1, 2, 3] }
API
Module exports single function, which takes three parameters:
Parameters:
- data - string containing input data.
- pattern - string describing how data should be mapped to the returned object.
- options - object specifying additional behaviour. Optional.
Return value:
- Object containing input data placed in properties sepecified by pattern parameter.
Pattern syntax
Single-line mapping
const data = '1 2'const pattern = 'foo bar' // { foo: 1, bar: 2 }
Multi-line mapping
const data = ` 1 2 3 4 5`const pattern = ` foo bar a b c` // { foo: 1, bar: 2, a: 3, b: 4, c: 5 }
Rest operator Rest operator collects all the remaining elements of the line into an array. It must be used as the last symbol of the line.
const data = ` 1 2 3 4`const pattern = ` foo ...bar` // { foo: 1, bar: [2, 3, 4] }
Multi-line rest operator Multi-line rest operator collects all the remaining lines into an array. It can be only used in the last line of a pattern string.
const data = ` 9 8 7 6 5`const pattern = ` foo ...bar[a b]` // { foo: 9, bar: [{ a: 8, b: 7 }, { a: 6, b: 5 }] }
Empty multi-line rest operator If you don't specify the structure of each line, all the values will be collected directly into arrays.
const data = ` 9 8 7 6 5`const pattern = ` foo ...bar[]` // { foo: 9, bar: [[8, 7], [6, 5]] }
Nested rest operator
const data = ` 9 1 2 3 4 5 6 7 8`const pattern = ` foo ...bar[a ...b]` // { foo: 9, bar: [{ a: 1, b: [2, 3, 4] }, { a: 5, b: [6, 7, 8] }] }
Convert to numbers
const data = '1 hello'const pattern = 'foo bar' // { foo: 1, bar: 'hello' } // { foo: '1', bar: 'hello' }
Options
Property Name | Type | Default Value | Description |
---|---|---|---|
convertToNumbers | boolean | true | If true, all elements will be converted to Number type. If conversion results in NaN value, then the original type and value will be left. |