Advertisement
Guest User

FleaRacing

a guest
Apr 5th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(input) {
  2.     var i,
  3.         jumpsAllowed,
  4.         trackLength,
  5.         fleaArr,
  6.         fleaName,
  7.         fleaLetter,
  8.         fleaJumpDistance,
  9.         fleaPosition,
  10.         fleaData = {},
  11.         jumpsCount = 0,
  12.         foundWinner = false,
  13.         winner,
  14.         currentFlea,
  15.         audienceString = '';
  16.  
  17.  
  18.     //read input data
  19.     for (i = 0; i < input.length; i++) {
  20.         if (i === 0) {
  21.             jumpsAllowed = Number(input[i]);
  22.         } else if (i === 1) {
  23.             trackLength = Number(input[i]);
  24.         } else {
  25.             fleaArr = input[i].split(', ');
  26.             fleaName = fleaArr[0];
  27.             fleaLetter = fleaName.toUpperCase().charAt(0);
  28.             fleaJumpDistance = Number(fleaArr[1]);
  29.             fleaPosition = 0;
  30.  
  31.             fleaData[fleaName] = {
  32.                 letter : fleaLetter,
  33.                 jumpDistance : fleaJumpDistance,
  34.                 position : fleaPosition,
  35.                 previousPosition : 0
  36.             }
  37.         }
  38.     }
  39.  
  40.     //create audience strings
  41.     for (var j = 0; j < trackLength; j++) {
  42.         audienceString += '#';
  43.     }
  44.  
  45.     //calculate race
  46.     //first case - winner crosses or exactly on the finish line
  47.     while (jumpsCount < jumpsAllowed) {
  48.  
  49.         for (var key in fleaData) {
  50.             currentFlea = fleaData[key];
  51.             currentFlea.previousPosition = currentFlea.position;
  52.             currentFlea.position += currentFlea.jumpDistance;
  53.  
  54.             fleaData[key] = currentFlea;
  55.             //check if the position is exactly on the finish line or behind it
  56.             //to declare the winner
  57.             if (currentFlea.position >= trackLength - 1) {
  58.                 foundWinner = true;
  59.                 winner = key;
  60.                 break;
  61.             }
  62.         }
  63.         if (foundWinner == true) {
  64.             console.log(audienceString);
  65.             console.log(audienceString);
  66.  
  67.             for (var key in fleaData) {
  68.                 var pos = fleaData[key].position;
  69.  
  70.                 if (pos > trackLength - 1) {
  71.                     pos = fleaData[key].previousPosition;
  72.                 }
  73.                 var dotStr = '';
  74.                 for (var j = 0; j < pos; j++) {
  75.                     dotStr += '.';
  76.                 }
  77.                 dotStr += fleaData[key].letter;
  78.                 for (var j = pos + 1; j < trackLength; j++) {
  79.                     dotStr += '.';
  80.                 }
  81.                 console.log(dotStr);
  82.             }
  83.  
  84.             console.log(audienceString);
  85.             console.log(audienceString);
  86.             console.log('Winner: ' + winner);
  87.             break;
  88.         }
  89.         jumpsCount++;
  90.     }
  91.  
  92.     //all fleas are equal
  93.     if (!foundWinner) {
  94.         var equalPos = true;
  95.         var positions = [];
  96.         for (var key in fleaData) {
  97.             var pos = fleaData[key].position;
  98.             positions.push(pos);
  99.         }
  100.         for (var k in positions) {
  101.             if (positions[k] !== positions[0]) {
  102.                 equalPos = false;
  103.             }
  104.         }
  105.         if (equalPos) {
  106.             var keys = Object.keys(fleaData);
  107.             var lastKey = keys[keys.length - 1];
  108.             winner = lastKey;
  109.             foundWinner = true;
  110.         }
  111.         //print result
  112.         if (foundWinner == true) {
  113.             console.log(audienceString);
  114.             console.log(audienceString);
  115.  
  116.             for (var key in fleaData) {
  117.                 var pos = fleaData[key].position;
  118.  
  119.                 if (pos > trackLength - 1) {
  120.                     pos = fleaData[key].previousPosition;
  121.                 }
  122.                 var dotStr = '';
  123.                 for (var j = 0; j < pos; j++) {
  124.                     dotStr += '.';
  125.                 }
  126.                 dotStr += fleaData[key].letter;
  127.                 for (var j = pos + 1; j < trackLength; j++) {
  128.                     dotStr += '.';
  129.                 }
  130.                 console.log(dotStr);
  131.             }
  132.  
  133.             console.log(audienceString);
  134.             console.log(audienceString);
  135.             console.log('Winner: ' + winner);
  136.         }
  137.     }
  138.  
  139.     //second case - no flea crosses the finish line, but one is ahead of the others
  140.     if (!foundWinner) {
  141.  
  142.         var furthestFleaPos = 0;
  143.         for (var key in fleaData) {
  144.             var pos = fleaData[key].position;
  145.             if (pos > furthestFleaPos) {
  146.                 furthestFleaPos = pos;
  147.                 winner = key;
  148.                 foundWinner = true;
  149.             }
  150.         }
  151.         if (foundWinner == true) {
  152.             console.log(audienceString);
  153.             console.log(audienceString);
  154.  
  155.             for (var key in fleaData) {
  156.                 var pos = fleaData[key].position;
  157.  
  158.                 if (pos > trackLength - 1) {
  159.                     pos = fleaData[key].previousPosition;
  160.                 }
  161.                 var dotStr = '';
  162.                 for (var j = 0; j < pos; j++) {
  163.                     dotStr += '.';
  164.                 }
  165.                 dotStr += fleaData[key].letter;
  166.                 for (var j = pos + 1; j < trackLength; j++) {
  167.                     dotStr += '.';
  168.                 }
  169.                 console.log(dotStr);
  170.             }
  171.  
  172.             console.log(audienceString);
  173.             console.log(audienceString);
  174.             console.log('Winner: ' + winner);
  175.         }
  176.     }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement