solving Day02 in ts

This commit is contained in:
WieErWill 2023-12-02 11:22:19 +01:00
parent ce25c9cc61
commit 6e1d7bc978
2 changed files with 87 additions and 1 deletions

75
Day02/ts/solution.ts Normal file
View File

@ -0,0 +1,75 @@
import * as fs from 'fs';
import * as path from 'path';
interface ColorCounts {
red: number;
green: number;
blue: number;
}
/**
* Parses a line from the game data file.
*
* @param {string} line - A line from the game data file.
* @returns {ColorCounts} - An object containing the max counts of each color.
*/
function parseGameData(line: string): ColorCounts {
const colorCounts: ColorCounts = { red: 0, green: 0, blue: 0 };
const subsets = line.split(': ')[1].split('; ');
subsets.forEach(subset => {
subset.split(', ').forEach(color => {
const [count, colorName] = color.split(' ');
colorCounts[colorName as keyof ColorCounts] = Math.max(colorCounts[colorName as keyof ColorCounts], parseInt(count));
});
});
return colorCounts;
}
/**
* Calculates the power of a cube set.
*
* @param {ColorCounts} colorCounts - The counts of each color.
* @returns {number} - The power of the cube set.
*/
function calculatePower(colorCounts: ColorCounts): number {
return colorCounts.red * colorCounts.green * colorCounts.blue;
}
/**
* Processes the game data from a file.
*
* @param {string} filePath - The path to the file.
* @returns {number} - The sum of the powers of the minimum cube sets.
*/
function processGames(filePath: string): number {
try {
const lines = fs.readFileSync(filePath, 'utf-8').split('\n').filter(line => line);
return lines.reduce((sum, line) => sum + calculatePower(parseGameData(line)), 0);
} catch (error) {
throw new Error(`Failed to process file: ${filePath}. Error: ${error}`);
}
}
// Test the functionality
function runTest(): void {
const testFilePath = path.join(__dirname, '../test.txt');
const testResult = processGames(testFilePath);
console.assert(testResult === 2286, `Test failed: Expected 2286, got ${testResult}`);
console.log(`Test Passed: Sum of powers for the minimum cube sets is ${testResult}`);
}
// Main execution
function main(): void {
try {
runTest();
const inputFilePath = path.join(__dirname, '../input.txt');
const result = processGames(inputFilePath);
console.log(`From input.txt: Sum of powers for the minimum cube sets is ${result}`);
} catch (error) {
console.error(error);
}
}
main();

View File

@ -40,6 +40,8 @@ I aim to complete each day's puzzle on the same day, but as with any challenge,
## Running the Solutions ## Running the Solutions
Each solution is a standalone script. Each solution is a standalone script.
## Python
To run any of the solutions, navigate to the respective day's directory and run the script using a Python interpreter. To run any of the solutions, navigate to the respective day's directory and run the script using a Python interpreter.
For example: For example:
@ -49,6 +51,9 @@ python3 part2.py test.txt # for testing
python3 part2.py python3 part2.py
``` ```
Make sure you have Python installed on your machine. The solutions are developed using Python 3.x.
## Rust
For Rust you have to use the rust project generated in each Day. For Rust you have to use the rust project generated in each Day.
Make sure you have Rust and Cargo installed. Make sure you have Rust and Cargo installed.
You can either test or run the solution: You can either test or run the solution:
@ -59,13 +64,19 @@ cargo test #running tests
cargo run cargo run
``` ```
## JavaScript
Using solutions in JavaScript requires NodeJS installed on your system. Then: Using solutions in JavaScript requires NodeJS installed on your system. Then:
```bash ```bash
cd Day01/js cd Day01/js
node solution.js node solution.js
``` ```
Make sure you have Python installed on your machine. The solutions are developed using Python 3.x. ## TypeScript
Normally you can use compile the TS file to JS using the tsc compiler. But for ease in this simple scripts i suggest installing: `npm install -g typescript ts-node`. With this you can just run the TS file at once and get the output without compiling and running over and over.
```bash
cd Day01/ts
ts-node solution.ts
```
## Feedback and Collaboration ## Feedback and Collaboration
I'm always open to feedback and suggestions for improving the solutions. I'm always open to feedback and suggestions for improving the solutions.