|
@@ -0,0 +1,60 @@
|
|
|
+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;
|