1881 - Platou 4

De la Universitas MediaWiki

Sursă: [1]

Cerinţa

Se consideră un şir s format din numere întregi. Să se determine numărul de termeni ai şirului obţinut prin eliminarea din cele două extremităţi ale lui s a unui număr minim de termeni, astfel încât şirul rezultat să înceapă şi să se termine cu câte un număr par.

Date de intrare

Fișierul de intrare platou4.in conține numere întregi separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Fișierul de ieșire platou4.out va conține pe prima linie numărul k, reprezentând lungimea șirului obținut. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • fișierul de intrare conține cel mult 1000 de numere întregi
  • numerele din fișier de intrare vor fi din intervalul [-99,99]
  • fișierul de intrare conține cel puțin un număr par.

Exemple

Exemplu 1

platou4.in
7 -22 -13 10 31 41 -6 2 101 83
platou4.out
7

Explicatie

Sunt eliminate din șirul s numerele 7 101 83.

Rezolvare

def citeste_sir():
    while True:
        try:
            with open('platou4.in') as fin:
                n = int(fin.readline())
                a = [int(x) for x in fin.readline().split()]
                if len(a) == n and all(-99 <= x <= 99 for x in a):
                    print("Datele sunt corecte.")
                    return a
                else:
                    print("Datele nu sunt conform restricțiilor impuse.")
        except ValueError:
            print("Trebuie introduse doar numere întregi.")


def platou4():
    with open('platou4.in') as fin, open('platou4.out', 'w') as fout:
        a = list(map(int, fin.readline().split()))
        while a[0] % 2 != 0:
            a.pop(0)
        while a[-1] % 2 != 0:
            a.pop(-1)
        fout.write(str(len(a)) + '\n')


if _name_ == '_main_':
    platou4()

Explicații

Acest cod rezolvă problema de la cerința pentru șiruri de numere întregi din fișierul de intrare platou4.in.
Funcția citeste_sir() primește ca intrare un fișier text și returnează lista de numere întregi citite din fișier, după ce a verificat dacă sunt conform restricțiilor impuse.
Funcția platou4() deschide fișierul de intrare și fișierul de ieșire și citește prima linie din fișierul de intrare, care conține numărul de elemente din șir. Acest număr nu este folosit în restul codului. În continuare, se citește linia cu numerele întregi și se creează o listă a prin aplicarea funcției map(int, fin.readline().split()).
Se elimină elementele de la începutul listei a care nu sunt numere pare prin parcurgerea listei și eliminarea elementelor până când primul element rămas este un număr par. Se elimină și elementele de la finalul listei a care nu sunt numere pare prin parcurgerea listei în ordine inversă și eliminarea elementelor până când ultimul element rămas este un număr par.
Se scrie în fișierul de ieșire lungimea listei a rămase după eliminarea elementelor nedorite, adică numărul de termeni ai șirului obținut prin eliminarea din cele două extremități ale lui s a unui număr minim de termeni, astfel încât șirul rezultat să înceapă și să se termine cu câte un număr par.