0970 - Gen: Difference between revisions
Vardai Erwin (talk | contribs) |
Cuceu Andrei (talk | contribs) 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 | |||
;'''Iesire ''' | ;'''Iesire ''' | ||
:Datele de intrare corespund restrictiilor impuse. | |||
:1111101000010 | |||
==Rezolvare== | ==Rezolvare== | ||
Line 47: | Line 43: | ||
def | def validate_input(n, k): | ||
if | 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 | |||
def generate_binary(n, k): | |||
binary = "23" | |||
for i in range(n): | for i in range(n): | ||
binary = binary.replace("2", "12").replace("3", "03") | |||
for i in range(k): | 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__': | if __name__ == '__main__': | ||
n, k = map(int, input().split()) | n, k = map(int, input().split()) | ||
if validate_input(n, k): | |||
if | print(generate_binary(n, k)) | ||
print( | |||
</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.