123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // Copyright 2017-2019 @polkadot/app-accounts authors & contributors
- // This software may be modified and distributed under the terms
- // of the Apache-2.0 license. See the LICENSE file for details.
- import { GeneratorCalculation, GeneratorOptions } from './types';
- const MAX_OFFSET = 5;
- function calculateAtOne (atOffset: number, test: string[], address: string): GeneratorCalculation {
- return {
- count: test.reduce((count, c, index): number => {
- if (index === count) {
- count += (c === '?' || c === address.charAt(index + atOffset)) ? 1 : 0;
- }
- return count;
- }, 0),
- offset: atOffset
- };
- }
- function calculateAt (atOffset: number, test: string[][], address: string): GeneratorCalculation {
- let bestCount = 0;
- let bestOffset = 1;
- for (let i = 0; i < test.length; i++) {
- const { count, offset } = calculateAtOne(atOffset, test[i], address);
- if (count > bestCount) {
- bestCount = count;
- bestOffset = offset;
- }
- }
- return {
- count: bestCount,
- offset: bestOffset
- };
- }
- export default function calculate (test: string[][], _address: string, { atOffset = -1, withCase = false }: GeneratorOptions): GeneratorCalculation {
- const address = withCase
- ? _address
- : _address.toLowerCase();
- if (atOffset > 0) {
- return calculateAt(atOffset, test, address);
- }
- let bestCount = 0;
- let bestOffset = 1;
- for (let index = 0; index < MAX_OFFSET; index++) {
- const { count, offset } = calculateAt(index, test, address);
- if (count > bestCount) {
- bestCount = count;
- bestOffset = offset;
- }
- }
- return {
- count: bestCount,
- offset: bestOffset
- };
- }
|