# Advent of Code 2022: Day 1

A TypeScript solution for the Advent of Code 2022, Day 1 puzzle: beginning the journey with basic grouping, sorting and summation.

Today’s puzzle asks us to sum up groups of numbers and find the largest N groups.

The puzzle input looks something like this.

1000 2000 3000 4000 5000 6000

We see that a **blank line separates the groups of numbers** that represent the calorie counts for each elf, so we can total up the calories for each elf by calling `reduce`

over the lines and adding each new number to the last element in the accumulated list, but adding a new element to the end of the accumulated list if there’s a blank line (i.e. a new group total).

const elves: number[] = puzzleInput .split('\n') .reduce( (acc: number[], curr: string) => { if (curr === '') { // blank line means new group; // so start a new total acc.push(0); } else { // add to the previous group const prev = acc.length - 1; acc[prev] += parseInt(curr); } return acc; }, [0] // begin with one group );

For part 1, we just need the elf with the `max`

total calories.

const part1 = Math.max(...elves);

For part 2, we want the top 3 elves, so we might as well `sort`

the list. We can get the top 3 by using a negative parameter in the `slice()`

function, then add them up with a simple `reduce`

for summation.

const part2 = elves .sort((a, b) => a - b) .slice(-3) .reduce((sum, x) => sum + x, 0);

## Final solution

const elves: number[] = puzzleInput .split('\n') .reduce( (acc: number[], curr: string) => { if (curr === '') { // blank line means new group; // so start a new total acc.push(0); } else { // add to the previous group const prev = acc.length - 1; acc[prev] += parseInt(curr); } return acc; }, [0] // begin with one group ); const part1 = Math.max(...elves); const part2 = elves .sort((a, b) => a - b) .slice(-3) .reduce((sum, x) => sum + x, 0); console.log("Part 1:", part1); console.log("Part 2:", part2);

Part 1: 67658 Part 2: 200158