2283 - Caraghios: Difference between revisions
(2 intermediate revisions by one other user not shown) | |||
Line 11: | Line 11: | ||
==Date de ieșire== | ==Date de ieșire== | ||
Fișierul de ieșire caraghios.out va conține pe prima linie numărul de secvențe din S care au asociate numere caraghioase. | Fișierul de ieșire caraghios.out va conține pe prima linie numărul de secvențe din S care au asociate numere caraghioase. | ||
În acest caz, în consolă se va afișa un mesaj de validare a datelor "Input valid!". În caz contrar pe consolă se va afișa "Input invalid! Numărul de cifre trebuie să fie mai mic sau egal cu 1.000.000." | |||
==Restricții și precizări== | ==Restricții și precizări== | ||
* Șirul S va conține maxim 1.000.000 de cifre | * Șirul S va conține maxim 1.000.000 de cifre | ||
==Exemplu== | ==Exemplu== | ||
caraghios.in | ; caraghios.in | ||
: 28113 | |||
; caraghios.out | |||
caraghios.out | : 3 | ||
; Consolă | |||
: Input valid! | |||
==Explicație== | ==Explicație exemplu== | ||
Toate secvențele lui S sunt: 2, 28, 281, 2811, 28113, 8, 81, 811, 8113, 1, 11, 113, 1, 13, 3 | Toate secvențele lui S sunt: 2, 28, 281, 2811, 28113, 8, 81, 811, 8113, 1, 11, 113, 1, 13, 3 | ||
Există 3 secvențe care au asociate numere caraghioase: 81, 1, 1 | Există 3 secvențe care au asociate numere caraghioase: 81, 1, 1 | ||
: 81 = (8+1)*(8+1), 1 = 1*1, 1 = 1*1 | |||
==Rezolvare== | ==Rezolvare== | ||
Line 56: | Line 57: | ||
if __name__ == "__main__": | |||
input_file = "caraghios.in" | input_file = "caraghios.in" | ||
output_file = "caraghios.out" | output_file = "caraghios.out" | ||
Line 64: | Line 65: | ||
print("Input invalid! Numărul de cifre trebuie să fie mai mic sau egal cu 1.000.000.") | print("Input invalid! Numărul de cifre trebuie să fie mai mic sau egal cu 1.000.000.") | ||
return | return | ||
else: | |||
print("Input valid!") | |||
nr = count_caraghios(input_str) | nr = count_caraghios(input_str) | ||
with open(output_file, "w") as f: | with open(output_file, "w") as f: | ||
f.write(str(nr)) | f.write(str(nr)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 81: | Line 80: | ||
Funcția count_caraghios primește un șir de caractere input_str și calculează numărul de apariții a cifrei 1 în șir, respectând condiția specifică legată de cifra 8. | Funcția count_caraghios primește un șir de caractere input_str și calculează numărul de apariții a cifrei 1 în șir, respectând condiția specifică legată de cifra 8. | ||
În cadrul | În cadrul blocului main se deschide fișierul de intrare caraghios.in, se citește conținutul său într-un șir de caractere și se validează input-ul folosind funcția validate_input. Dacă input-ul este invalid, se afișează un mesaj corespunzător și programul se încheie. În caz contrar, se calculează numărul de apariții a cifrei 1 folosind funcția count_caraghios, iar rezultatul este scris în fișierul de ieșire caraghios.out. | ||
Latest revision as of 20:53, 4 May 2023
Se consideră un șir S de cifre nenule. O secvență a șirului S este o succesiune de cifre din S care apar pe poziții consecutive. Un număr n asociat unei secvențe din S este numărul în baza 10 care se formează cu toate cifrele din secvența respectivă, în ordinea în care apar în aceasta.
Un număr n se numește caraghios dacă este egal cu pătratul sumei cifrelor lui n.
Cerința[edit | edit source]
Dându-se un șir S de cifre nenule, să se determine câte dintre secvențele din S au numere asociate caraghioase.
Date de intrare[edit | edit source]
Fișierul de intrare caraghios.in conține pe prima linie șirul S de cifre nenule.
Date de ieșire[edit | edit source]
Fișierul de ieșire caraghios.out va conține pe prima linie numărul de secvențe din S care au asociate numere caraghioase. În acest caz, în consolă se va afișa un mesaj de validare a datelor "Input valid!". În caz contrar pe consolă se va afișa "Input invalid! Numărul de cifre trebuie să fie mai mic sau egal cu 1.000.000."
Restricții și precizări[edit | edit source]
- Șirul S va conține maxim 1.000.000 de cifre
Exemplu[edit | edit source]
- caraghios.in
- 28113
- caraghios.out
- 3
- Consolă
- Input valid!
Explicație exemplu[edit | edit source]
Toate secvențele lui S sunt: 2, 28, 281, 2811, 28113, 8, 81, 811, 8113, 1, 11, 113, 1, 13, 3 Există 3 secvențe care au asociate numere caraghioase: 81, 1, 1
- 81 = (8+1)*(8+1), 1 = 1*1, 1 = 1*1
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validate_input(input_str):
""" Verifică dacă input-ul are maxim 1.000.000 de cifre. :param input_str: șirul de caractere de verificat :return: True dacă input-ul este valid, False în caz contrar """ return len(input_str) <= 1000000
def count_caraghios(input_str):
""" Calculează numărul de apariții a cifrei 1 într-un șir dat. :param input_str: șirul de caractere de analizat :return: numărul de apariții a cifrei 1, conform cerințelor specifice """ nr = 0 x = input_str[0] if x == '1': nr += 1 for y in input_str[1:]: if y == '1': nr += 1 if x == '8': nr += 1 x = y return nr
if __name__ == "__main__":
input_file = "caraghios.in" output_file = "caraghios.out" with open(input_file, "r") as f: input_str = f.read().strip() if not validate_input(input_str): print("Input invalid! Numărul de cifre trebuie să fie mai mic sau egal cu 1.000.000.") return else: print("Input valid!") nr = count_caraghios(input_str) with open(output_file, "w") as f: f.write(str(nr))
</syntaxhighlight>
Explicație cod[edit | edit source]
În cadrul programului, se utilizează două funcții:
Funcția validate_input primește un șir de caractere input_str și returnează True dacă șirul are cel mult 1.000.000 de caractere.
Funcția count_caraghios primește un șir de caractere input_str și calculează numărul de apariții a cifrei 1 în șir, respectând condiția specifică legată de cifra 8.
În cadrul blocului main se deschide fișierul de intrare caraghios.in, se citește conținutul său într-un șir de caractere și se validează input-ul folosind funcția validate_input. Dacă input-ul este invalid, se afișează un mesaj corespunzător și programul se încheie. În caz contrar, se calculează numărul de apariții a cifrei 1 folosind funcția count_caraghios, iar rezultatul este scris în fișierul de ieșire caraghios.out.