# 2022 Day 1: Calorie Counting

**URL:** https://forum.ada-lang.io/t/2022-day-1-calorie-counting/152
**Category:** Advent of Code
**Tags:** spoilers
**Created:** [December 1, 2022, 6:18am UTC](https://forum.ada-lang.io/t/2022-day-1-calorie-counting/152 "2022-12-01T06:18:27Z")
**Posts on this page:** 1
**Showing post:** 6

<div class="post-metadata">

### Author: ![rocher](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/rocher/32/89_2.png) [@rocher](https://forum.ada-lang.io/u/rocher)
#### Post date: [December 1, 2022, 1:48pm UTC](https://forum.ada-lang.io/t/2022-day-1-calorie-counting/152/6 "2022-12-01T13:48:52Z")

</div>

[rocher][1][Ada] My solution for part 1. Quite simple, it’s just the first day…

```ada
  with Ada.Text_IO; use Ada.Text_IO;

  procedure Day01_P1 is

     Input : File_Type;
     Calories : Natural := 0;
     Max_Calories : Natural := 0;

     function Get_Max_Calories (K: Natural) return Natural is
       (if K > Max_Calories then K else Max_Calories);

  begin
     Open (Input, In_File, "input.txt");

     loop
        declare
           Line : String := Get_Line (Input);
        begin
           if Line'Length = 0 then
              Max_Calories := Get_Max_Calories (Calories);
              Calories := 0;
           else
              Calories := @ + Natural'Value (Line);
           end if;
        end;
        exit when End_Of_File (Input);
     end loop;
     Max_Calories := Get_Max_Calories (Calories);

     Close (Input);
     Put_Line ("Answer:" & Max_Calories'Image);
  end Day01_P1;

```

Here part 2 using an array:

```ada
  with Ada.Text_IO; use Ada.Text_IO;

  procedure Day01_P2 is

     Input : File_Type;
     Calories : Natural := 0;
     Max_Calories : array (1 .. 3) of Natural := (0, 0, 0);

     procedure Get_Max_Calories is
     begin
        for I in Max_Calories'Range loop
           if Calories > Max_Calories (I) then
              Max_Calories (I+1 .. Max_Calories'Last) := Max_Calories (I .. Max_Calories'Last-1);
              Max_Calories (I) := Calories;
              exit; -- this loop
           end if;
        end loop;
     end Get_Max_Calories;

  begin
     Open (Input, In_File, "input.txt");

     loop
        declare
           Line : String := Get_Line (Input);
        begin
           if Line'Length = 0 then
              Get_Max_Calories;
              Calories := 0;
           else
              Calories := @ + Natural'Value (Line);
           end if;
        end;
        exit when End_Of_File (Input);
     end loop;
     Get_Max_Calories;

     Close (Input);
     Put_Line ("Answer:" & Natural'Image
                 (Max_Calories (1) + Max_Calories (2) + Max_Calories (3)));
  end Day01_P2;

```

---

_[View the full topic](https://forum.ada-lang.io/t/2022-day-1-calorie-counting/152)._
