123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
- with Ada.Containers.Vectors;
- with Ada.Containers; use Ada.Containers;
- with Ada.Text_IO; use Ada.Text_IO;
- -- This code reads its input from standard input
- -- Use cat _input.txt | historian_hysteria_ to get the result
- procedure Historian_Hysteria is
- subtype Location is Positive;
- subtype Distance is Natural;
- package Locations_Vectors is
- new Ada.Containers.Vectors (Index_type => Positive,
- Element_Type => Location);
- package Locations_Sorting is new Locations_Vectors.Generic_Sorting;
- Locations_1 : Locations_Vectors.Vector;
- Locations_2 : Locations_Vectors.Vector;
- Total_Distance : Distance := 0;
- type Input_Width_Index is new Positive range 1 .. 2;
- type Matrix is array (Input_Width_Index) of Locations_Vectors.Vector;
- Loca_Matrix : Matrix := (Locations_1, Locations_2);
- Position : Natural := 0;
- begin
- while not End_Of_File loop
- declare
- Value : Location;
- begin
- Position := 0;
- while not End_Of_Line loop
- Position := Position + 1;
- Get (Value);
- Loca_Matrix (Input_Width_Index (Position)).Append (Value);
- end loop;
- -- Skip to next Line
- Skip_Line;
- end;
- end loop;
- -- Order the Locations
- for Index in Input_Width_Index'Range loop
- Locations_Sorting.Sort (Loca_Matrix (Index));
- end loop;
- Put_Line ("There are " & Loca_Matrix (1).Length'Image & " values");
- for Index in 1 .. Natural (Loca_Matrix (1).Length) loop
- Total_Distance := Total_Distance
- + abs (Loca_Matrix (1).Element (Index)
- - Loca_Matrix (2).Element (Index));
- end loop;
- Put_Line ("Total distance is " & Total_Distance'Image);
- end Historian_Hysteria;
|