2459 - Low Memory: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Ajutaţi-l pe Bogdan să ducă la bun sfârşit sarcina primită de la tatăl său pentru a se putea întâlni cu Marcela, fata din vecini. == Date de intrare == Fișierul de intrare low_memory.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale ordonate crescător. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.", fișierul de ieșire '''low_memory.out''' va conține pe prima linie num...
 
No edit summary
Line 42: Line 42:
import sys
import sys


def validate_input(n: int, a: List[int]) -> bool:
def valideaza_date_intrare(n: int, a: List[int]) -> bool:
     # Verifică dacă n este un număr pozitiv și a are o lungime corespunzătoare
     # Verifică dacă n este un număr pozitiv și a are o lungime corespunzătoare
     # și dacă toate elementele din a sunt mai mici decât 10^13
     # și dacă toate elementele din a sunt mai mici decât 10^13
     return n > 0 and len(a) == n and all(x < 10**13 for x in a)
     if n <= 0 or len(a) != n or any(x >= 10**13 for x in a):
        print("Datele nu corespund restricțiilor impuse.")
        sys.exit(0)
    print("Datele sunt introduse corect.")
    return True


def solve(n: int, a: List[int]) -> List[int]:
def rezolva_problema(n: int, a: List[int]) -> List[int]:
     # Inversează elementele listei
     # Inversează elementele listei
     return a[::-1]
     return a[::-1]


def main() -> None:
if __name__ == "__main__":
     # Citire date de intrare
     # Citire date de intrare
     try:
     try:
Line 61: Line 65:
         sys.exit(0)
         sys.exit(0)


     # Verificare date de intrare
     # Validează datele de intrare
     if not validate_input(n, a):
     valideaza_date_intrare(n, a)
        print("Datele nu corespund restricțiilor impuse.")
 
        sys.exit(0)
    # Rezolvă problema
    result = rezolva_problema(n, a)


     # Rezolvare și afișare
     # Scrie date de ieșire
    result = solve(n, a)
    print("Datele sunt introduse corect.")
     try:
     try:
         with open("low_memory.out", "w") as fout:
         with open("low_memory.out", "w") as fout:
Line 75: Line 78:
         sys.exit(0)
         sys.exit(0)


main()




Line 81: Line 83:




'''Explicatie'''
Funcția validate_input(n: int, a: List[int]) -> bool verifică dacă datele de intrare respectă restricțiile impuse de cerință. În cazul nostru, această funcție verifică dacă n este un număr pozitiv, dacă lungimea listei a este egală cu n și dacă toate elementele din lista a sunt mai mici decât 10^13. Funcția returnează True dacă datele de intrare sunt valide și False în caz contrar.


Funcția solve(n: int, a: List[int]) -> List[int] primește numărul n și lista de numere naturale a și returnează o nouă listă care conține elementele lui a în ordine inversă.


Funcția main() -> None este punctul de intrare în program și conține codul principal. În această funcție, datele de intrare sunt citite din fișierul "low_memory.in", apoi sunt validate folosind funcția validate_input. În cazul în care datele de intrare sunt invalide, programul afișează un mesaj de eroare și se încheie cu ajutorul funcției sys.exit(0). În caz contrar, programul continuă cu inversarea listei folosind funcția solve, scrie rezultatul în fișierul "low_memory.out" și afișează mesajul "Datele sunt introduse corect.".


În final, programul rulează funcția main().






</syntaxhighlight>








==Explicatie==
valideaza_date_intrare(n: int, a: List[int]) -> bool - Această funcție primește două argumente: un număr întreg n și o listă de întregi a. Scopul acestei funcții este de a valida datele de intrare. Funcția verifică dacă n este un număr pozitiv, dacă a are o lungime corespunzătoare și dacă toate elementele din a sunt mai mici decât 10^13. Dacă datele de intrare nu respectă aceste restricții, funcția afișează un mesaj de eroare și se termină programul. Dacă datele de intrare sunt valide, funcția afișează un mesaj de confirmare și returnează True.


rezolva_problema(n: int, a: List[int]) -> List[int] - Această funcție primește aceleași argumente ca și funcția valideaza_date_intrare, adică un număr întreg n și o listă de întregi a. Scopul acestei funcții este să inverseze elementele din lista a și să returneze lista inversată.


</syntaxhighlight>
if __name__ == "__main__": - Această linie verifică dacă acest script este rulat direct ca program (adică prin intermediul comenzii python nume_script.py), sau dacă este importat ca un modul într-un alt script. Dacă acest script este rulat direct ca program, codul din interiorul blocului if va fi executat.
 
În blocul if __name__ == "__main__": sunt apelate funcțiile valideaza_date_intrare, rezolva_problema și sunt realizate operațiile de citire și scriere în fișiere. În cazul în care citirea din fișierul de intrare sau scrierea în fișierul de ieșire nu poate fi efectuată, programul se termină.

Revision as of 06:14, 2 April 2023

Cerința

Ajutaţi-l pe Bogdan să ducă la bun sfârşit sarcina primită de la tatăl său pentru a se putea întâlni cu Marcela, fata din vecini.

Date de intrare

Fișierul de intrare low_memory.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale ordonate crescător.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.", fișierul de ieșire low_memory.out va conține pe prima linie numerele din fişierul de intrare în ordine descrescătoare. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

21 ≤ n ≤ 3000numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 10^13.

Exemple

Exemplul 1

low_memory.in
7
1 2 5 7 8 9 12
ecran
Datele sunt introduse corect.
low_memory.out
12 9 8 7 5 2 1

Exemplul 2

low_memory.in
5
1 2 3 4 5
ecran
Datele sunt introduse corect.
low_memory.out
5 4 3 2 1

Exemplul 3

low_memory.in
3
1 2 3 10000000000000
ecran
Datele nu corespund restricțiilor impuse.
low_memory.out



Rezolvare

<syntaxhighlight lang="python" line="1">

  1. 2459 - Low Memory

from typing import List import sys

def valideaza_date_intrare(n: int, a: List[int]) -> bool:

   # Verifică dacă n este un număr pozitiv și a are o lungime corespunzătoare
   # și dacă toate elementele din a sunt mai mici decât 10^13
   if n <= 0 or len(a) != n or any(x >= 10**13 for x in a):
       print("Datele nu corespund restricțiilor impuse.")
       sys.exit(0)
   print("Datele sunt introduse corect.")
   return True

def rezolva_problema(n: int, a: List[int]) -> List[int]:

   # Inversează elementele listei
   return a[::-1]

if __name__ == "__main__":

   # Citire date de intrare
   try:
       with open("low_memory.in", "r") as fin:
           n = int(fin.readline().strip())
           a = list(map(int, fin.readline().split()))
   except FileNotFoundError:
       print("Nu s-a putut deschide fisierul de intrare.")
       sys.exit(0)
   # Validează datele de intrare
   valideaza_date_intrare(n, a)
   # Rezolvă problema
   result = rezolva_problema(n, a)
   # Scrie date de ieșire
   try:
       with open("low_memory.out", "w") as fout:
           fout.write(" ".join(map(str, result)))
   except:
       sys.exit(0)








</syntaxhighlight>



Explicatie

valideaza_date_intrare(n: int, a: List[int]) -> bool - Această funcție primește două argumente: un număr întreg n și o listă de întregi a. Scopul acestei funcții este de a valida datele de intrare. Funcția verifică dacă n este un număr pozitiv, dacă a are o lungime corespunzătoare și dacă toate elementele din a sunt mai mici decât 10^13. Dacă datele de intrare nu respectă aceste restricții, funcția afișează un mesaj de eroare și se termină programul. Dacă datele de intrare sunt valide, funcția afișează un mesaj de confirmare și returnează True.

rezolva_problema(n: int, a: List[int]) -> List[int] - Această funcție primește aceleași argumente ca și funcția valideaza_date_intrare, adică un număr întreg n și o listă de întregi a. Scopul acestei funcții este să inverseze elementele din lista a și să returneze lista inversată.

if __name__ == "__main__": - Această linie verifică dacă acest script este rulat direct ca program (adică prin intermediul comenzii python nume_script.py), sau dacă este importat ca un modul într-un alt script. Dacă acest script este rulat direct ca program, codul din interiorul blocului if va fi executat.

În blocul if __name__ == "__main__": sunt apelate funcțiile valideaza_date_intrare, rezolva_problema și sunt realizate operațiile de citire și scriere în fișiere. În cazul în care citirea din fișierul de intrare sau scrierea în fișierul de ieșire nu poate fi efectuată, programul se termină.