0578 - SecvEgale2: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
No edit summary
Flaviu (talk | contribs)
No edit summary
Line 8: Line 8:


== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran numărul C, reprezentând valoarea cerută.
Dacă datele sunt introduse corect, pe ecran se va afișa:
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''numărul c''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Line 18: Line 19:
: 4 3 3 3 5
: 4 3 3 3 5
; Ieșire
; Ieșire
: Datele nu corespund restricțiilor impuse.
: 8
: 8


Line 57: Line 59:
     expected = int(input())
     expected = int(input())
     if validate_output(expected, result):
     if validate_output(expected, result):
         print("Corect")
         print("Datele sunt introduse corect.")
     else:
     else:
         print("Incorect")
         print("Datele nu corespund restricțiilor impuse.")
    if validate_output(expected, result):
        print("Raspunsul este: ", result)
 




</syntaxhighlight>
</syntaxhighlight>
== Explicatie Rezolvare ==
read_input(): Aceasta functie citeste de la tastatura numarul de elemente al listei si apoi elementele listei, separate prin spatii. Aceasta returneaza lista citita.
count_equal_sequences(v): Aceasta functie primeste o lista v ca si argument si calculeaza numarul de secvente consecutive formate din cel putin doua elemente egale. Pentru asta, parcurgem lista si incrementam un contor atunci cand gasim o secventa valida.
validate_output(expected, actual): Aceasta functie primeste doua argumente: valoarea asteptata (expected) si valoarea reala (actual) a rezultatului. Aceasta verifica daca cele doua valori sunt egale si returneaza True daca da si False altfel.
In ceea ce priveste blocul if __name__ == '__main__':, acesta verifica daca programul este executat ca si script (adica nu este importat ca modul) si, in caz afirmativ, citeste datele de intrare, apeleaza functia count_equal_sequences() cu aceste date, citeste rezultatul asteptat de la tastatura, si verifica daca rezultatul real si cel asteptat sunt egale cu ajutorul functiei validate_output(). In functie de rezultatul acestei verificari, este afisat un mesaj corespunzator.

Revision as of 18:14, 27 April 2023

Sursa: 0578 - SecvEgale2


Cerinţa

Se dă un vector cu n elemente, numere naturale. Determinați câte secvențe ale vectorului au toate elementele egale.

Date de intrare

Programul citește de la tastatură numărul n, apoi cele n elemente ale vectorului.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou numărul c, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 100.000
  • elementele vectorului vor fi mai mici decât 1.000.000.000

Exemplu

Intrare
5
4 3 3 3 5
Ieșire
Datele nu corespund restricțiilor impuse.
8

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 0578 - SecvEgale2

def read_input():

   n = int(input())
   v = list(map(int, input().split()))
   return v

def count_equal_sequences(v):

   cnt = 0
   last = None
   seq_len = 0
   
   for i in range(len(v)):
       if v[i] != last:
           if seq_len >= 2:
               cnt += 1
           seq_len = 1
           last = v[i]
       else:
           seq_len += 1
           
   if seq_len >= 2:
       cnt += 1
       
   return cnt

def validate_output(expected, actual):

   return expected == actual

if __name__ == '__main__':

   v = read_input()
   result = count_equal_sequences(v)
   expected = int(input())
   if validate_output(expected, result):
       print("Datele sunt introduse corect.")
   else:
       print("Datele nu corespund restricțiilor impuse.")
   if validate_output(expected, result):
       print("Raspunsul este: ", result)


</syntaxhighlight>

Explicatie Rezolvare

read_input(): Aceasta functie citeste de la tastatura numarul de elemente al listei si apoi elementele listei, separate prin spatii. Aceasta returneaza lista citita.

count_equal_sequences(v): Aceasta functie primeste o lista v ca si argument si calculeaza numarul de secvente consecutive formate din cel putin doua elemente egale. Pentru asta, parcurgem lista si incrementam un contor atunci cand gasim o secventa valida.

validate_output(expected, actual): Aceasta functie primeste doua argumente: valoarea asteptata (expected) si valoarea reala (actual) a rezultatului. Aceasta verifica daca cele doua valori sunt egale si returneaza True daca da si False altfel.

In ceea ce priveste blocul if __name__ == '__main__':, acesta verifica daca programul este executat ca si script (adica nu este importat ca modul) si, in caz afirmativ, citeste datele de intrare, apeleaza functia count_equal_sequences() cu aceste date, citeste rezultatul asteptat de la tastatura, si verifica daca rezultatul real si cel asteptat sunt egale cu ajutorul functiei validate_output(). In functie de rezultatul acestei verificari, este afisat un mesaj corespunzator.