2112 - Tablita: Difference between revisions

From Bitnami MediaWiki
Paul Ungur (talk | contribs)
Pagină nouă: Adrian participă la o expediţie, împreună cu colegii lui. La un moment dat, copiii descoperă, lângă un copac, <span style=“color: red”> 5</span> tăbliţe vechi. Primele <span style=“color: red”> 4</span> tăbliţe sunt inscripţionate complet. Prima tăbliţă conţinea textul : “Grupa <span style=“color: red”> 1</span> conţine numărul <span style=“color: red”> 1</span>”, a doua tăbliţă avea textul : „Grupa <span style=“color: red”> 2</s...
 
Paul Ungur (talk | contribs)
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 8: Line 8:


==Date de ieșire==
==Date de ieșire==
Fişierul de ieşire tablita.out va conţine un număr natural ce reprezintă grupa în care se află numărul <span style=“color: red”> N</span>, înscris pe a cincea tabliţă găsită.
Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Date de intrare valide."''', apoi fişierul de ieşire tablita.out va conţine un număr natural ce reprezintă grupa în care se află numărul <span style=“color: red”> N</span>, înscris pe a cincea tabliţă găsită. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Date de intrare invalide".'''


==Restricții și precizări==
==Restricții și precizări==
Line 15: Line 15:
==Exemplu:==
==Exemplu:==
<span style=“color: red”> tablita.in</span>
<span style=“color: red”> tablita.in</span>
100
: 100


Iesire
: Date de intrare valide
<span style=“color: red”> tablita.out</span>
<span style=“color: red”> tablita.out</span>
14
: 14


==Explicație==
==Explicație==
Line 25: Line 27:
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def validate_input(input_data):
def validare(n):
     if not input_data.isdigit():
     if not (1 <= n <= 100_000_000):
         raise ValueError("Input must be a positive integer")
         return False
     return int(input_data)
     return True




def read_input(file_name):
def tablita(n):
     with open(file_name, 'r') as f:
     x, cnt = 1, 1
         return validate_input(f.readline().strip())
    while x < n:
         cnt += 1
        x += cnt


    with open("tablita.out", "w") as fout:
        fout.write(str(cnt))


def main():
    groups = [(1, [1]), (2, [2, 3]), (3, [4, 5, 6]), (4, [7, 8, 9, 10])]


     number = read_input("tablita.in")
if __name__ == '__main__':
     fin = open("tablita.in")
    fout = open("tablita.out", "w")


     for group in groups:
     n = int(fin.readline())
         if number in group[1]:
    if validare(n):
            with open("tablita.out", 'w') as f:
         print("Date de intrare valide")
                f.write(str(group[0]))
        tablita(n)
                break
    else:
        print("Date de intrare invalide")
 
    fin.close()
    fout.close()
</syntaxhighlight>
</syntaxhighlight>
 
==Explicatie cod:==
==Explicatie==
validare(n): Această funcție primește un număr întreg n și verifică dacă acesta se află în intervalul specificat, adică între 1 și 100.000.000. Dacă n nu se află în acest interval, funcția returnează False, altfel returnează True.
În funcția validate_input verificăm dacă datele de intrare sunt un număr întreg pozitiv și le convertim la un număr întreg.
tablita(n): Această funcție primește un număr întreg n și calculează valoarea cnt reprezentând numărul de iterații necesare pentru a ajunge la x >= n. Inițial, x este setat la 1 și cnt este setat la 1. Apoi, se crește cnt cu 1 și se adaugă valoarea cnt la x până când x devine mai mare sau egal cu n. La final, rezultatul cnt este scris în fișierul "tablita.out".
 
În blocul __main__, se deschide fișierul de intrare "tablita.in" pentru citire și fișierul de ieșire "tablita.out" pentru scriere. Se citește numărul n din fișierul de intrare și se validează folosind funcția validare(). Dacă n este valid, se afișează "Date de intrare valide" și se apelează funcția tablita(n) pentru a calcula rezultatul și a-l scrie în fișierul de ieșire. În caz contrar, se afișează "Date de intrare invalide". La final, fișierele de intrare și de ieșire sunt închise.
În funcția read_input citim datele din fișierul de intrare folosind funcția validate_input.
 
În funcția principală (main), definim grupurile și numerele corespunzătoare lor, citim numărul din fișierul de intrare folosind funcția read_input, apoi căutăm grupul care conține numărul și scriem numărul grupului în fișierul de ieșire.
 
În acest caz, vom avea un singur număr în fișierul de intrare, deci nu este nevoie să iterăm prin el. Dacă ar fi fost mai multe numere, am fi folosit un for loop pentru a itera prin ele și pentru a rezolva problema pentru fiecare număr.
 
Explicația pentru soluție este următoarea: citim numărul din fișierul de intrare și apoi căutăm grupul corespunzător în lista noastră de grupuri. Dacă găsim grupul care conține numărul, scriem numărul grupului în fișierul de ieșire și încheiem execuția programului.

Latest revision as of 19:10, 29 June 2023

Adrian participă la o expediţie, împreună cu colegii lui. La un moment dat, copiii descoperă, lângă un copac, 5 tăbliţe vechi. Primele 4 tăbliţe sunt inscripţionate complet. Prima tăbliţă conţinea textul : “Grupa 1 conţine numărul 1”, a doua tăbliţă avea textul : „Grupa 2 conţine numerele 2 şi 3”, a treia tăbliţă avea textul: „Grupa 3 contine numerele 4, 5 şi 6” , a patra tăbliţă avea textul: „Grupa 4 conţine numerele 7, 8, 9 şi 10.” Pe următoarea tăbliţă găsită era înscris un singur număr, celelalte numere şi numărul grupei erau şterse. Adrian le solicită colegilor lui să descopere ce grupă era scrisă pe a cincea tabliţă găsită.

Cerința[edit | edit source]

Descoperiţi regula de inscripţionare a tăbliţelor şi pentru numărul găsit pe a cincea tăbliţă, determinaţi din ce grupă face parte.

Date de intrare[edit | edit source]

Fişierul de intrare tablita.in conţine pe prima linie un număr natural N, ce reprezintă numărul care era înscris pe a cincea tăbliţă descoperită de Adrian.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi fişierul de ieşire tablita.out va conţine un număr natural ce reprezintă grupa în care se află numărul N, înscris pe a cincea tabliţă găsită. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".

Restricții și precizări[edit | edit source]

Un număr înscris pe o tăbliţă este nenul şi conţine cel mult 8 cifre;

Exemplu:[edit | edit source]

tablita.in

100

Iesire

Date de intrare valide

tablita.out

14

Explicație[edit | edit source]

Numărul 100 ce apare pe a cincea tăbliţă face parte din grupa 14.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare(n):

   if not (1 <= n <= 100_000_000):
       return False
   return True


def tablita(n):

   x, cnt = 1, 1
   while x < n:
       cnt += 1
       x += cnt
   with open("tablita.out", "w") as fout:
       fout.write(str(cnt))


if __name__ == '__main__':

   fin = open("tablita.in")
   fout = open("tablita.out", "w")
   n = int(fin.readline())
   if validare(n):
       print("Date de intrare valide")
       tablita(n)
   else:
       print("Date de intrare invalide")
   fin.close()
   fout.close()

</syntaxhighlight>

Explicatie cod:[edit | edit source]

validare(n): Această funcție primește un număr întreg n și verifică dacă acesta se află în intervalul specificat, adică între 1 și 100.000.000. Dacă n nu se află în acest interval, funcția returnează False, altfel returnează True. tablita(n): Această funcție primește un număr întreg n și calculează valoarea cnt reprezentând numărul de iterații necesare pentru a ajunge la x >= n. Inițial, x este setat la 1 și cnt este setat la 1. Apoi, se crește cnt cu 1 și se adaugă valoarea cnt la x până când x devine mai mare sau egal cu n. La final, rezultatul cnt este scris în fișierul "tablita.out". În blocul __main__, se deschide fișierul de intrare "tablita.in" pentru citire și fișierul de ieșire "tablita.out" pentru scriere. Se citește numărul n din fișierul de intrare și se validează folosind funcția validare(). Dacă n este valid, se afișează "Date de intrare valide" și se apelează funcția tablita(n) pentru a calcula rezultatul și a-l scrie în fișierul de ieșire. În caz contrar, se afișează "Date de intrare invalide". La final, fișierele de intrare și de ieșire sunt închise.