with Ada.Text_IO;
with Ada.Strings.Fixed;
procedure Day03_1 is
subtype Lower is Character range 'a' .. 'z';
subtype Upper is Character range 'A' .. 'Z';
subtype Item_ID is Character with Dynamic_Predicate => Item_ID in Lower | Upper;
Input : Ada.Text_IO.File_Type;
Sum : Natural := 0;
begin -- Day03_1
Ada.Text_IO.Open (File => Input, Mode => Ada.Text_IO.In_File, Name => "input_03");
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);
pragma Assert (Line'Last rem 2 = 0, Line);
begin -- One_Sack
Find_Dup : for C of Line (1 .. Line'Last / 2) loop
if Ada.Strings.Fixed.Index (Line (Line'Last / 2 + 1 .. Line'Last), C & "") /= 0 then
Sum := Sum + (if C in Lower then Character'Pos (C) - Character'Pos ('a') + 1
else Character'Pos (C) - Character'Pos ('A') + 27);
exit Find_Dup;
end if;
end loop Find_Dup;
end One_Sack;
end loop All_Sacks;
Ada.Text_IO.Close (File => Input);
Ada.Text_IO.Put_Line (Item => Sum'Image);
end Day03_1;