3567 - Cod 24: Difference between revisions
Line 56: | Line 56: | ||
=== Rezolvare ver. 2 === | === Rezolvare ver. 2 === | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# citim codul | # citim codul din fisierul de intrare | ||
with open("cod24.in") as f: | with open("cod24.in") as f: | ||
n = int(f.readline().strip()) | n = int(f.readline().strip()) |
Latest revision as of 09:20, 19 May 2023
Sursa: [1]
Cerinţa[edit | edit source]
Moș Crăciun are un seif în care ține miliardele de cadouri pregătite pentru copiii din lumea întreagă. Pentru a deschide seiful el trebuie să tasteze codul secret pe care doar el îl știe. Pentru o mai mare siguranță el schimbă codul în fiecare an. Codul este format din exact 4 cifre. Pentru a crea codul nou el crește cu 1 fiecare cifră din codul vechi și schimbă ultimele două cifre între ele. Dacă una dintre cifre este 9 și trebuie incrementată ea nu se modifică.
Date de intrare[edit | edit source]
Fișierul de intrare cod24.in conține pe prima linie numărul n, reprezentând codul de anul trecut.
Date de ieșire[edit | edit source]
Fișierul de ieșire cod24.out va conține pe prima linie codul de anul acesta.
Restricţii şi precizări[edit | edit source]
- 1000 ≤ n ≤9999
Exemplu[edit | edit source]
- cod24.in
- 9214
- cod24.out
- 9352
Explicație[edit | edit source]
Numărul are 4 cifre, unde doar la ultimele 3 cifre adunăm cu unu deoarece primul este 9 și obținem numărul 9325. După asta schimbăm ultimele 2 cifre și obținem numărul final pe care trebuie sa il afișăm 9352.
Rezolvare[edit | edit source]
Rezolvare ver. 1[edit | edit source]
<syntaxhighlight lang="python" line>
def incrementare_cifre(n):
return [(int(d) + 1) % 10 if d != '9' else 9 for d in str(n)]
def interschimbare_cifre(n):
n[-2], n[-1] = n[-1], n[-2] return n
def validare_interval(n):
return 1000 <= n <= 9999
if __name__ == "__main__":
with open("cod24.in") as f: n = int(f.readline().strip())
if not validare_interval(n): print("Numărul nu se încadrează în intervalul permis!") exit(1)
n = incrementare_cifre(n) n = interschimbare_cifre(n)
with open("cod24.out", "w") as f: f.write("".join(str(d) for d in n))
print("Datele au fost introduse corect.")
</syntaxhighlight>
Rezolvare ver. 2[edit | edit source]
<syntaxhighlight lang="python" line>
- citim codul din fisierul de intrare
with open("cod24.in") as f:
n = int(f.readline().strip()) if n < 1000 or n > 9999: print("Numarul nu se incadreaza in intervalul permis!") else: #continuam cu prelucrarea datelor # incrementam cifrele codului n = [(int(d) + 1) % 10 if d != '9' else 9 for d in str(n)]
# interschimbam ultimele doua cifre n[-2], n[-1] = n[-1], n[-2]
# scriem noul cod in fisierul de iesire with open("cod24.out", "w") as f: f.write("".join(str(d) for d in n)) print("Datele au fost introduse corect.")
</syntaxhighlight>