0210 - Chenar

De la Universitas MediaWiki

Enunț

Se consideră tabloul bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare.

Cerinţa

Scrieţi un program care citeşte numărul natural n şi cele n*n elemente ale tabloului şi apoi afişează elementele chenarului exterior al tabloului, separate prin câte un spaţiu. Chenarul este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus. Chenarul este format din prima şi ultima linie, prima şi ultima coloană a tabloului.

Date de intrare

Fişierul de intrare chenar.in conţine pe prima linie numărul n, iar pe următoarele n linii câte n numere naturale separate prin spaţii, reprezentând elementele tabloului

Date de ieşire

Dacă datele sunt introduse corect,în fişierul de ieşire chenar.out se va afișa :"Datele sunt introduse corect.",apoi pe un rând va conţine elementele cerute, separate prin câte un spaţiu.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 2 ⩽ n ⩽ 23
  • elementele tabloului sunt mai mici decât 1000

Exemplu

chenar.in
5
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
chenar.out
Datele sunt introduse corect.
1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6

Rezolvare

# Funție care verifică dacă datele de intrare sunt valide conform cerinței.
def validare(n: int, a: list[list[int]]) -> bool:
    # Verifică dacă n este între 2 și 23, inclusiv
    if n < 2 or n > 23:
        return False
    # Verifică dacă fiecare element din matricea a este între 0 și 9999, inclusiv
    for i in range(n):
        for j in range(n):
            if a[i][j] < 0 or a[i][j] >= 10000:
                return False
    return True

# Funcție care returnează elementele chenarului exterior al tabloului, în sensul acelor
# de ceasornic începând din colțul stânga-sus.
def chenar(n: int, a: list[list[int]]) -> list[int]:
    # Inițializăm lista rezultat cu elementele din prima linie a matricei a
    result = []
    for j in range(n):
        result.append(a[0][j])
    # Adăugăm elementele de pe ultima coloană a matricei a, cu excepția colțului din dreapta sus
    for i in range(1, n):
        result.append(a[i][n-1])
    # Adăugăm elementele de pe ultima linie a matricei a, în ordine inversă
    for j in range(n-2, -1, -1):
        result.append(a[n-1][j])
    # Adăugăm elementele de pe prima coloană a matricei a, cu excepția colțului din stânga sus, în ordine inversă
    for i in range(n-2, 0, -1):
        result.append(a[i][0])
    # Returnăm lista cu elementele chenarului
    return result

# Programul principal
if __name__ == '__main__':
    # Deschidem fișierele de intrare și de ieșire
    with open('chenar.in', 'r') as fin, open('chenar.out', 'w') as fout:
        # Citim dimensiunea matricei
        n = int(fin.readline().strip())
        # Inițializăm matricea a cu datele citite din fișierul de intrare
        a = []
        for i in range(n):
            row = list(map(int, fin.readline().strip().split()))
            a.append(row)

        # Verificăm dacă datele de intrare sunt valide
        if validare(n, a):
            # Calculăm elementele chenarului și le scriem în fișierul de ieșire, separate prin spațiu
            result = chenar(n, a)
            fout.write("Datele sunt introduse corect.\n")
            fout.write(' '.join(map(str, result)))
        else:
            # Scriem mesajul de eroare în fișierul de ieșire
            fout.write('Datele nu corespund restricțiilor impuse.')