Cleaned a bit more

This commit is contained in:
Simon Cambier 2023-12-05 21:29:30 +01:00
parent 1634f305fd
commit bcd1115d4c

View File

@ -69,12 +69,9 @@ for (const map of [
function cleanInput(o: number[]): boolean { function cleanInput(o: number[]): boolean {
return o.length === 3; return o.length === 3;
} }
function orderBySource(a: number[], b: number[]): number {
return a[1] - b[1];
}
seedToSoil = seedToSoil.filter(cleanInput); seedToSoil = seedToSoil.filter(cleanInput);
soilToFertilizer = soilToFertilizer.filter(cleanInput).sort(orderBySource); soilToFertilizer = soilToFertilizer.filter(cleanInput);
fertilizerToWater = fertilizerToWater.filter(cleanInput); fertilizerToWater = fertilizerToWater.filter(cleanInput);
waterToLight = waterToLight.filter(cleanInput); waterToLight = waterToLight.filter(cleanInput);
lightToTemp = lightToTemp.filter(cleanInput); lightToTemp = lightToTemp.filter(cleanInput);
@ -82,23 +79,23 @@ tempToHumidity = tempToHumidity.filter(cleanInput);
humidityToLocation = humidityToLocation.filter(cleanInput); humidityToLocation = humidityToLocation.filter(cleanInput);
/** /**
* Given a source input and a sorted list of maps, calculate the destination value * Given a source input and a list of maps, calculate the destination value
* @param input * @param source
* @param maps in the form of [[dest, sourceFrom, sourceTo]] * @param maps in the form of [[dest, sourceFrom, sourceTo]]
* @returns * @returns
*/ */
function getMapResult(input: number, maps: number[][]): number { function sourceToDestination(source: number, maps: number[][]): number {
// Get the map corresponding to number let dest = -1;
let mapped = -1; // Iterate the maps and find the one that matches the source
for (const map of maps) { for (const map of maps) {
const sourceFrom = map[1]; const sourceFrom = map[1];
const sourceTo = map[1] + map[2] - 1; const sourceTo = map[1] + map[2] - 1;
if (input >= sourceFrom && input <= sourceTo) { if (source >= sourceFrom && source <= sourceTo) {
mapped = map[0] + input - sourceFrom; dest = map[0] + source - sourceFrom;
} }
} }
if (mapped > -1) return mapped; if (dest > -1) return dest;
return input; return source;
} }
let minimalLocation = Number.MAX_VALUE; let minimalLocation = Number.MAX_VALUE;
@ -107,13 +104,13 @@ for (const pair of seedsPairs) {
trace(JSON.stringify(pair)); trace(JSON.stringify(pair));
const to = pair[0] + pair[1] - 1; const to = pair[0] + pair[1] - 1;
for (let seed = pair[0]; seed < to; seed++) { for (let seed = pair[0]; seed < to; seed++) {
const soil = getMapResult(seed, seedToSoil); const soil = sourceToDestination(seed, seedToSoil);
const fert = getMapResult(soil, soilToFertilizer); const fert = sourceToDestination(soil, soilToFertilizer);
const water = getMapResult(fert, fertilizerToWater); const water = sourceToDestination(fert, fertilizerToWater);
const light = getMapResult(water, waterToLight); const light = sourceToDestination(water, waterToLight);
const temp = getMapResult(light, lightToTemp); const temp = sourceToDestination(light, lightToTemp);
const hum = getMapResult(temp, tempToHumidity); const hum = sourceToDestination(temp, tempToHumidity);
const loc = getMapResult(hum, humidityToLocation); const loc = sourceToDestination(hum, humidityToLocation);
if (loc < minimalLocation) minimalLocation = loc; if (loc < minimalLocation) minimalLocation = loc;
} }
} }
@ -151,7 +148,7 @@ function TIC() {
let y = 1; let y = 1;
if (frames % speed === 0) { if (frames % speed === 0) {
seed.value = getMapResult(seed.value, steps[seed.step].map); seed.value = sourceToDestination(seed.value, steps[seed.step].map);
++seed.step; ++seed.step;
if (seed.step >= steps.length) { if (seed.step >= steps.length) {
seed.step = 0; seed.step = 0;