spaghetti at a wall and none of its edible
This commit is contained in:
commit
a0b4c83c44
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
src/inputs*
|
||||||
42
src/01a.js
Normal file
42
src/01a.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import data from "./inputs/01ex.json" with { type: "json" };
|
||||||
|
const inputs = data.inputs;
|
||||||
|
|
||||||
|
/* Global Variables */
|
||||||
|
let zeroCount = 0;
|
||||||
|
/* Starting Dial Position */
|
||||||
|
let dialPos = 50;
|
||||||
|
|
||||||
|
/* Functions */
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} direction - "L" or "R"
|
||||||
|
* @param {Number} magnitude - Number of positions to rotate the dial
|
||||||
|
* @param {Number} begDialPos - dialPos before any movement
|
||||||
|
* @returns {Number} newDialPos
|
||||||
|
*/
|
||||||
|
function rotateDial(direction, magnitude, begDialPos) {
|
||||||
|
let newDialPos = begDialPos;
|
||||||
|
switch(direction) {
|
||||||
|
case 'L':
|
||||||
|
newDialPos -= magnitude % 100;
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
newDialPos += magnitude % 100;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error("Invalid direction provided.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newDialPos < 0) newDialPos += 100;
|
||||||
|
if (newDialPos > 99) newDialPos -= 100;
|
||||||
|
return newDialPos;
|
||||||
|
};
|
||||||
|
|
||||||
|
inputs.forEach(move => {
|
||||||
|
const direction = move.slice(0,1);
|
||||||
|
const magnitude = Number.parseInt(move.slice(1));
|
||||||
|
dialPos = rotateDial(direction, magnitude, dialPos);
|
||||||
|
if (dialPos === 0) zeroCount++;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`Zero Count: ${zeroCount}`)
|
||||||
55
src/01b.js
Normal file
55
src/01b.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import data from "./inputs/01ex.json" with { type: "json" };
|
||||||
|
const inputs = data.inputs;
|
||||||
|
|
||||||
|
/* Global Variables */
|
||||||
|
let zeroCount = 0;
|
||||||
|
/* Starting Dial Position */
|
||||||
|
let dialPos = 50;
|
||||||
|
|
||||||
|
/* Functions */
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} direction - "L" or "R"
|
||||||
|
* @param {Number} magnitude - Number of positions to rotate the dial
|
||||||
|
* @param {Number} begDialPos - dialPos before any movement
|
||||||
|
* @returns {Number} newDialPos
|
||||||
|
*/
|
||||||
|
function rotateDial(direction, magnitude, begDialPos) {
|
||||||
|
let newDialPos = begDialPos;
|
||||||
|
switch(direction) {
|
||||||
|
case 'L':
|
||||||
|
newDialPos -= magnitude % 100;
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
newDialPos += magnitude % 100;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error("Invalid direction provided.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newDialPos < 0) newDialPos += 100;
|
||||||
|
if (newDialPos > 99) newDialPos -= 100;
|
||||||
|
return newDialPos;
|
||||||
|
};
|
||||||
|
|
||||||
|
function countRotations(magnitude) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inputs.forEach(move => {
|
||||||
|
const direction = move.slice(0,1);
|
||||||
|
const magnitude = Number.parseInt(move.slice(1));
|
||||||
|
dialPos = rotateDial(direction, magnitude, dialPos);
|
||||||
|
if (dialPos === 0) zeroCount++;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`Zero Count: ${zeroCount}`)
|
||||||
|
|
||||||
|
console.log(zeroCount);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* lower than 6813
|
||||||
|
* higher than 5795
|
||||||
|
* not 6324
|
||||||
|
* not 6221
|
||||||
|
*/
|
||||||
57
src/02a.js
Normal file
57
src/02a.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import data from "./inputs/02ex.json" with { type: "json" };
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} rawRanges Raw input from AoC
|
||||||
|
* @returns {Array<Object>} - Array of ranges to check
|
||||||
|
*/
|
||||||
|
function parseRanges(rawRanges) {
|
||||||
|
// Set up the Array to store the range objects
|
||||||
|
/** @type {Array<Object>} */
|
||||||
|
const parsedRanges = new Array();
|
||||||
|
// Separate the raw string into subsets of ##-##
|
||||||
|
/** @type {Array<String>} */
|
||||||
|
const tmpRanges = rawRanges.split(",");
|
||||||
|
tmpRanges.forEach(range => {
|
||||||
|
// Separate each string to get the lower and upper bounds
|
||||||
|
/** @type {Array<String>} */
|
||||||
|
const tmp = range.split("-");
|
||||||
|
|
||||||
|
// Coerce the strings into ints
|
||||||
|
/** @type {Number} */
|
||||||
|
const lower = tmp[0];
|
||||||
|
/** @type {Number} */
|
||||||
|
const upper = tmp[1];
|
||||||
|
|
||||||
|
// Add the range
|
||||||
|
parsedRanges.push({
|
||||||
|
lowerBound: lower,
|
||||||
|
upperBound: upper
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return parsedRanges;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Number} id
|
||||||
|
*/
|
||||||
|
function checkValidity(id) {
|
||||||
|
const re = new RegExp("[0-9][0-9]{2,}");
|
||||||
|
const idStr = id.toString();
|
||||||
|
const matches = idStr.match(re);
|
||||||
|
if (typeof matches[0] === 'string') return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ranges = parseRanges(data.inputs);
|
||||||
|
const invalidIds = new Array();
|
||||||
|
|
||||||
|
ranges.forEach(range => {
|
||||||
|
for(let i = range.lowerBound; i <= range.upperBound; i++) {
|
||||||
|
if (!(checkValidity(i))) {
|
||||||
|
invalidIds.push(i);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
56
src/03.js
Normal file
56
src/03.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
const { inputs } = require("./inputs/03.json");
|
||||||
|
|
||||||
|
const joltageBanks = new Array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {String} bank
|
||||||
|
*/
|
||||||
|
function getHighestJoltages(bank) {
|
||||||
|
// Turn the string into an array of battery joltage values and their associated index
|
||||||
|
const joltages = new Array();
|
||||||
|
for (let i = 0; i < bank.length; i++) {
|
||||||
|
joltages.push({
|
||||||
|
"value": bank[i],
|
||||||
|
"index": i
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort them highest to lowest
|
||||||
|
joltages.sort((a, b) => {
|
||||||
|
if (a.value < b.value) return 1;
|
||||||
|
else return -1;
|
||||||
|
});
|
||||||
|
|
||||||
|
const finalJoltages = [
|
||||||
|
joltages[0]
|
||||||
|
];
|
||||||
|
let foundValid = false;
|
||||||
|
let j = 1;
|
||||||
|
while (foundValid == false) {
|
||||||
|
if (joltages[j].index > joltages[0].index) {
|
||||||
|
finalJoltages.push(joltages[j]);
|
||||||
|
foundValid = true;
|
||||||
|
} else {
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalJoltages;
|
||||||
|
}
|
||||||
|
|
||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
inputs.forEach(bank => {
|
||||||
|
console.log("Bank: ", counter);
|
||||||
|
const highestJoltages = getHighestJoltages(bank);
|
||||||
|
counter++;
|
||||||
|
});
|
||||||
|
|
||||||
|
let joltageSum = 0;
|
||||||
|
joltageBanks.forEach(bank => {
|
||||||
|
const value = Number.parseInt(bank);
|
||||||
|
joltageSum += value;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(joltageSum);
|
||||||
Loading…
Reference in New Issue
Block a user