3356 - Alfa: Difference between revisions
No edit summary |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
* Secvențele de elemente diferile de '''x''' aflate între două poziții cu valoarea '''x''' se ordonează crescător (între aceleași două elemente cu valoarea '''x''' se vor afla aceleași elemente ca la început dar în ordine crescătoare). | * Secvențele de elemente diferile de '''x''' aflate între două poziții cu valoarea '''x''' se ordonează crescător (între aceleași două elemente cu valoarea '''x''' se vor afla aceleași elemente ca la început dar în ordine crescătoare). | ||
== Date de intrare == | == Date de intrare == | ||
Fișierul ''' | Fișierul '''alfain.txt''' conține pe prima linie un număr natural '''n''' reprezentând dimensiunea șirului și un număr '''x''' cu semnificația de mai sus. Pe linia a doua '''n''' numere naturale, separate prin câte un spațiu, reprezentând elementele șirului. | ||
== Date de ieşire == | == Date de ieşire == | ||
Fișierul ''' | Fișierul '''alfaout.txt''' conține cele '''n''' elemente ale șirului în ordinea cerută. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* '''2 <= n <= 1000''' | * '''2 <= n <= 1000''' | ||
* Elementele șirului dat sunt naturale nenule formate din maximum '''4''' cifre | * Elementele șirului dat sunt naturale nenule formate din maximum '''4''' cifre | ||
* Pentru '''40''' de puncte șirul conține doar două elemente cu valoarea '''x''' (primul și ultimul). | * Pentru '''40''' de puncte șirul conține doar două elemente cu valoarea '''x''' (primul și ultimul). | ||
== | == Exemplul 1 == | ||
; | ; alfain.txt | ||
: 10 3 | : 10 3 | ||
: 3 4 1 2 3 7 9 8 3 3 | : 3 4 1 2 3 7 9 8 3 3 | ||
; | ; alfaout.txt | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 3 1 2 4 3 7 8 9 3 3 | : 3 1 2 4 3 7 8 9 3 3 | ||
== Exemplul 2 == | |||
; alfain.txt | |||
: 1 3 | |||
: 3 4 1 2 3 7 9 8 3 3 | |||
; alfaout.txt | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | # 3356 - Alfa | ||
def validare(lungime_intrare1, numar_tinta1, lista_numere1): # functia de validare a datelor de intrare | |||
if lungime_intrare1 > 1000 or lungime_intrare1 < 2: | |||
raise ValueError | |||
if len(lista_numere1) != lungime_intrare1: | |||
raise ValueError | |||
if lista_numere1[0] != numar_tinta1 or lista_numere1[-1] != numar_tinta1: | |||
raise ValueError | |||
for numar in lista_numere1: | |||
if not (0 < numar < 10000): | |||
raise ValueError | |||
return "Datele de intrare corespund restrictiilor impuse." | |||
def transforma_lista(lungime_intrare1, numar_tinta1, lista_numere1): | |||
i = 0 | i = 0 | ||
while i < lungime_intrare1: | |||
while i < | if lista_numere1[i] == numar_tinta1: | ||
if | |||
j = i + 1 | j = i + 1 | ||
while j < | while j < lungime_intrare1 and lista_numere1[j] != numar_tinta1: | ||
j += 1 | j += 1 | ||
if j < lungime_intrare1: | |||
if j < | lista_numere1[i + 1:j] = sorted(lista_numere1[i + 1:j]) | ||
i = j | i = j | ||
else: | else: | ||
i += 1 | i += 1 | ||
# | return lista_numere1 | ||
if __name__ == '__main__': | |||
fisier_intrare = open("alfain.txt", "r") # declararea fisierelor | |||
fisier_iesire = open("alfaout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write) | |||
try: | |||
lungime_intrare, numar_tinta = map(int, fisier_intrare.readline().split()) | |||
lista_numere = list(map(int, fisier_intrare.readline().split())) | |||
mesaj_validare = validare(lungime_intrare, numar_tinta, lista_numere) # apelul functiei de validare | |||
lista_numere = transforma_lista(lungime_intrare, numar_tinta, lista_numere) # apelul functiei de rezolvare | |||
fisier_iesire.write(mesaj_validare + '\n') | |||
fisier_iesire.write(' '.join(map(str, lista_numere)) + '\n') | |||
except ValueError: | |||
fisier_iesire.write("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 20:36, 19 November 2023
Cerinţa[edit | edit source]
Se dă un șir format din n numere naturale. Se mai dă o valoare x și se garantează că șirul începe și se termină cu valoarea x. Transformați șirul astfel:
- Elementele cu valoarea x rămân pe pozițiile lor;
- Secvențele de elemente diferile de x aflate între două poziții cu valoarea x se ordonează crescător (între aceleași două elemente cu valoarea x se vor afla aceleași elemente ca la început dar în ordine crescătoare).
Date de intrare[edit | edit source]
Fișierul alfain.txt conține pe prima linie un număr natural n reprezentând dimensiunea șirului și un număr x cu semnificația de mai sus. Pe linia a doua n numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.
Date de ieşire[edit | edit source]
Fișierul alfaout.txt conține cele n elemente ale șirului în ordinea cerută.
Restricții și precizări[edit | edit source]
- 2 <= n <= 1000
- Elementele șirului dat sunt naturale nenule formate din maximum 4 cifre
- Pentru 40 de puncte șirul conține doar două elemente cu valoarea x (primul și ultimul).
Exemplul 1[edit | edit source]
- alfain.txt
- 10 3
- 3 4 1 2 3 7 9 8 3 3
- alfaout.txt
- Datele introduse corespund restricțiilor impuse.
- 3 1 2 4 3 7 8 9 3 3
Exemplul 2[edit | edit source]
- alfain.txt
- 1 3
- 3 4 1 2 3 7 9 8 3 3
- alfaout.txt
- Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3356 - Alfa
def validare(lungime_intrare1, numar_tinta1, lista_numere1): # functia de validare a datelor de intrare
if lungime_intrare1 > 1000 or lungime_intrare1 < 2: raise ValueError if len(lista_numere1) != lungime_intrare1: raise ValueError if lista_numere1[0] != numar_tinta1 or lista_numere1[-1] != numar_tinta1: raise ValueError for numar in lista_numere1: if not (0 < numar < 10000): raise ValueError return "Datele de intrare corespund restrictiilor impuse."
def transforma_lista(lungime_intrare1, numar_tinta1, lista_numere1):
i = 0 while i < lungime_intrare1: if lista_numere1[i] == numar_tinta1: j = i + 1 while j < lungime_intrare1 and lista_numere1[j] != numar_tinta1: j += 1 if j < lungime_intrare1: lista_numere1[i + 1:j] = sorted(lista_numere1[i + 1:j]) i = j else: i += 1 return lista_numere1
if __name__ == '__main__':
fisier_intrare = open("alfain.txt", "r") # declararea fisierelor fisier_iesire = open("alfaout.txt", "w") # fisierul out trebuie declarat cu optiunea "w" (write)
try: lungime_intrare, numar_tinta = map(int, fisier_intrare.readline().split()) lista_numere = list(map(int, fisier_intrare.readline().split()))
mesaj_validare = validare(lungime_intrare, numar_tinta, lista_numere) # apelul functiei de validare lista_numere = transforma_lista(lungime_intrare, numar_tinta, lista_numere) # apelul functiei de rezolvare
fisier_iesire.write(mesaj_validare + '\n') fisier_iesire.write(' '.join(map(str, lista_numere)) + '\n')
except ValueError: fisier_iesire.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>