Knowit-Julekalender-2019/1.js
2019-12-01 21:08:54 +01:00

100 lines
2.2 KiB
JavaScript

/**
* Totalt dager
*/
let days = 0;
/**
* Hvor mange dager på rad som dragen har spist for lite.
*/
let daysInRow = 0;
/**
* Dragens nåværende størrelse
*/
let currentSize = 50;
/**
* Resterende sauer per dag.
*/
let leftover = 0;
/**
* Bruk testfil for å verifisere at tallene blir riktig
*/
let filename = '1-sau.txt';
if (process.argv[2])
{
filename = '1-test.txt';
console.log('Bruker testfil');
}
/**
* Les inn fil og konverter den til et array av tall.
*/
const file = require('fs').readFileSync(`inputs/${filename}`, 'utf8');
const sheepTotal = file.split(', ').map(x => parseInt(x, 10));
function log(text)
{
console.log(`[Dag ${days}] ${text}`);
}
for (let sheep of sheepTotal)
{
/**
* Totalt antall sauer basert på dagens sauer +
* resterende sauer fra tidligere
*/
sheep = sheep + leftover;
/**
* Inkrementer antall dager
*/
days++;
/**
* Dragen spiser nok sauer og vokser 1 størrelse
*/
if (currentSize === sheep)
{
currentSize++;
daysInRow = 0;
leftover = 0;
log(`Dragon spiser nok ${sheep} og vokser en størrelse (${currentSize})`);
continue;
}
/**
* Dragen spiser nok sauer, vokser 1 størrelse
* og resterende sauer overføres til neste dag.
*/
if (currentSize < sheep)
{
daysInRow = 0;
leftover = sheep - currentSize;
currentSize++;
log(`Dragen spiser nok (${sheep}) og vokser en størrelse (${currentSize}) - ${leftover} sau(er) overført til neste dag.`);
continue;
}
/**
* Det er ikke nok sauer og dragen krymper en størrelse
*/
currentSize--;
leftover = 0;
/**
* Antall dager på rad blir inkrementert
* `daysInRow` blir satt tilbake til 1 om dragen vokser.
*/
daysInRow++;
if (daysInRow === 5) {
log(`Dragen spiser for lite mat (${sheep}) for femte dag på rad og spiser alle.`);
break;
}
log(`Dragen spiser for lite mat (${sheep}) og krymper en størrelse.`);
}
console.log(`Befolkningen på øya overlevde i ${days - 1} dager.`);