Day 9: Mirage Maintenance

For part one, the problem seemed straight forward enough but I found the implementation a bit difficult and found it quite annoying, this may also be because I have been coding everyday on top of work and music, and am tired in general. That said I may have normalised my baseline because I feel like I've written some not-so-simple code and solved the problem in a reasonable amount of time.

There is room for improvement in my dealing with recursive flow and while loops, and how to debug them, as I often have issues with them and keep crashing the browser with infinite loops. I should probably just switch to running the code in Node.js but it's nice to be here within the blog already.

I will have to come back to part two if there is time, because I didn't get to it this weekend.

Came back to part two a week later it's done!

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 const inputToUse = realInput; const inputLines = inputToUse.split(/\n/); const histories = []; inputLines.forEach(function(line){ const trimmedLine = line.trim(); const history = trimmedLine.split(' '); histories.push(history); }); console.log('histories',histories); const allPredictions = []; const allHistPredictions = []; histories.forEach(function(history,i){ history.forEach(function(entry,j){ const numEntry = parseFloat(entry); histories[i][j] = numEntry; }); const differenceBreakdowns = [history]; var buildingBreakdowns = true; var depth = 0; while( buildingBreakdowns ) { const toBreakdown = differenceBreakdowns[depth]; const count = toBreakdown.length; for( var i=0; i<count-1; i++ ) { const thisEntry = differenceBreakdowns[depth][i]; // console.log('thisEntry',thisEntry); const nextEntry = differenceBreakdowns[depth][i+1]; // console.log('nextEntry',nextEntry); const difference = nextEntry - thisEntry; // console.log('difference',difference); if( !differenceBreakdowns[depth+1] ) { differenceBreakdowns[depth+1] = []; } differenceBreakdowns[depth+1].push(difference); } const lastBreakdown = differenceBreakdowns[depth+1]; // const lastBreakdown = [0,0,0,0,0]; // console.log('lastBreakdown',lastBreakdown); const brokeDownToZero = lastBreakdown.every(value => value === 0); if( brokeDownToZero ) { // console.log('broke down to zero'); buildingBreakdowns = false; } else { depth = depth + 1; } } // console.log('difference breakdowns',differenceBreakdowns); // ! make predictions const breakdownCount = differenceBreakdowns.length; console.log('breakdownCount',breakdownCount); for( var i=breakdownCount-1; i>-1; i-- ) { var nextBreakdownLastEntry = 0; var nextBreakdownFirstEntry = 0; const breakdown = differenceBreakdowns[i]; // if( i == breakdownCount-1 ) { // prediction = 0; // } else { const thisBreakdownLength = breakdown.length; const lastEntry = breakdown[thisBreakdownLength-1]; const firstEntry = breakdown[0]; // console.log('lastEntry',lastEntry); if( differenceBreakdowns[i+1] ) { const nextBreakdown = differenceBreakdowns[i+1]; const nextBreakdownLength = nextBreakdown.length; nextBreakdownLastEntry = nextBreakdown[nextBreakdownLength-1]; nextBreakdownFirstEntry = nextBreakdown[0]; } // console.log('nextBreakdownLastEntry',nextBreakdownLastEntry); const prediction = lastEntry + nextBreakdownLastEntry; const histPrediction = firstEntry - nextBreakdownFirstEntry; // } differenceBreakdowns[i].push(prediction); differenceBreakdowns[i].unshift(histPrediction); // console.log('differenceBreakdowns',differenceBreakdowns); } console.log('after prediction, differenceBreakdowns', differenceBreakdowns); const histWithPrediction = differenceBreakdowns[0]; const histWPredLength = histWithPrediction.length; const finalPrediction = histWithPrediction[histWPredLength-1]; const finalHistPrediction = histWithPrediction[0]; allPredictions.push(finalPrediction); allHistPredictions.push(finalHistPrediction); }); console.log('allPredictions',allPredictions); console.log('allHistPredictions',allHistPredictions); var predictionTotal = 0; allPredictions.forEach(function(prediction) { predictionTotal = predictionTotal + prediction; }); console.log('predictionTotal',predictionTotal); var histPredictionTotal = 0; allHistPredictions.forEach(function(prediction) { histPredictionTotal = histPredictionTotal + prediction; }); console.log('histPredictionTotal',histPredictionTotal);
All days / Day 10