aoa_22_20220720.0.0_6d9ebd71/src/day04_2.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
with Ada.Text_IO;
with Ada.Strings.Fixed;

procedure Day04_2 is
   Input : Ada.Text_IO.File_Type;
   Count : Natural := 0;
begin -- Day04_2
   Ada.Text_IO.Open (File => Input, Mode => Ada.Text_IO.In_File, Name => "input_04");

   All_Sacks : loop
      exit All_Sacks when Ada.Text_IO.End_Of_File (Input);

      One_Sack : declare
         Line : constant String := Ada.Text_IO.Get_Line (Input);

         Dash1 : constant Positive := Ada.Strings.Fixed.Index (Line, "-");
         Comma : constant Positive := Ada.Strings.Fixed.Index (Line, ",");
         Dash2 : constant Positive := Ada.Strings.Fixed.Index (Line (Comma .. Line'Last), "-");

         Elf1_Lo : constant Natural := Integer'Value (Line (1 .. Dash1 - 1) );
         Elf1_Hi : constant Natural := Integer'Value (Line (Dash1 + 1 .. Comma - 1) );
         Elf2_Lo : constant Natural := Integer'Value (Line (Comma + 1 .. Dash2 - 1) );
         Elf2_Hi : constant Natural := Integer'Value (Line (Dash2 + 1 .. Line'Last) );

         subtype Elf1 is Integer range Elf1_Lo .. Elf1_Hi;
         subtype Elf2 is Integer range Elf2_Lo .. Elf2_Hi;
      begin -- One_Sack
         if Elf1_Lo in Elf2 or Elf1_Hi in Elf2 or Elf2_Lo in Elf1 or Elf2_Hi in Elf1 then -- These overlap somehow
            Count := Count + 1;
         end if;
      end One_Sack;
   end loop All_Sacks;

   Ada.Text_IO.Close (File => Input);
   Ada.Text_IO.Put_Line (Item => Count'Image);
end Day04_2;