# Advent of Code 2022 - Day 1: Calorie Counting

::

Each day will have some preliminary setup code:

 ```1 2 3``` ```#lang iracket/lang #:require racket (require "../advent.rkt") (require threading) ```

## Day 1 - Part 1

We’re given the following sample data:

``````1000
2000
3000

4000

5000
6000

7000
8000
9000

10000``````

This list represents the Calories of the food carried by five Elves:

• The first Elf is carrying food with 1000, 2000, and 3000 Calories, a total of 6000 Calories.
• The second Elf is carrying one food item with 4000 Calories.
• The third Elf is carrying food with 5000 and 6000 Calories, a total of 11000 Calories.
• The fourth Elf is carrying food with 7000, 8000, and 9000 Calories, a total of 24000 Calories.
• The fifth Elf is carrying one food item with 10000 Calories.

Find the Elf carrying the most Calories. How many total Calories is that Elf carrying?

Here’s what we’ll do:

• parse the input into a list of each elf’s list of calories
• map the `list-sum` function over the list to collapse each elf’s list of calories to a total number
• use the `list-max` function to obtain the maximum calories
 `1` ```(define in (parse-aoc 1 numbers #:sep "\n\n")) ```
``````----------------------------------------------------------------------------------------------------
day01.txt -> 10477 chars, 2254 lines; first 3 lines; last 2 lines:
----------------------------------------------------------------------------------------------------
10130
9819
4257
...
4980
6660
----------------------------------------------------------------------------------------------------
(parse 1) -> 250 entries:
----------------------------------------------------------------------------------------------------
((10130 9819 4257 8400 10994 3758 8326)
(9002 15602 1193 6805 10797)
...
(1654 6928 3317 4238 4796 4168 6225 1669 1109 4265 4980 6660))
----------------------------------------------------------------------------------------------------``````
 ```1 2``` ```(~> (map list-sum in) list-max) ```

`69693`

## Part 2

For part 2 we need to find the top 3 elves carrying the most calories, so we’ll do the following:

• map the `list-sum` function over the list to collapse each elf’s list of calories to a total number
• sort the list in descending order
• take the first 3 elements
• sum these 3 elements
 ```1 2 3 4``` ```(~> (map list-sum in) (sort _ >) (take _ 3) (list-sum _)) ```

`200945`

## Refactor

Now that we have knowledge of both parts, we can factor out the common code into a `solve` function that is parameterized by the number of elves to sum:

 ```1 2 3 4 5``` ```(define (solve n) (~> (map list-sum in) (sort _ >) (take _ n) (list-sum _))) ```
 `1` ```(solve 1) ```

`69693`

 `1` ```(solve 3) ```

`200945`