Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
104
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.   private coins: number[] = [50, 20, 10, 5, 2, 1];
  5.  
  6.   async validate(input: string, result: string): Promise<boolean> {
  7.     const lines = input.split(/\n/);
  8.     const resultValue = Number(result);
  9.     let correctResult = 0;
  10.  
  11.     if (resultValue === NaN) {
  12.       console.log('result is not a number');
  13.       return false;
  14.     }
  15.  
  16.     for (let i = 0; i < lines.length; i++) {
  17.       const inputLine = lines[i];
  18.  
  19.       const lineValue = this.getNumberOfCoindsNeeded(Number(inputLine));
  20.       correctResult += lineValue;
  21.     }
  22.  
  23.     return correctResult === resultValue;
  24.   }
  25.  
  26.   private getNumberOfCoindsNeeded(change: number): number {
  27.     if (change === 0) {
  28.       return 0;
  29.     }
  30.    
  31.     let rest = change;
  32.     let coins = 0;
  33.  
  34.     for (let i = 0; i < this.coins.length; i++) {
  35.       const coinsToAdd = Math.floor(rest / this.coins[i]);
  36.       rest = rest - (coinsToAdd * this.coins[i]);
  37.       coins += coinsToAdd;
  38.  
  39.       if (rest === 0) {
  40.         return coins;
  41.       }
  42.     }
  43.  
  44.     return coins;
  45.   }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement