// Pildija iLJA SiPOLS
// ViDE: Visual Studio 2022
using System;

class Program
{
    
    static void TabulasLinija(int svitruSkaits, int reizes)
    {
        string linija = new string('-', svitruSkaits);
        for (int i = 0; i < reizes; i++) // atkārto līniju noteiktu reižu skaitu
            Console.Write(linija);
        Console.WriteLine();
    }

    // funkcija, kas izdrukā vienu tabulas rindu ar datiem un papildus info
    static void TabulasRinda(int[] rindasDati, int max, int min, int sum)
    {
        Console.Write("| ");
        foreach (var datums in rindasDati) // izdrukā katru skaitli no rindas
            Console.Write($"{datums} | ");
        Console.WriteLine($"{max} | {min} | {sum} |"); // izdrukā papildus statistikas datus
    }

    // Funkcija, kas ģenerē nejaušus skaitļus tabulai, izmantojot Random
    static int[,] TabulasDati(int rindas, int kolonnas, int min, int max)
    {
        Random random = new Random(); // izveido nejaušo skaitļu ģeneratoru
        int[,] dati = new int[rindas, kolonnas]; // izveido divdimensiju masīvu
        for (int i = 0; i < rindas; i++) // iterē cauri rindām
            for (int j = 0; j < kolonnas; j++) // iterē cauri kolonnām
                dati[i, j] = random.Next(min, max + 1); // piešķir nejaušu skaitli no min līdz max
        return dati;
    }

    // funkcija, kas izdrukā tabulas galveni, izmantojot lietotāja vārdu
    static void TabulaGalva(string vards)
    {
        Console.Write("|");
        foreach (char c in vards.ToUpper()) // pārvērš vārdu lielajiem burtiem un izdrukā katru burtu atsevišķi
            Console.Write($" {c} |");
        Console.WriteLine(" MIN | MAX | SUM|"); // pievieno papildus statistikas kolonnu nosaukumus
        TabulasLinija(5, vards.Length + 3); // izdrukā horizontālu līniju zem galvenes
    }

    // Funkcija, kas izdrukā tabulu, sakārtojot skaitļus un, ja nepieciešams, apgriežot to secību
    static void Tabula(int[,] dati, bool reverseNumbers = false)
    {
        int rindas = dati.GetLength(0); // nosaka rindu skaitu no masiva
        int kolonnas = dati.GetLength(1); // nosaka kolonnu skaitu no masiva

        for (int i = 0; i < rindas; i++) // iterē cauri katrai rindai
        {
            int[] rindasDati = new int[kolonnas]; // izveido masīvu, lai saglabātu rindas datus
            int min = int.MaxValue, max = int.MinValue, sum = 0; // inicializē min, max un sum vērtības

            for (int j = 0; j < kolonnas; j++) 
            {
                rindasDati[j] = dati[i, j]; // saglabā skaitli masīvā
                min = Math.Min(min, dati[i, j]); // atjauno minimālo vērtību
                max = Math.Max(max, dati[i, j]); // atjauno maksimālo vērtību
                sum += dati[i, j]; // saskaita summu
            }

            if (reverseNumbers) // 
                Array.Reverse(rindasDati);

            Array.Sort(rindasDati); // sakārto skaitļus augošā secībā

            TabulasRinda(rindasDati, max, min, sum); // izdrukā rindu ar datiem un statistiku
        }
    }

    static void Main(string[] args)
    {
        string vards = "Ilja";
        string uzvards = "Sipols";
        int rindas1 = uzvards.Length; 
        int kolonnas1 = vards.Length; 
        int min = vards.Length; // minimālā vērtība ir vārda garums
        int max = vards.Length + uzvards.Length; // maksimālā vērtība ir vārda + uzvārda garums

        int[,] dati1 = TabulasDati(rindas1, kolonnas1, min, max); // generē pirmās tabulas datus
        TabulaGalva(vards); // izdrukā pirmās tabulas galveni
        Tabula(dati1); // izdrukā pirmo tabulu
        
        int rindas2 = vards.Length; // otrās tabulas rindas skaits atbilst vārda garumam
        int kolonnas2 = uzvards.Length; // otrās tabulas kolonnas skaits atbilst uzvārda garumam
        int[,] dati2 = TabulasDati(rindas2, kolonnas2, min, max); // generē otrās tabulas datus
        Console.WriteLine();
        TabulaGalva(uzvards); // izdrukā otrās tabulas galveni
        Tabula(dati2, true); // izdrukā otro tabulu ar apgrieztiem skaitļiem

        Console.ReadKey(); 
    }
}
