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