2283 - Caraghios: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Cata (talk | contribs)
No edit summary
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 consolă se va afișa un mesaj de validare a datelor.
==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
28113
; caraghios.out
caraghios.out
: 3
 
; Consolă
3
: Input valid!
==Explicație==
==Explicație==
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
Line 64: Line 64:
         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:

Revision as of 07:50, 28 April 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

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

Fișierul de intrare caraghios.in conține pe prima linie șirul S de cifre nenule.

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. În consolă se va afișa un mesaj de validare a datelor.

Restricții și precizări

  • Șirul S va conține maxim 1.000.000 de cifre

Exemplu

caraghios.in
28113
caraghios.out
3
Consolă
Input valid!

Explicație

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

<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


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


if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicație cod

Î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 funcției 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.

Sper că această descriere te ajută să înțelegi mai bine funcționarea programului.