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
Line 25: Line 25:
==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==
Î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.
Î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.

Revision as of 16:22, 26 April 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

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

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

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ă.

Restricții și precizări

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

Exemplu:

tablita.in 100

tablita.out 14

Explicație

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

Rezolvare

<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>