0970 - Gen: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Enunt== 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:...
 
No edit summary
 
(4 intermediate revisions by one other user not shown)
Line 1: Line 1:
==Enunt==
==Enunț==
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:
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:


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.