3567 - Cod 24: Difference between revisions
Am creat de la zero. |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 23: | Line 23: | ||
== Rezolvare == | == Rezolvare == | ||
=== Rezolvare ver. 1 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# citim codul | 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 === | |||
<syntaxhighlight lang="python" line> | |||
# 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()) | ||
if n < 1000 or n > 9999: | if n < 1000 or n > 9999: | ||
print("Numarul nu se incadreaza in intervalul permis!") | print("Numarul nu se incadreaza in intervalul permis!") |
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>