@knoword/encoder

Encodes and decodes solutions


License
Unlicense
Install
npm install @knoword/encoder@2.1.3

Documentation

@knoword/common

Build Status

Useful constants and utility functions that we share between Knoword projects

Installation

$ npm install @knoword/common

Usage

import {DIFFICULTIES, PARTS_OF_SPEECH} from '@knoword/common';

console.log(PARTS_OF_SPEECH); // ['noun', 'verb', 'adjective', 'adverb']

if (DIFFICULTIES.includes('easy')) {
  alert('It works!'); // It really does
}

Using variables

import {FONT_SIZE_LARGEST, GRAY_LIGHT} from '@knoword/common/variables';
import styled from 'styled-components';

const Heading = styled.h1`
  font-size: ${FONT_SIZE_LARGEST}px;
  color: ${GRAY_LIGHT};
`;

Encoding/decoding words

On the server:

const {encode} = require('@knoword/common/encoder');

encode('apple'); // U=YXbGBw

On the client:

import {decode} from '@knoword/common/encoder';

decode('U=YXbGBw'); // apple

Evaluating a guess

import evaluateGuess from '@knoword/common/evaluateGuess';

const guess = 'apPle';
const solutions = ['U=YXbGBw'];
evaluateGuess(guess, solutions);
/*
{
  match: 'apple',
  correctCount: 5,
  correctPercent: 1,
  incorrect: false,
  preparedSolution: 'apPle'
}
*/

Answer utility functions

During a game, we will keep track of answers given by the user. We can determine a number of things based on these, including streaks, accuracy, points, and messaging. Each of the following functions take an array of booleans, representing the correct status of each answer and return something useful.

import {
  getCurrentStreak,
  getLongestStreak,
  getPoints,
  getAccuracy,
  getMessage
} from '@knoword/common/answerUtils';

// Suppose our game state looked something like this:
const state = {
  answers: [
    {
      id: 1,
      correct: true
    },
    {
      id: 2,
      correct: true
    },
    {
      id: 3,
      correct: false
    },
    {
      id: 4,
      correct: true
    }
  ]
};

// Complex answer state must be coaxed into an array of booleans
const answers = state.answers.map(answer => answer.correct);

const currentStreak = getCurrentStreak(answers); // 1
const longestStreak = getLongestStreak(answers); // 2
const points = getPoints(answers); // 25
const accuracy = getAccuracy(answers); // 0.75
const message = getMessage(answers); // 'Great job'