3567 - Cod 24: Difference between revisions

From Bitnami MediaWiki
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 de anul trecut din fisierul de intrare
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>

  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>