-- Solution to Advent of Code 2020, Day 6 ------------------------------------------ -- Custom Customs -- -- https://adventofcode.com/2020/day/6 -- -- Full Ada version. -- with Ada.Strings.Fixed, Ada.Text_IO; procedure AoC_2020_06_Full_Ada is total : Integer; new_group : Boolean; subtype Answer_Range is Character range 'a' .. 'z'; type Yes_Answer is array (Answer_Range) of Boolean; r, rg : Yes_Answer; -- procedure Collect_Group_Total is g : Natural := 0; begin for c in Answer_Range loop if rg (c) then g := g + 1; end if; end loop; total := total + g; new_group := True; end Collect_Group_Total; -- use Ada.Strings.Fixed, Ada.Text_IO; f : File_Type; begin for part in 1 .. 2 loop Open (f, In_File, "aoc_2020_06.txt"); total := 0; new_group := True; while not End_Of_File (f) loop declare s : constant String := Get_Line (f); begin if s = "" then Collect_Group_Total; else for c in Answer_Range loop r (c) := Index (s, (1 => c)) > 0; end loop; if new_group then rg := r; new_group := False; elsif part = 1 then rg := rg or r; else rg := rg and r; end if; end if; end; end loop; Collect_Group_Total; Put_Line ("Part" & Integer'Image (part) & ' ' & Integer'Image (total)); Close (f); end loop; end AoC_2020_06_Full_Ada;