3356 - Alfa: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 26: Line 26:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 3356 - Alfa
def validare(lungime_intrare1, numar_tinta1, lista_numere1):  # functia de validare a datelor de intrare
def validare(lungime_intrare1, numar_tinta1, lista_numere1):  # functia de validare a datelor de intrare
     if lungime_intrare1 > 1000 or lungime_intrare1 < 2:
     if lungime_intrare1 > 1000 or lungime_intrare1 < 2:
Line 55: Line 56:


if __name__ == '__main__':
if __name__ == '__main__':
     file_in = open("alfain.txt", "r")        # declararea fisierelor
     fisier_intrare = open("alfain.txt", "r")        # declararea fisierelor
     file_out = open("alfaout.txt", "w")      # fisierul out trebuie declarat cu optiunea "w" (write)
     fisier_iesire = open("alfaout.txt", "w")      # fisierul out trebuie declarat cu optiunea "w" (write)


     try:
     try:
         lungime_intrare, numar_tinta = map(int, file_in.readline().split())
         lungime_intrare, numar_tinta = map(int, fisier_intrare.readline().split())
         lista_numere = list(map(int, file_in.readline().split()))
         lista_numere = list(map(int, fisier_intrare.readline().split()))


         mesaj_validare = validare(lungime_intrare, numar_tinta, lista_numere)  # apelul functiei de validare
         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
         lista_numere = transforma_lista(lungime_intrare, numar_tinta, lista_numere)    # apelul functiei de rezolvare


         file_out.write(mesaj_validare + '\n')
         fisier_iesire.write(mesaj_validare + '\n')
         file_out.write(' '.join(map(str, lista_numere)) + '\n')
         fisier_iesire.write(' '.join(map(str, lista_numere)) + '\n')


     except ValueError:
     except ValueError:
         file_out.write("Datele de intrare nu corespund restrictiilor impuse")
         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>

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