Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { IResultValidator } from '../IResultValidator';
  2.  
  3. export default class Validator implements IResultValidator {
  4.     async validate(input: string, result: string): Promise<boolean> {
  5.        
  6.         const res = this.dance(input);
  7.  
  8.         return res === result;
  9.     }
  10.  
  11.     private dance(input: string) {
  12.         const moves = input.split(',');
  13.         let dancers = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'];
  14.  
  15.         for (let i = 0; i < moves.length; i++) {
  16.             const move = moves[i].substr(0, 1);
  17.  
  18.             if (move === 's') {
  19.                 const numOfSpins = Number(moves[i].substr(1));
  20.                 const movers = dancers.slice(dancers.length - numOfSpins);
  21.                 const stayers = dancers.slice(0, dancers.length - numOfSpins);
  22.                 dancers = [...movers, ...stayers];
  23.             } else if (move === 'x') {
  24.                 const exchangers = moves[i].substr(1).split('/');
  25.                 const a = Number(exchangers[0]);
  26.                 const b = Number(exchangers[1]);
  27.  
  28.                 const aCopy = dancers[a];
  29.                 dancers[a] = dancers[b];
  30.                 dancers[b] = aCopy;
  31.             } else if (move === 'p') {
  32.                 const partners = moves[i].substr(1).split('/');
  33.                 const a = partners[0];
  34.                 const b = partners[1];
  35.  
  36.                 const aIdx = dancers.findIndex((dancer) => dancer === a);
  37.                 const bIdx = dancers.findIndex((dancer) => dancer === b);
  38.  
  39.                 const aCopy = dancers[aIdx];
  40.                 dancers[aIdx] = dancers[bIdx];
  41.                 dancers[bIdx] = aCopy;
  42.             }
  43.         }
  44.  
  45.         return dancers.join('');
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement