0210 - Chenar

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.')