2112 - Tablita
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 validate_input(input_data):
if not input_data.isdigit(): raise ValueError("Input must be a positive integer") return int(input_data)
def read_input(file_name):
with open(file_name, 'r') as f: return validate_input(f.readline().strip())
def main():
groups = [(1, [1]), (2, [2, 3]), (3, [4, 5, 6]), (4, [7, 8, 9, 10])]
number = read_input("tablita.in")
for group in groups: if number in group[1]: with open("tablita.out", 'w') as f: f.write(str(group[0])) break
</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.