2112 - Tablita

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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

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

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

Exemplu:

tablita.in

100

Iesire

Date de intrare valide

tablita.out

14

Explicație

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

Rezolvare

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

Explicatie cod:

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.