Skip to content

dstructs/anagram-hash

Repository files navigation

Anagram Hash

NPM version Build Status Coverage Status Dependencies

Anagram hash table.

Installation

$ npm install compute-anagram-hash

For use in the browser, use browserify.

Usage

var createHash = require( 'compute-anagram-hash' );

createHash( [arr] )

Creates an anagram hash table.

var hash = createHash();

To initialize the hash table, provide a string array.

var arr = [
	'beep',
	'boop',
	'bop',
	'bap',
	'foo',
	'bar',
	'cat',
	'bat',
	'moot',
	'woot',
	'moto',
	'tab',
	'pad',
	'Shakespeare is awesome!'
];

var hash = createHash( arr );

The hash table has the following methods...

hash.push( str[, str,...,str] )

Add strings to the anagram hash table.

hash.push( 'dog', 'rad', 'super' );

hash.get( [str[, key]] )

Returns a list of anagrams. If provided an input string, the method returns a list of corresponding anagrams from the hash table; otherwise, the method returns all anagram lists. If no anagrams exist, the method returns null.

// Get all anagrams:
var lists = hash.get();
// returns [['bat','tab'],['moot','moto']]

// Get anagrams corresponding to a particular string:
var list = hash.get( 'moot' );
// returns ['moto']

list = hash.get( 'beep' );
// returns null

If the input string is a hash key, set the key flag to true. When provided a hash key, the method returns all anagrams associated with a particular key (possibly including the key itself).

var list = hash.get( 'abt', true );
// returns ['bat','tab']

list = hash.get( 'beep', true );
// returns ['beep']

Note: when returning all anagram lists, the list order is not guaranteed.

hash.getKey( str )

Hashing function. Converts an input string to an alphagram.

var key = hash.getKey( 'tab' );
// returns 'abt'

var list = hash.get( key, true );
// returns ['bat','tab']

Note: the returned key only contains lowercase alphanumeric characters.

hash.keys( [opts] )

Returns a list of hash keys.

var keys = hash.keys();
// returns ['abp','abr','abt','act',...]

The method accepts the following options:

  • min: minimum number of anagrams.
  • max: maximum number of anagrams.

To return keys having at least a min number of anagrams, set the min option.

var keys = hash.keys({ 'min': 2 });
// returns ['abt','moot']

To return keys having at most a max number of anagrams, set the max option.

var keys = hash.keys({ 'max': 1 });
// returns ['abp','abr','act','adp',...]

hash.merge( hash1[, hash2,...,hashN] )

Merges anagram hash tables into the current anagram hash instance.

var mhash1, mhash2;

mhash1 = createHash( ['yes','no'] );
mhash2 = createHash( ['beep','bepe'] );

hash.merge( mhash1, mhash2 );

var list = hash.get( 'beep', true );
// returns ['beep','bepe']

hash.copy( [keys] )

Copies an anagram hash table to a new hash table instance.

var copy = hash.copy();

var list = copy.get( 'abt', true );
// returns ['bat','tab']

To only copy specific keys to a new hash table, provide a keys array.

var copy = hash.copy( ['beep'] );

var keys = copy.keys();
// returns ['beep']

Examples

var createHash = require( 'compute-anagram-hash' );

// Load a string array containing tokenized words:
var words = require( './words.json' );

// Create a new hash:
var hash = createHash( words );

// Get all anagram lists:
var lists = hash.get();

// Get a single anagram list:
var list = hash.get( 'rome' );

To run the example code from the top-level application directory,

$ node ./examples/index.js

Tests

Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:

$ make test

All new feature development should have corresponding unit tests to validate correct functionality.

Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

$ make test-cov

Istanbul creates a ./reports/coverage directory. To access an HTML version of the report,

$ make view-cov

License

MIT license.

Copyright

Copyright © 2015. Athan Reines.

Releases

No releases published

Packages

No packages published