0578 - SecvEgale2: Difference between revisions
No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
== Date de ieșire == | == 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 == | == 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(" | print("Datele sunt introduse corect.") | ||
else: | else: | ||
print(" | 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>
- 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.