Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(input) {
- var i,
- jumpsAllowed,
- trackLength,
- fleaArr,
- fleaName,
- fleaLetter,
- fleaJumpDistance,
- fleaPosition,
- fleaData = {},
- jumpsCount = 0,
- foundWinner = false,
- winner,
- currentFlea,
- audienceString = '';
- //read input data
- for (i = 0; i < input.length; i++) {
- if (i === 0) {
- jumpsAllowed = Number(input[i]);
- } else if (i === 1) {
- trackLength = Number(input[i]);
- } else {
- fleaArr = input[i].split(', ');
- fleaName = fleaArr[0];
- fleaLetter = fleaName.toUpperCase().charAt(0);
- fleaJumpDistance = Number(fleaArr[1]);
- fleaPosition = 0;
- fleaData[fleaName] = {
- letter : fleaLetter,
- jumpDistance : fleaJumpDistance,
- position : fleaPosition,
- previousPosition : 0
- }
- }
- }
- //create audience strings
- for (var j = 0; j < trackLength; j++) {
- audienceString += '#';
- }
- //calculate race
- //first case - winner crosses or exactly on the finish line
- while (jumpsCount < jumpsAllowed) {
- for (var key in fleaData) {
- currentFlea = fleaData[key];
- currentFlea.previousPosition = currentFlea.position;
- currentFlea.position += currentFlea.jumpDistance;
- fleaData[key] = currentFlea;
- //check if the position is exactly on the finish line or behind it
- //to declare the winner
- if (currentFlea.position >= trackLength - 1) {
- foundWinner = true;
- winner = key;
- break;
- }
- }
- if (foundWinner == true) {
- console.log(audienceString);
- console.log(audienceString);
- for (var key in fleaData) {
- var pos = fleaData[key].position;
- if (pos > trackLength - 1) {
- pos = fleaData[key].previousPosition;
- }
- var dotStr = '';
- for (var j = 0; j < pos; j++) {
- dotStr += '.';
- }
- dotStr += fleaData[key].letter;
- for (var j = pos + 1; j < trackLength; j++) {
- dotStr += '.';
- }
- console.log(dotStr);
- }
- console.log(audienceString);
- console.log(audienceString);
- console.log('Winner: ' + winner);
- break;
- }
- jumpsCount++;
- }
- //all fleas are equal
- if (!foundWinner) {
- var equalPos = true;
- var positions = [];
- for (var key in fleaData) {
- var pos = fleaData[key].position;
- positions.push(pos);
- }
- for (var k in positions) {
- if (positions[k] !== positions[0]) {
- equalPos = false;
- }
- }
- if (equalPos) {
- var keys = Object.keys(fleaData);
- var lastKey = keys[keys.length - 1];
- winner = lastKey;
- foundWinner = true;
- }
- //print result
- if (foundWinner == true) {
- console.log(audienceString);
- console.log(audienceString);
- for (var key in fleaData) {
- var pos = fleaData[key].position;
- if (pos > trackLength - 1) {
- pos = fleaData[key].previousPosition;
- }
- var dotStr = '';
- for (var j = 0; j < pos; j++) {
- dotStr += '.';
- }
- dotStr += fleaData[key].letter;
- for (var j = pos + 1; j < trackLength; j++) {
- dotStr += '.';
- }
- console.log(dotStr);
- }
- console.log(audienceString);
- console.log(audienceString);
- console.log('Winner: ' + winner);
- }
- }
- //second case - no flea crosses the finish line, but one is ahead of the others
- if (!foundWinner) {
- var furthestFleaPos = 0;
- for (var key in fleaData) {
- var pos = fleaData[key].position;
- if (pos > furthestFleaPos) {
- furthestFleaPos = pos;
- winner = key;
- foundWinner = true;
- }
- }
- if (foundWinner == true) {
- console.log(audienceString);
- console.log(audienceString);
- for (var key in fleaData) {
- var pos = fleaData[key].position;
- if (pos > trackLength - 1) {
- pos = fleaData[key].previousPosition;
- }
- var dotStr = '';
- for (var j = 0; j < pos; j++) {
- dotStr += '.';
- }
- dotStr += fleaData[key].letter;
- for (var j = pos + 1; j < trackLength; j++) {
- dotStr += '.';
- }
- console.log(dotStr);
- }
- console.log(audienceString);
- console.log(audienceString);
- console.log('Winner: ' + winner);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement