0210 - Chenar

From Bitnami MediaWiki

Enunț[edit | edit source]

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

Cerinţa[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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

Exemplu[edit | edit source]

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[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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
  1. Funcție care returnează elementele chenarului exterior al tabloului, în sensul acelor
  2. 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
  1. 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.')

</syntaxhighlight>