0970 - Gen: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(3 intermediate revisions by one other user not shown)
Line 21: Line 21:


==Date de ieșire==
==Date de ieșire==
 
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse."
Programul va afișa pe ecran numărul cerut.
Programul va afișa pe ecran numărul cerut.
 
În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
 


==Restricții și precizări==
==Restricții și precizări==
Line 32: Line 31:
==Exemplul 1==
==Exemplul 1==
;'''Intrare  '''
;'''Intrare  '''
5 4
:5 4




;'''Iesire '''
;'''Iesire '''
 
:Datele de intrare corespund restrictiilor impuse.
1111101000010
:1111101000010
 
 
 


==Rezolvare==
==Rezolvare==
Line 47: Line 43:




def validare(n, k):
def validate_input(n, k):
     if not(1 <= n <= 1000000) or not(1 <= k <= 1000000):
     if n <= 0 or k <= 0 or n > 1000000 or k > 1000000:
        print("Datele de intrare nu corespund restricțiilor impuse.")
         return False
         return False
    print("Datele de intrare corespund restricțiilor impuse.")
     return True
     return True


def aplicare_reguli(n, k):
 
     # incepem cu numarul 23
def generate_binary(n, k):
    numar = '23'
     binary = "23"
    # aplicam regula 1 de n ori
     for i in range(n):
     for i in range(n):
         numar = numar.replace('2', '12').replace('3', '03')
         binary = binary.replace("2", "12").replace("3", "03")
    # aplicam regula 2 de k ori
     for i in range(k):
     for i in range(k):
         numar = numar.replace('2', '01').replace('3', '10')
         binary = binary.replace("2", "01").replace("3", "10")
     # aplicam regula 3 o singura data
     binary = binary.replace("2", "01")
    numar = numar.replace('2', '01')
     binary = binary.replace("3", "10")
     # aplicam regula 4 o singura data
     return binary
    numar = numar.replace('3', '10')
 
     # afisam numarul final in format binar
    return bin(int(numar))[2:].zfill(13)


if __name__ == '__main__':
if __name__ == '__main__':
    # citim n si k de la tastatura
     n, k = map(int, input().split())
     n, k = map(int, input().split())
    # validam datele de intrare
     if validate_input(n, k):
     if validare(n, k):
         print(generate_binary(n, k))
        # aplicam regulile si afisam rezultatul
         print(aplicare_reguli(n, k))
    else:
        print("Date de intrare invalide!")
 




</syntaxhighlight>
</syntaxhighlight>


==Explicatie==
==Explicatie==

Latest revision as of 19:45, 7 May 2023

Enunț[edit | edit source]

Pe planeta Marte, marţienii folosesc în calculele aritmetice doar cifrele 0, 1, 2 şi 3. Ei au inventat un nou sistem binar de numeraţie. Pornind de la numărul 23, ei generează numere binare speciale aplicând de un număr finit de ori regulile din tabelul de mai jos:

  • Cifra 2 se poate înlocui cu succesiunea: 12
  • Cifra 3 se poate înlocui cu succesiunea: 03
  • Cifra 2 se poate înlocui cu succesiunea: 01
  • Cifra 3 se poate înlocui cu succesiunea: 10

Marţienii au început să genereze un astfel de număr, aplicând succesiv (în această ordine): de n ori regula 1); de k ori regula 2); o singură dată regula 3) şi o singură dată regula 4). Nefiind atenţi, ei nu au reuşit să ducă la capăt generarea şi au nevoie de ajutor. Ajutaţi-i să genereze numărul binar dorit.

Cerință[edit | edit source]

Scrieţi un program care citeşte numerele naturale nenule n şi k şi care afişează numărul binar obţinut în urma aplicării succesive a regulilor cerute de marţieni.



Date de intrare[edit | edit source]

Programul citește de la tastatură numerele n k.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa pe ecran numărul cerut. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări[edit | edit source]

  • 0<n,k<=1000000, numere naturale

Exemplul 1[edit | edit source]

Intrare
5 4


Iesire
Datele de intrare corespund restrictiilor impuse.
1111101000010

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">


def validate_input(n, k):

   if n <= 0 or k <= 0 or n > 1000000 or k > 1000000:
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return False
   print("Datele de intrare corespund restricțiilor impuse.")
   return True


def generate_binary(n, k):

   binary = "23"
   for i in range(n):
       binary = binary.replace("2", "12").replace("3", "03")
   for i in range(k):
       binary = binary.replace("2", "01").replace("3", "10")
   binary = binary.replace("2", "01")
   binary = binary.replace("3", "10")
   return binary


if __name__ == '__main__':

   n, k = map(int, input().split())
   if validate_input(n, k):
       print(generate_binary(n, k))


</syntaxhighlight>

Explicatie[edit | edit source]

In acest cod, am definit functia aplicare_reguli care primeste ca parametri numerele n si k, si returneaza numarul binar obtinut in urma aplicarii regulilor cerute de martieni. In functia aplicare_reguli am definit un string numar initializat cu valoarea "23", si apoi am aplicat regulile in ordinea specificata in problema, folosind functia replace() pentru inlocuirea cifrelor 2 si 3 cu succesiunile corespunzatoare. La final, am convertit numarul in format binar cu ajutorul functiei bin() si am afisat rezultatul.

In main, am citit de la tastatura valorile pentru n si k, am validat datele de intrare folosind functia validare, si apoi am apelat functia aplicare_reguli si am afisat rezultatul.