3567 - Cod 24

From Bitnami MediaWiki

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>

  1. 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>