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;