<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AntalKrisztian</id>
	<title>Bitnami MediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AntalKrisztian"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/AntalKrisztian"/>
	<updated>2026-06-17T17:22:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=16402&amp;diff=10415</id>
		<title>16402</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=16402&amp;diff=10415"/>
		<updated>2024-12-11T10:18:37Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;16402 (Cristina Vijdeluc, Salonic și Mihai Vijdeluc, Baia Mare)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Fie &amp;lt;math&amp;gt;n \in \mathbb{N}^*&amp;lt;/math&amp;gt; și numerele pozitive &amp;lt;math&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/math&amp;gt; care verifică relația   &amp;lt;math&amp;gt;\frac{1}{x_1} + \frac{1}{x_2} + \dots + \frac{1}{x_n} = \frac{n}{n+1}.&amp;lt;/math&amp;gt;    Arătați că    &amp;lt;math&amp;gt;\frac{1}{x_1 + 2} + \frac{1}{x_2 + 6} + \dots + \frac{1}{x_n + n(n+1)} \leq \frac{n}{2(n+1)}.&amp;lt;/math&amp;gt;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție:&amp;#039;&amp;#039;&amp;#039;  Din inegalitatea mediilor armonică și aritmetică,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;16402 (Cristina Vijdeluc, Salonic și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fie &amp;lt;math&amp;gt;n \in \mathbb{N}^*&amp;lt;/math&amp;gt; și numerele pozitive &amp;lt;math&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/math&amp;gt; care verifică relația&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{x_1} + \frac{1}{x_2} + \dots + \frac{1}{x_n} = \frac{n}{n+1}.&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Arătați că &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{x_1 + 2} + \frac{1}{x_2 + 6} + \dots + \frac{1}{x_n + n(n+1)} \leq \frac{n}{2(n+1)}.&amp;lt;/math&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Din inegalitatea mediilor armonică și aritmetică,  &lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{a+b} \leq \frac{1}{4}\left(\frac{1}{a} + \frac{1}{b}\right),&amp;lt;/math&amp;gt;  &lt;br /&gt;
pentru oricare &amp;lt;math&amp;gt;a, b &amp;gt; 0.&amp;lt;/math&amp;gt; Aplicând succesiv această inegalitate obținem  &lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{x_1 + 2} + \frac{1}{x_2 + 6} + \dots + \frac{1}{x_n + n(n+1)} \leq  &lt;br /&gt;
\frac{1}{4} \left( \frac{1}{x_1} + \frac{1}{x_2} + \dots + \frac{1}{x_n} +  &lt;br /&gt;
\frac{1}{1 \cdot 2} + \frac{1}{2 \cdot 3} + \dots + \frac{1}{n(n+1)} \right) =&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{4} \left( \frac{n}{n+1} + 1 - \frac{1}{2} + \frac{1}{2} - \frac{1}{3} + \dots + \frac{1}{n} - \frac{1}{n+1} \right) =  &lt;br /&gt;
\frac{n}{2(n+1)}.&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=16393&amp;diff=10407</id>
		<title>16393</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=16393&amp;diff=10407"/>
		<updated>2024-12-11T10:01:47Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;16393 (Cristina Vijdeluc și Mihai Vijdeluc)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Determinați numerele naturale nenule &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; pentru care numărul &amp;lt;math&amp;gt;a(n) = \sqrt{(1 \cdot 2 \cdot 3 \cdots n)^5 + 145}&amp;lt;/math&amp;gt; este natural.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție:&amp;#039;&amp;#039;&amp;#039;  Calculând valorile lui &amp;lt;math&amp;gt;a(n)&amp;lt;/math&amp;gt; pentru &amp;lt;math&amp;gt;n \in \{1, 2, 3, 4\},&amp;lt;/math&amp;gt; găsim că doar pentru &amp;lt;math&amp;gt;n = 3,&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;a(n) = 89&amp;lt;/math&amp;gt; verifică cerința.    Pentru &amp;lt;math&amp;gt;n \geq 5,&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(1 \cdot 2 \cdot 3 \cdots n)^5 + 145&amp;lt;/ma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;16393 (Cristina Vijdeluc și Mihai Vijdeluc)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele naturale nenule &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; pentru care numărul &amp;lt;math&amp;gt;a(n) = \sqrt{(1 \cdot 2 \cdot 3 \cdots n)^5 + 145}&amp;lt;/math&amp;gt; este natural.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Calculând valorile lui &amp;lt;math&amp;gt;a(n)&amp;lt;/math&amp;gt; pentru &amp;lt;math&amp;gt;n \in \{1, 2, 3, 4\},&amp;lt;/math&amp;gt; găsim că doar pentru &amp;lt;math&amp;gt;n = 3,&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;a(n) = 89&amp;lt;/math&amp;gt; verifică cerința.  &lt;br /&gt;
&lt;br /&gt;
Pentru &amp;lt;math&amp;gt;n \geq 5,&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(1 \cdot 2 \cdot 3 \cdots n)^5 + 145&amp;lt;/math&amp;gt; este divizibil cu &amp;lt;math&amp;gt;5,&amp;lt;/math&amp;gt; dar nu este divizibil cu &amp;lt;math&amp;gt;25,&amp;lt;/math&amp;gt; deci nu este pătrat perfect.&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0472_-_Bipartit_1&amp;diff=8696</id>
		<title>0472 - Bipartit 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0472_-_Bipartit_1&amp;diff=8696"/>
		<updated>2023-12-29T18:44:18Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; vârfuri, etichetate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Să se verifice dacă graful este bipartit. == Date de intrare == Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;bipartit1in.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale grafului și numărul de muchii. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; linii conține câte o pereche de numere &amp;#039;&amp;#039;&amp;#039;i j&amp;#039;&amp;#039;&amp;#039;, cu semnificația că există muchie înt...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă lista muchiilor unui graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri, etichetate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Să se verifice dacă graful este bipartit.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;bipartit1in.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;, reprezentând numărul de vârfuri ale grafului și numărul de muchii. Fiecare dintre următoarele &#039;&#039;&#039;m&#039;&#039;&#039; linii conține câte o pereche de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie între &#039;&#039;&#039;i&#039;&#039;&#039; și &#039;&#039;&#039;j&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;bipartit1out.txt&#039;&#039;&#039; va conţine pe prima linie mesajul &#039;&#039;&#039;DA&#039;&#039;&#039;, dacă graful este bipartit, respectiv &#039;&#039;&#039;NU&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Dacă mesajul este &#039;&#039;&#039;DA&#039;&#039;&#039;, următoarele două linii vor conţine două mulţimi care formează partiţia vârfurilor. Elementele fiecărei mulţimi vor fi afişate în ordine crescătoare, separate prin exact un spaţiu. Prima mulţime va fi cea care conţine vârful &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt; n &amp;amp;les; 15&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; i , j &amp;amp;les; n&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; bipartit1in.txt&lt;br /&gt;
 7 6&lt;br /&gt;
 1 4&lt;br /&gt;
 1 6&lt;br /&gt;
 6 5&lt;br /&gt;
 3 2&lt;br /&gt;
 3 5&lt;br /&gt;
 3 7&lt;br /&gt;
; bipartit1out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 DA&lt;br /&gt;
 1 2 5 7 &lt;br /&gt;
 3 4 6 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; bipartit1in.txt&lt;br /&gt;
 ijtijgijrigmfg&lt;br /&gt;
; bipartit1out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, muchii_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-15&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 15:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-15&lt;br /&gt;
    for muchie in muchii_validare:  # Parcurgem lista de muchii&lt;br /&gt;
        # Verificăm dacă valoarea absolută a fiecărui vârf este în intervalul 1-n&lt;br /&gt;
        if abs(muchie[0]) &amp;lt; 1 or abs(muchie[0]) &amp;gt; n_validare or abs(muchie[1]) &amp;lt; 1 or abs(muchie[1]) &amp;gt; n_validare:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția este_bipartit verifică dacă graful este bipartit&lt;br /&gt;
def este_bipartit(n_bipartit, muchii_bipartit):&lt;br /&gt;
    # Inițializăm culorile vârfurilor cu -1&lt;br /&gt;
    culoare_bipartit = [-1] * (n_bipartit + 1)&lt;br /&gt;
    # Construim lista de adiacență a grafului&lt;br /&gt;
    lista_adiacenta = [[] for _ in range(n_bipartit + 1)]&lt;br /&gt;
    for muchie in muchii_bipartit:&lt;br /&gt;
        lista_adiacenta[muchie[0]].append(muchie[1])&lt;br /&gt;
        lista_adiacenta[muchie[1]].append(muchie[0])&lt;br /&gt;
    # Parcurgem vârfurile grafului&lt;br /&gt;
    for i in range(1, n_bipartit + 1):&lt;br /&gt;
        # Dacă vârful nu a fost colorat și nu poate fi colorat, atunci graful nu este bipartit&lt;br /&gt;
        if culoare_bipartit[i] == -1 and not colorare(i, 1, culoare_bipartit, lista_adiacenta):&lt;br /&gt;
            return False, culoare_bipartit&lt;br /&gt;
    return True, culoare_bipartit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția colorare încearcă să coloreze vârfurile grafului astfel încât să fie bipartit&lt;br /&gt;
def colorare(v, c, culoare_color, lista_adiacenta):&lt;br /&gt;
    # Colorăm vârful v cu culoarea c&lt;br /&gt;
    culoare_color[v] = c&lt;br /&gt;
    # Parcurgem vecinii vârfului v&lt;br /&gt;
    for u in lista_adiacenta[v]:&lt;br /&gt;
        # Dacă vecinul u are aceeași culoare cu v, atunci graful nu poate fi bipartit&lt;br /&gt;
        if culoare_color[u] == c:&lt;br /&gt;
            return False&lt;br /&gt;
        # Dacă vecinul u nu a fost colorat și nu poate fi colorat, atunci graful nu poate fi bipartit&lt;br /&gt;
        if culoare_color[u] == -1 and not colorare(u, 1 - c, culoare_color, lista_adiacenta):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bipartit1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bipartit1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de vârfuri și de muchii&lt;br /&gt;
        n_main, m_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim muchiile&lt;br /&gt;
        muchii_main = [list(map(int, linie.split())) for linie in file_in.readlines()]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, muchii_main)&lt;br /&gt;
        # Verificăm dacă graful este bipartit&lt;br /&gt;
        bipartit, culoare = este_bipartit(n_main, muchii_main)&lt;br /&gt;
        if bipartit:&lt;br /&gt;
            file_out.write(&amp;quot;DA\n&amp;quot;)&lt;br /&gt;
            # Construim listele de vârfuri pentru cele două mulțimi&lt;br /&gt;
            lista1 = [i for i in range(1, n_main + 1) if culoare[i] == 1]&lt;br /&gt;
            lista2 = [i for i in range(1, n_main + 1) if culoare[i] == 0]&lt;br /&gt;
            file_out.write(&#039; &#039;.join(map(str, lista1)) + &#039;\n&#039;)&lt;br /&gt;
            file_out.write(&#039; &#039;.join(map(str, lista2)) + &#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            file_out.write(&amp;quot;NU\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0422_-_Graf_Partial_2&amp;diff=8694</id>
		<title>0422 - Graf Partial 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0422_-_Graf_Partial_2&amp;diff=8694"/>
		<updated>2023-12-29T18:31:43Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; vârfuri, etichetate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Din acest graf se elimină toate muchiile cu o extremitate într-un vârf de grad maxim. Să se determine numărul de muchii eliminate și să se afișeze matricea de adiacență a grafului parțial obținut. == Date de intrare == Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;graf_partial_2in.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale gra...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă lista muchiilor unui graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri, etichetate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Din acest graf se elimină toate muchiile cu o extremitate într-un vârf de grad maxim. Să se determine numărul de muchii eliminate și să se afișeze matricea de adiacență a grafului parțial obținut.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;graf_partial_2in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie între &#039;&#039;&#039;i&#039;&#039;&#039; și &#039;&#039;&#039;j&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;graf_partial_2out.txt&#039;&#039;&#039; va conţine pe prime linie numărul de muchii eliminate, iar pe următoarele linii matricea de adiacență a grafului parțial obținut, câte o linie a matricei pe o linie a fișierului, elementele de pe fiecare linie fiind separate prin exact un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; i , j &amp;amp;les; n&#039;&#039;&#039;&lt;br /&gt;
* muchiile se pot repeta în fișierul de intrare&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; graf_partial_2in.txt&lt;br /&gt;
 6&lt;br /&gt;
 1 2&lt;br /&gt;
 6 2&lt;br /&gt;
 2 3&lt;br /&gt;
 4 3&lt;br /&gt;
 5 3&lt;br /&gt;
 4 5&lt;br /&gt;
 3 6&lt;br /&gt;
 6 4&lt;br /&gt;
; graf_partial_2out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 4&lt;br /&gt;
 0 1 0 0 0 0 &lt;br /&gt;
 1 0 0 0 0 1 &lt;br /&gt;
 0 0 0 0 0 0 &lt;br /&gt;
 0 0 0 0 1 1 &lt;br /&gt;
 0 0 0 1 0 0 &lt;br /&gt;
 0 1 0 1 0 0 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se elimină muchiile &#039;&#039;&#039;(2 3), (4 3), (5 3), (3 6)&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; graf_partial_2in.txt&lt;br /&gt;
 jgirjiurmgrog&lt;br /&gt;
; graf_partial_2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, muchii_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-100&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-100&lt;br /&gt;
    for muchie_validare in muchii_validare:    # Parcurgem lista de muchii&lt;br /&gt;
        # Verificăm dacă valoarea absolută a fiecărui vârf este în intervalul 1-n&lt;br /&gt;
        if (abs(muchie_validare[0]) &amp;lt; 1 or abs(muchie_validare[0]) &amp;gt; n_validare &lt;br /&gt;
                or abs(muchie_validare[1]) &amp;lt; 1 or abs(muchie_validare[1]) &amp;gt; n_validare):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția elimina_muchii elimină muchiile cu o extremitate într-un vârf de grad maxim&lt;br /&gt;
def elimina_muchii(n_elimina, muchii_elimina):&lt;br /&gt;
    # Calculăm gradele vârfurilor&lt;br /&gt;
    grade = [0] * (n_elimina + 1)&lt;br /&gt;
    for muchie_eliminare in muchii_elimina:&lt;br /&gt;
        grade[muchie_eliminare[0]] += 1&lt;br /&gt;
        grade[muchie_eliminare[1]] += 1&lt;br /&gt;
    # Determinăm gradul maxim&lt;br /&gt;
    grad_max = max(grade)&lt;br /&gt;
    # Eliminăm muchiile cu o extremitate într-un vârf de grad maxim&lt;br /&gt;
    muchii_eliminate_ = 0&lt;br /&gt;
    muchii_noi_creat = []&lt;br /&gt;
    for muchie_eliminare in muchii_elimina:&lt;br /&gt;
        if grade[muchie_eliminare[0]] == grad_max or grade[muchie_eliminare[1]] == grad_max:&lt;br /&gt;
            muchii_eliminate_ += 1&lt;br /&gt;
        else:&lt;br /&gt;
            muchii_noi_creat.append(muchie_eliminare)&lt;br /&gt;
    return muchii_eliminate_, muchii_noi_creat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;graf_partial_2in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;graf_partial_2out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de vârfuri&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim muchiile&lt;br /&gt;
        muchii_main = [list(map(int, linie.split())) for linie in file_in.readlines()]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, muchii_main)&lt;br /&gt;
        # Eliminăm muchiile cu o extremitate într-un vârf de grad maxim&lt;br /&gt;
        muchii_eliminate, muchii_noi = elimina_muchii(n_main, muchii_main)&lt;br /&gt;
        # Scriem numărul de muchii eliminate în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(muchii_eliminate) + &#039;\n&#039;)&lt;br /&gt;
        # Scriem matricea de adiacență a grafului parțial obținut în fișierul de ieșire&lt;br /&gt;
        matrice_adiacenta = [[0] * n_main for _ in range(n_main)]&lt;br /&gt;
        for muchie in muchii_noi:&lt;br /&gt;
            matrice_adiacenta[muchie[0]-1][muchie[1]-1] = 1&lt;br /&gt;
            matrice_adiacenta[muchie[1]-1][muchie[0]-1] = 1&lt;br /&gt;
        for linie in matrice_adiacenta:&lt;br /&gt;
            file_out.write(&#039; &#039;.join(map(str, linie)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0353_-_Spectacole&amp;diff=8692</id>
		<title>0353 - Spectacole</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0353_-_Spectacole&amp;diff=8692"/>
		<updated>2023-12-29T18:01:46Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == La un festival sunt programate &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; spectacole. Pentru fiecare se cunoaște momentul de început și momentul de sfârșit, exprimate prin numere naturale. Un spectator dorește să urmărească cât mai multe spectacole în întregime.  Determinați numărul maxim de spectacole care pot fi urmărite, fără ca acestea să se suprapună. == Date de intrare == Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;spectacolein.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Pe fiecare din...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
La un festival sunt programate &#039;&#039;&#039;n&#039;&#039;&#039; spectacole. Pentru fiecare se cunoaște momentul de început și momentul de sfârșit, exprimate prin numere naturale. Un spectator dorește să urmărească cât mai multe spectacole în întregime.&lt;br /&gt;
&lt;br /&gt;
Determinați numărul maxim de spectacole care pot fi urmărite, fără ca acestea să se suprapună.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;spectacolein.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Pe fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se află câte două numere naturale &#039;&#039;&#039;X Y&#039;&#039;&#039;, reprezentând momentul de început și momentul de sfârșit al unui spectacol.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;spectacoleout.txt&#039;&#039;&#039; va conţine pe prima linie numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând numărul maxim de spectacole care pot fi urmărite, fără să se suprapună.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
* momentele de început și sfârșit ale spectacolelor sunt numere naturale mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
* pentru fiecare spectacol, &#039;&#039;&#039;X &amp;lt; Y&#039;&#039;&#039;&lt;br /&gt;
* dacă momentul de început al unui spectacol și momentul de sfârșit al altui spectacol coincid, pot fi urmărite ambele spectacole&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; spectacolein.txt&lt;br /&gt;
 10&lt;br /&gt;
 5 14&lt;br /&gt;
 14 17&lt;br /&gt;
 8 13&lt;br /&gt;
 13 15&lt;br /&gt;
 15 17&lt;br /&gt;
 3 6&lt;br /&gt;
 4 7&lt;br /&gt;
 6 9&lt;br /&gt;
 11 14&lt;br /&gt;
 10 11&lt;br /&gt;
; spectacoleout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pot fi alese, de exemplu, spectacolele: &#039;&#039;&#039;3 6&#039;&#039;&#039;, &#039;&#039;&#039;6 9&#039;&#039;&#039;, &#039;&#039;&#039;10 11&#039;&#039;&#039;, &#039;&#039;&#039;11 14&#039;&#039;&#039; și &#039;&#039;&#039;14 17&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; spectacolein.txt&lt;br /&gt;
 igrij&lt;br /&gt;
; spectacoleout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, spectacole_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-100&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-100&lt;br /&gt;
    for spectacol in spectacole_validare:    # Parcurgem lista de spectacole&lt;br /&gt;
        # Verificăm dacă momentele de început și sfârșit ale spectacolelor sunt în intervalul specificat&lt;br /&gt;
        if spectacol[0] &amp;gt;= 1000000 or spectacol[1] &amp;gt;= 1000000 or spectacol[0] &amp;gt;= spectacol[1]:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția numar_spectacole determină numărul maxim de spectacole care pot fi urmărite, fără ca acestea să se suprapună&lt;br /&gt;
def numar_spectacole(n_numar, spectacole_numar):&lt;br /&gt;
    # Sortăm spectacolele în funcție de momentul de sfârșit&lt;br /&gt;
    spectacole_numar.sort(key=lambda x: x[1])&lt;br /&gt;
    # Inițializăm numărul de spectacole cu 1&lt;br /&gt;
    nr_spectacole = 1&lt;br /&gt;
    # Inițializăm momentul de sfârșit al ultimului spectacol urmărit&lt;br /&gt;
    sfarsit_ultim = spectacole_numar[0][1]&lt;br /&gt;
    # Parcurgem lista de spectacole&lt;br /&gt;
    for i in range(1, n_numar):&lt;br /&gt;
        if spectacole_numar[i][0] &amp;gt;= sfarsit_ultim:&lt;br /&gt;
            # Urmărim spectacolul curent&lt;br /&gt;
            nr_spectacole += 1&lt;br /&gt;
            sfarsit_ultim = spectacole_numar[i][1]&lt;br /&gt;
    return nr_spectacole&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;spectacolein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;spectacoleout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de spectacole&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim momentele de început și sfârșit ale spectacolelor&lt;br /&gt;
        spectacole_main = [list(map(int, file_in.readline().split())) for _ in range(n_main)]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, spectacole_main)&lt;br /&gt;
        # Determinăm numărul maxim de spectacole care pot fi urmărite&lt;br /&gt;
        nr_spectacole_main = numar_spectacole(n_main, spectacole_main)&lt;br /&gt;
        # Scriem numărul maxim de spectacole care pot fi urmărite în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(nr_spectacole_main) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0398_-_Plopi_2&amp;diff=8690</id>
		<title>0398 - Plopi 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0398_-_Plopi_2&amp;diff=8690"/>
		<updated>2023-12-29T17:39:34Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == De-a lungul principalei străzi din orașul nostru există &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; plopi, pentru fiecare cunoscându-se înălțimea. Primarul orașului dorește ca plopii să aibă înălțimile în ordine descrescătoare. Pentru aceasta, este posibilă tăierea dintr-un plop a unei bucăți – este o tehnică ecologică, nevătămătoare, în urma căreia plopul nu are de suferit. Plopii nu pot fi înălțați în niciun fel.  Determinați numărul minim de plopi din care s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
De-a lungul principalei străzi din orașul nostru există &#039;&#039;&#039;n&#039;&#039;&#039; plopi, pentru fiecare cunoscându-se înălțimea. Primarul orașului dorește ca plopii să aibă înălțimile în ordine descrescătoare. Pentru aceasta, este posibilă tăierea dintr-un plop a unei bucăți – este o tehnică ecologică, nevătămătoare, în urma căreia plopul nu are de suferit. Plopii nu pot fi înălțați în niciun fel.&lt;br /&gt;
&lt;br /&gt;
Determinați numărul minim de plopi din care se va tăia și lungimea totală minimă a bucăților tăiate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;plopi2in.txt&#039;&#039;&#039; conține pe prima linie numărul de plopi &#039;&#039;&#039;n&#039;&#039;&#039;. Urmează &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule, separate prin spaţii, care pot fi dispuse pe mai multe linii, reprezentând înălțimile plopilor.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;plopi2out.txt&#039;&#039;&#039; va conține pe prima linie numerele &#039;&#039;&#039;C T&#039;&#039;&#039;, separate prin exact un spațiu, reprezentând numărul minim de plopi din care se va tăia și lungimea totală minimă a bucăților tăiate.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;2 &amp;amp;les; n &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
* înălțimile plopilor vor fi mai mici decât &#039;&#039;&#039;10000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; plopi2in.txt&lt;br /&gt;
 8&lt;br /&gt;
 5 7 3 6 4 4 2 6&lt;br /&gt;
; plopi2out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 5 11&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Vom tăia din plopii numerotați cu &#039;&#039;&#039;2 4 5 6 8&#039;&#039;&#039;, astfel încât înălțimile să devină &#039;&#039;&#039;5 5 3 3 3 3 2 2&#039;&#039;&#039;. Lungimea totală a bucăților tăiate este: &#039;&#039;&#039;2  + 3 + 1 + 1 +4 = 11&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; plopi2in.txt&lt;br /&gt;
 yrteofmnrf&lt;br /&gt;
; plopi2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, inaltimi_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 2-100&lt;br /&gt;
    if n_validare &amp;lt; 2 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 2-100&lt;br /&gt;
    for inaltime in inaltimi_validare:    # Parcurgem lista de înălțimi&lt;br /&gt;
        # Verificăm dacă înălțimea este mai mică decât 10000&lt;br /&gt;
        if inaltime &amp;gt;= 10000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția taie_plopi taie plopii astfel încât să aibă înălțimile în ordine descrescătoare&lt;br /&gt;
def taie_plopi(n_taie, inaltimi_taie):&lt;br /&gt;
    # Inițializăm numărul de plopi din care se va tăia și lungimea totală a bucăților tăiate&lt;br /&gt;
    nr_plopi, lungime_totala = 0, 0&lt;br /&gt;
    # Parcurgem lista de înălțimi&lt;br /&gt;
    for i in range(1, n_taie):&lt;br /&gt;
        # Dacă înălțimea plopului curent este mai mare decât înălțimea plopului anterior&lt;br /&gt;
        if inaltimi_taie[i] &amp;gt; inaltimi_taie[i-1]:&lt;br /&gt;
            # Tăiem din plop&lt;br /&gt;
            lungime_totala += inaltimi_taie[i] - inaltimi_taie[i-1]&lt;br /&gt;
            inaltimi_taie[i] = inaltimi_taie[i-1]&lt;br /&gt;
            nr_plopi += 1&lt;br /&gt;
    return nr_plopi, lungime_totala&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;plopi2in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;plopi2out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de plopi&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim înălțimile plopilor&lt;br /&gt;
        inaltimi_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, inaltimi_main)&lt;br /&gt;
        # Tăiem plopii&lt;br /&gt;
        nr_plopi_main, lungime_totala_main = taie_plopi(n_main, inaltimi_main)&lt;br /&gt;
        # Scriem numărul de plopi din care se va tăia și lungimea totală a bucăților tăiate în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(nr_plopi_main) + &#039; &#039; + str(lungime_totala_main) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1004_-_Eureni&amp;diff=8689</id>
		<title>1004 - Eureni</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1004_-_Eureni&amp;diff=8689"/>
		<updated>2023-12-29T17:31:31Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Pentru cadourile pe care Moş Crăciun urmează să le cumpere copiilor cuminţi, Consiliul Polului Nord a alocat suma de &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039; eureni. Ştiind că în comerţul polar se utilizează &amp;#039;&amp;#039;&amp;#039;n+1&amp;#039;&amp;#039;&amp;#039; tipuri de bancnote de valori &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;e&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; , e&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, e&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&amp;#039;&amp;#039;&amp;#039;,…, &amp;#039;&amp;#039;&amp;#039;e&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;&amp;#039;&amp;#039;&amp;#039; şi faptul că Moşul trebuie să primească un număr minim de bancnote pentru suma aprobată, să se determine numărul de bancnote din fiecare tip utiliz...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Pentru cadourile pe care Moş Crăciun urmează să le cumpere copiilor cuminţi, Consiliul Polului Nord a alocat suma de &#039;&#039;&#039;S&#039;&#039;&#039; eureni. Ştiind că în comerţul polar se utilizează &#039;&#039;&#039;n+1&#039;&#039;&#039; tipuri de bancnote de valori &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;&#039;e&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; , e&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;, e&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&#039;&#039;&#039;,…, &#039;&#039;&#039;e&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;&#039;&#039;&#039; şi faptul că Moşul trebuie să primească un număr minim de bancnote pentru suma aprobată, să se determine numărul de bancnote din fiecare tip utilizat în plata sumei şi numărul total de bancnote care i s-au alocat.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;eureniin.txt&#039;&#039;&#039; conține pe prima linie numerele naturale &#039;&#039;&#039;S n e&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;eureniout.txt&#039;&#039;&#039; va conține mai multe linii: pe fiecare linie va fi scrisă valoare unei bancnote folosită în plata sumei &#039;&#039;&#039;S&#039;&#039;&#039; și numărul de bancnote folosite, separate printr-un spațiu, în ordinea descrescătoare a valorilor bancnotelor folosite. Pe ultima linie se va scrie numai numărul total de bancnote folosite.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt; S &amp;lt; 2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt; n &amp;lt; 10&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt; e &amp;lt; 10&#039;&#039;&#039;&lt;br /&gt;
* se presupune că există un număr nelimitat de bancnote de fiecare tip&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; eureniin.txt&lt;br /&gt;
 107 4 5&lt;br /&gt;
; eureniout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 25 4&lt;br /&gt;
 5 1&lt;br /&gt;
 1 2&lt;br /&gt;
 7&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt &#039;&#039;&#039;5&#039;&#039;&#039; tipuri de bancnote, cu valorile: &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;&#039;5&#039;&#039;&#039;, &#039;&#039;&#039;25&#039;&#039;&#039;, &#039;&#039;&#039;125&#039;&#039;&#039;, &#039;&#039;&#039;625&#039;&#039;&#039; eureni. Pentru a plăti suma de &#039;&#039;&#039;107&#039;&#039;&#039; eureni se folosesc &#039;&#039;&#039;4&#039;&#039;&#039; bancnote de &#039;&#039;&#039;25&#039;&#039;&#039; eureni, &#039;&#039;&#039;1&#039;&#039;&#039; bancnotă de &#039;&#039;&#039;5&#039;&#039;&#039; eureni și &#039;&#039;&#039;2&#039;&#039;&#039; bancnote de &#039;&#039;&#039;1&#039;&#039;&#039; euren, în total &#039;&#039;&#039;7&#039;&#039;&#039; bancnote.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; eureniin.txt&lt;br /&gt;
 grudmgvyem&lt;br /&gt;
; eureniout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(s_validare, n_validare, e_validare):&lt;br /&gt;
    # Verificăm dacă S, n și e sunt în intervalul specificat&lt;br /&gt;
    if (s_validare &amp;lt;= 1 or s_validare &amp;gt; 2000000000 or&lt;br /&gt;
            n_validare &amp;lt;= 1 or n_validare &amp;gt; 10 or e_validare &amp;lt;= 1 or e_validare &amp;gt; 10):&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă S, n sau e nu sunt în intervalul specificat&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_bancnote(s_calc, n_calc, e_calc):&lt;br /&gt;
    # Calculăm valorile bancnotelor&lt;br /&gt;
    bancnote = [e_calc ** index for index in range(n_calc + 1)]&lt;br /&gt;
    # Inițializăm numărul de bancnote din fiecare tip cu 0&lt;br /&gt;
    nr_bancnote = [0] * (n_calc+1)&lt;br /&gt;
    # Calculăm numărul de bancnote din fiecare tip&lt;br /&gt;
    for index in range(n_calc, -1, -1):&lt;br /&gt;
        nr_bancnote[index] = s_calc // bancnote[index]&lt;br /&gt;
        s_calc %= bancnote[index]&lt;br /&gt;
    return nr_bancnote&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;eureniin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;eureniout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim S, n și e&lt;br /&gt;
        S_main, n_main, e_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(S_main, n_main, e_main)&lt;br /&gt;
        # Calculăm numărul de bancnote din fiecare tip&lt;br /&gt;
        nr_bancnote_main = calculeaza_bancnote(S_main, n_main, e_main)&lt;br /&gt;
        # Scriem numărul de bancnote din fiecare tip în fișierul de ieșire&lt;br /&gt;
        for i in range(n_main, -1, -1):&lt;br /&gt;
            if nr_bancnote_main[i] &amp;gt; 0:&lt;br /&gt;
                file_out.write(str(e_main ** i) + &#039; &#039; + str(nr_bancnote_main[i]) + &#039;\n&#039;)&lt;br /&gt;
        # Scriem numărul total de bancnote în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(sum(nr_bancnote_main)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1580_-_Schimb&amp;diff=8391</id>
		<title>1580 - Schimb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1580_-_Schimb&amp;diff=8391"/>
		<updated>2023-12-26T16:43:41Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dau trei numere naturale &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; șiruri formate din litere mici ale alfabetului englez. Înlocuiți a &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;-a literă din fiecare șir cu a &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039;-a literă din alfabet. Dacă șirul are mai puțin de &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; litere se va scrie oglinditul lui. == Date de intrare == Pe prima linie a fișierului &amp;#039;&amp;#039;&amp;#039;schimbin.txt&amp;#039;&amp;#039;&amp;#039; se află trei numere naturale &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039;. Pe următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii se află &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; șir...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau trei numere naturale &#039;&#039;&#039;n&#039;&#039;&#039;, &#039;&#039;&#039;k&#039;&#039;&#039; și &#039;&#039;&#039;p&#039;&#039;&#039; și &#039;&#039;&#039;n&#039;&#039;&#039; șiruri formate din litere mici ale alfabetului englez. Înlocuiți a &#039;&#039;&#039;k&#039;&#039;&#039;-a literă din fiecare șir cu a &#039;&#039;&#039;p&#039;&#039;&#039;-a literă din alfabet. Dacă șirul are mai puțin de &#039;&#039;&#039;k&#039;&#039;&#039; litere se va scrie oglinditul lui.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;schimbin.txt&#039;&#039;&#039; se află trei numere naturale &#039;&#039;&#039;n&#039;&#039;&#039;, &#039;&#039;&#039;k&#039;&#039;&#039; și &#039;&#039;&#039;p&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se află &#039;&#039;&#039;n&#039;&#039;&#039; șiruri.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
În fișierul &#039;&#039;&#039;schimbout.txt&#039;&#039;&#039; se vor scrie noile șiruri, fiecare pe un rând nou.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; n, k &amp;amp;les; 10000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; p &amp;amp;les; 26&#039;&#039;&#039;&lt;br /&gt;
* șirurile au cel mult &#039;&#039;&#039;500&#039;&#039;&#039; de caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; schimbin.txt&lt;br /&gt;
 2 4 7&lt;br /&gt;
 abcde&lt;br /&gt;
 efg&lt;br /&gt;
; schimbout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 abcge&lt;br /&gt;
 gfe&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; schimbin.txt&lt;br /&gt;
 3 2 3&lt;br /&gt;
 wqysd&lt;br /&gt;
 s&lt;br /&gt;
 sj&lt;br /&gt;
; schimbout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 wcysd&lt;br /&gt;
 s&lt;br /&gt;
 sc&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; schimbin.txt&lt;br /&gt;
 2 4 999599995&lt;br /&gt;
; schimbout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, k_validare, p_validare, siruri_validare):&lt;br /&gt;
    # Verificăm dacă n, k și p sunt în intervalul specificat&lt;br /&gt;
    if (n_validare &amp;lt;= 0 or n_validare &amp;gt; 10000 or&lt;br /&gt;
            k_validare &amp;lt;= 0 or k_validare &amp;gt; 10000 or p_validare &amp;lt;= 0 or p_validare &amp;gt; 26):&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n, k sau p nu sunt în intervalul specificat&lt;br /&gt;
    for sir_validare in siruri_validare:    # Parcurgem lista de șiruri&lt;br /&gt;
        # Verificăm dacă lungimea șirului este mai mică decât 500&lt;br /&gt;
        if len(sir_validare) &amp;gt; 500:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția schimb_sir schimbă a k-a literă din fiecare șir cu a p-a literă din alfabet sau scrie oglinditul șirului&lt;br /&gt;
# dacă șirul are mai puțin de k litere&lt;br /&gt;
def schimb_sir(k_schimb, p_schimb, siruri_schimb):&lt;br /&gt;
    # Definim alfabetul&lt;br /&gt;
    alfabet = &#039;abcdefghijklmnopqrstuvwxyz&#039;&lt;br /&gt;
    # Parcurgem lista de șiruri&lt;br /&gt;
    for i in range(len(siruri_schimb)):&lt;br /&gt;
        # Verificăm dacă șirul are mai puțin de k litere&lt;br /&gt;
        if len(siruri_schimb[i]) &amp;lt; k_schimb:&lt;br /&gt;
            # Scriem oglinditul șirului&lt;br /&gt;
            siruri_schimb[i] = siruri_schimb[i][::-1]&lt;br /&gt;
        else:&lt;br /&gt;
            # Înlocuim a k-a literă din șir cu a p-a literă din alfabet&lt;br /&gt;
            siruri_schimb[i] = siruri_schimb[i][:k_schimb-1] + alfabet[p_schimb-1] + siruri_schimb[i][k_schimb:]&lt;br /&gt;
    return siruri_schimb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;schimbin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;schimbout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de șiruri, k și p&lt;br /&gt;
        n_main, k_main, p_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim șirurile&lt;br /&gt;
        siruri_main = [file_in.readline().strip() for _ in range(n_main)]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, k_main, p_main, siruri_main)&lt;br /&gt;
        # Schimbăm șirurile&lt;br /&gt;
        siruri_schimbate = schimb_sir(k_main, p_main, siruri_main)&lt;br /&gt;
        # Scriem șirurile schimbate în fișierul de ieșire&lt;br /&gt;
        for sir in siruri_schimbate:&lt;br /&gt;
            file_out.write(sir + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2441_-_Pereche_descentrata&amp;diff=8390</id>
		<title>2441 - Pereche descentrata</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2441_-_Pereche_descentrata&amp;diff=8390"/>
		<updated>2023-12-26T16:31:51Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == O pereche de cuvinte, unul cu număr par de litere, iar celălalt cu număr impar de litere, se numește descentrată dacă se poate obține cuvântul cu număr par de litere din celălalt, prin duplicarea caracterului din mijlocul acestuia.  &amp;#039;&amp;#039;&amp;#039;Exemplu&amp;#039;&amp;#039;&amp;#039;: perechile &amp;#039;&amp;#039;&amp;#039;crezi&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;creezi&amp;#039;&amp;#039;&amp;#039;, respectiv &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;aa&amp;#039;&amp;#039;&amp;#039; sunt descentrate. == Date de intrare == Programul citește de la tastatură un text. == Date de ieşire == Programul va afișa pe ecran...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
O pereche de cuvinte, unul cu număr par de litere, iar celălalt cu număr impar de litere, se numește descentrată dacă se poate obține cuvântul cu număr par de litere din celălalt, prin duplicarea caracterului din mijlocul acestuia.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemplu&#039;&#039;&#039;:&lt;br /&gt;
perechile &#039;&#039;&#039;crezi&#039;&#039;&#039; și &#039;&#039;&#039;creezi&#039;&#039;&#039;, respectiv &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;aa&#039;&#039;&#039; sunt descentrate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un text.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran mesajul &#039;&#039;&#039;DA&#039;&#039;&#039;, dacă acesta conține cel puțin o pereche descentrată, sau mesajul &#039;&#039;&#039;NU&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* textul are cel mult &#039;&#039;&#039;100&#039;&#039;&#039; de caractere&lt;br /&gt;
* cuvintele sunt formate din litere mici ale alfabetului englez&lt;br /&gt;
* cuvintele sunt separate prin câte un spațiu&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 crezi ca poti sa creezi ceva original&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Perechea descentrată de cuvinte este &#039;&#039;&#039;crezi – creezi&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 242434545&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 100 and all(c.islower() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru verificarea dacă există cel puțin o pereche descentrată&lt;br /&gt;
def exista_pereche_descentrata(s_cuv):&lt;br /&gt;
    # Transformăm șirul în listă de cuvinte&lt;br /&gt;
    cuvinte = s_cuv.split()&lt;br /&gt;
    # Pentru fiecare cuvânt cu număr impar de litere&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        if len(cuvant) % 2 == 1:&lt;br /&gt;
            # Calculăm cuvântul descentrat&lt;br /&gt;
            mijloc = len(cuvant) // 2&lt;br /&gt;
            cuvant_descentrat = cuvant[:mijloc] + cuvant[mijloc] * 2 + cuvant[mijloc+1:]&lt;br /&gt;
            # Verificăm dacă cuvântul descentrat se află în listă&lt;br /&gt;
            if cuvant_descentrat in cuvinte:&lt;br /&gt;
                return &#039;DA&#039;&lt;br /&gt;
    return &#039;NU&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Verificăm dacă acest script este rulat direct (nu este importat ca modul)&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă există cel puțin o pereche descentrată și afișăm rezultatul&lt;br /&gt;
        print(exista_pereche_descentrata(s))&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0893_-_Cuvinte0&amp;diff=8389</id>
		<title>0893 - Cuvinte0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0893_-_Cuvinte0&amp;diff=8389"/>
		<updated>2023-12-26T16:16:44Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă un șir de caractere format din cuvinte, separate prin spații. Cuvintele conțin doar litere mici ale alfabetului englez. Afișați, în ordine lexicografică, cuvintele distincte din șir. == Date de intrare == Programul citește de la tastatură șirul dat. == Date de ieşire == Programul va afișa pe ecran cuvintele în ordinea cerută, câte un cuvânt pe o linie. == Restricții și precizări == * șirul dat va avea cel mult &amp;#039;&amp;#039;&amp;#039;255&amp;#039;&amp;#039;&amp;#039; de caractere...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de caractere format din cuvinte, separate prin spații. Cuvintele conțin doar litere mici ale alfabetului englez. Afișați, în ordine lexicografică, cuvintele distincte din șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură șirul dat.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cuvintele în ordinea cerută, câte un cuvânt pe o linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul dat va avea cel mult &#039;&#039;&#039;255&#039;&#039;&#039; de caractere și va conține cel mult &#039;&#039;&#039;100&#039;&#039;&#039; de cuvinte&lt;br /&gt;
* lungimea unui cuvânt este de cel mult &#039;&#039;&#039;15&#039;&#039;&#039; caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 maria are doua pere si ana are doua mere&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 ana&lt;br /&gt;
 are&lt;br /&gt;
 doua&lt;br /&gt;
 maria&lt;br /&gt;
 mere&lt;br /&gt;
 pere&lt;br /&gt;
 si&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 acesttextaremaimultde15caractere&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.islower() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru afișarea cuvintelor în ordine lexicografică&lt;br /&gt;
def afisare_cuvinte(s_afisare):&lt;br /&gt;
    # Transformăm șirul în listă de cuvinte&lt;br /&gt;
    cuvinte = s_afisare.split()&lt;br /&gt;
    # Eliminăm dublurile și ordonăm cuvintele&lt;br /&gt;
    cuvinte = sorted(set(cuvinte))&lt;br /&gt;
    return cuvinte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Afișăm cuvintele în ordine lexicografică&lt;br /&gt;
        for cuvant in afisare_cuvinte(s):&lt;br /&gt;
            print(cuvant)&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0863_-_Parole&amp;diff=8387</id>
		<title>0863 - Parole</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0863_-_Parole&amp;diff=8387"/>
		<updated>2023-12-26T15:20:02Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: Parolele sunt cele mai utilizate modalități de stabilire a identității unei persoane. În IT este necesară utilizarea unor parole tari, care să nu poată fi ghicite cu ajutorul unor programe specializate.  În continuare, prin parolă tare înțelegem un sir de caractere care respectă următoarele condiții:  * conține cel puțin &amp;#039;&amp;#039;&amp;#039;8&amp;#039;&amp;#039;&amp;#039; caractere * conține cel puțin o literă mică * conține cel puțin o literă mare * conține cel puțin o cifră * conține cel p...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Parolele sunt cele mai utilizate modalități de stabilire a identității unei persoane. În IT este necesară utilizarea unor parole tari, care să nu poată fi ghicite cu ajutorul unor programe specializate.&lt;br /&gt;
&lt;br /&gt;
În continuare, prin parolă tare înțelegem un sir de caractere care respectă următoarele condiții:&lt;br /&gt;
&lt;br /&gt;
* conține cel puțin &#039;&#039;&#039;8&#039;&#039;&#039; caractere&lt;br /&gt;
* conține cel puțin o literă mică&lt;br /&gt;
* conține cel puțin o literă mare&lt;br /&gt;
* conține cel puțin o cifră&lt;br /&gt;
* conține cel puțin un caracter dintre &#039;&#039;&#039;.,?!;:_@#&#039;&#039;&#039;&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă &#039;&#039;&#039;n&#039;&#039;&#039; o listă cu &#039;&#039;&#039;n&#039;&#039;&#039; parole. Să se determine câte dintre ele sunt &#039;&#039;&#039;parole tari&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;parolein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte o parolă.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;paroleout.txt&#039;&#039;&#039; va conține pe prima linie de parole tari &#039;&#039;&#039;C&#039;&#039;&#039;. &lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
* fiecare linie fișierului de intrare va avea cel mult &#039;&#039;&#039;50&#039;&#039;&#039; de caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; parolein.txt&lt;br /&gt;
 5&lt;br /&gt;
 al!ABe1Ar&lt;br /&gt;
 alfabetar&lt;br /&gt;
 a:1A&lt;br /&gt;
 Alfabetar&lt;br /&gt;
 qHj5K#.1NN&lt;br /&gt;
; paroleout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cele două parole tari din listă sunt: &#039;&#039;&#039;al!ABe1Ar&#039;&#039;&#039; și &#039;&#039;&#039;qHj5K#.1NN&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; parolein.txt&lt;br /&gt;
 aceastalinedecoddepasestecele50decaractereimpuse&lt;br /&gt;
; paroleout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(n_validare, parole_validare):&lt;br /&gt;
    # verificam daca n este in intervalul 1-1000&lt;br /&gt;
    if not (1 &amp;lt;= n_validare &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca n nu este in intervalul 1-1000&lt;br /&gt;
    for parola in parole_validare:  # parcurgem lista de parole&lt;br /&gt;
        # verificam daca lungimea parolei este mai mica sau egala cu 50&lt;br /&gt;
        if len(parola) &amp;gt; 50:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia este_parola_tare verifica daca o parola este tare&lt;br /&gt;
def este_parola_tare(parola):&lt;br /&gt;
    # verificam daca parola contine cel putin 8 caractere,&lt;br /&gt;
    # cel putin o litera mica, cel putin o litera mare, cel putin o cifra si cel putin un caracter special&lt;br /&gt;
    return (len(parola) &amp;gt;= 8 and any(caracter.islower() for caracter in parola)&lt;br /&gt;
            and any(caracter.isupper() for caracter in parola) and any(&lt;br /&gt;
                caracter.isdigit() for caracter in parola) and any(caracter in &amp;quot;.,?!;:_@#&amp;quot; for caracter in parola))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;parolein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;paroleout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim numarul de parole&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # citim parolele&lt;br /&gt;
        parole_main = [file_in.readline().strip() for _ in range(n_main)]&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(n_main, parole_main)&lt;br /&gt;
        # numaram cate parole sunt tari si scriem rezultatul in fisierul de iesire&lt;br /&gt;
        file_out.write(str(sum(este_parola_tare(parola) for parola in parole_main)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # daca datele de intrare nu sunt valide, afisam un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # daca datele de intrare sunt incomplete, afisam un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0856_-_Valori&amp;diff=8382</id>
		<title>0856 - Valori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0856_-_Valori&amp;diff=8382"/>
		<updated>2023-12-26T14:56:49Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Gigel se joacă cu cuvinte (scrise cu litere din alfabetul englez, mari sau mici). El a asociat fiecărei litere din alfabet o valoare număr natural, pe care a numit-o valoarea literei. Apoi a definit valoarea unui cuvânt astfel: se calculează suma &amp;#039;&amp;#039;&amp;#039;S1&amp;#039;&amp;#039;&amp;#039; a valorilor literelor mici din cuvânt şi suma &amp;#039;&amp;#039;&amp;#039;S2&amp;#039;&amp;#039;&amp;#039; a valorilor literelor mari din cuvânt. Valoarea cuvântului va fi &amp;#039;&amp;#039;&amp;#039;S1 - S2&amp;#039;&amp;#039;&amp;#039;.  Cunoscându-se valoarea fiecărei litere din alfabet şi o list...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Gigel se joacă cu cuvinte (scrise cu litere din alfabetul englez, mari sau mici). El a asociat fiecărei litere din alfabet o valoare număr natural, pe care a numit-o valoarea literei. Apoi a definit valoarea unui cuvânt astfel: se calculează suma &#039;&#039;&#039;S1&#039;&#039;&#039; a valorilor literelor mici din cuvânt şi suma &#039;&#039;&#039;S2&#039;&#039;&#039; a valorilor literelor mari din cuvânt. Valoarea cuvântului va fi &#039;&#039;&#039;S1 - S2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Cunoscându-se valoarea fiecărei litere din alfabet şi o listă de cuvinte, să se determine cuvântul cu valoarea maximă. Dacă există mai multe cuvinte de valoare maximă, se vor determina toate, în ordinea din lista dată.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;valoriin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;26&#039;&#039;&#039; de numere, reprezentând, în ordine, valorile literelor din alfabet, pe a doua linie numărul de cuvinte &#039;&#039;&#039;n&#039;&#039;&#039; iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte un cuvânt format din litere mari şi mici ale alfabetului englez.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;valoriout.txt&#039;&#039;&#039; va conține cuvintele de valoare maximă din lista dată, în ordinea din listă, fiecare cuvânt pe câte o linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* valorile literelor sunt numere naturale mai mici decât &#039;&#039;&#039;1000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
* fiecare dintre cuvintele date conţine cel mult &#039;&#039;&#039;255&#039;&#039;&#039; caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; valoriin.txt&lt;br /&gt;
 2 7 7 3 9 8 9 6 3 9 6 6 6 5 5 8 2 6 6 1 5 6 9 4 7 3 &lt;br /&gt;
 4&lt;br /&gt;
 BaciL&lt;br /&gt;
 AbAc&lt;br /&gt;
 Aba&lt;br /&gt;
 AbEcEdAr&lt;br /&gt;
; valoriout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 AbAc&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Observaţie ==&lt;br /&gt;
Valoarea unui cuvânt poate fi negativă. De exemplu, valoarea cuvântului &#039;&#039;&#039;BaciL&#039;&#039;&#039; este &#039;&#039;&#039;(2+7+3)-(7+6)=-1&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; valoriin.txt&lt;br /&gt;
 4 6 7 8&lt;br /&gt;
 fdfdfdf&lt;br /&gt;
; valoriout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(n_validare, cuvinte_validare):&lt;br /&gt;
    # verificam daca n este in intervalul 1-1000&lt;br /&gt;
    if not (1 &amp;lt;= n_validare &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca n nu este in intervalul 1-1000&lt;br /&gt;
    for cuvant in cuvinte_validare:    # parcurgem lista de cuvinte&lt;br /&gt;
        # verificam daca lungimea cuvantului este mai mica sau egala cu 255&lt;br /&gt;
        if len(cuvant) &amp;gt; 255:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia valoare_cuvant calculeaza valoarea unui cuvant&lt;br /&gt;
def valoare_cuvant(cuvant, valori_litere):&lt;br /&gt;
    # calculam suma valorilor literelor mici si mari din cuvant&lt;br /&gt;
    s1 = sum(valori_litere[ord(litera) - ord(&#039;a&#039;)] for litera in cuvant if litera.islower())&lt;br /&gt;
    s2 = sum(valori_litere[ord(litera) - ord(&#039;A&#039;)] for litera in cuvant if litera.isupper())&lt;br /&gt;
    # returnam diferenta dintre sumele calculate&lt;br /&gt;
    return s1 - s2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;valoriin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;valoriout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim valorile literelor&lt;br /&gt;
        valori_litere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # citim numarul de cuvinte&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # citim cuvintele&lt;br /&gt;
        cuvinte_main = [file_in.readline().strip() for _ in range(n_main)]&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(n_main, cuvinte_main)&lt;br /&gt;
        # calculam valorile cuvintelor&lt;br /&gt;
        valori_cuvinte = [valoare_cuvant(cuvant, valori_litere_main) for cuvant in cuvinte_main]&lt;br /&gt;
        # determinam valoarea maxima&lt;br /&gt;
        valoare_max = max(valori_cuvinte)&lt;br /&gt;
        # scriem cuvintele de valoare maxima in fisierul de iesire&lt;br /&gt;
        for i in range(n_main):&lt;br /&gt;
            if valori_cuvinte[i] == valoare_max:&lt;br /&gt;
                file_out.write(cuvinte_main[i] + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # daca datele de intrare nu sunt valide, afisam un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # daca datele de intrare sunt incomplete, afisam un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1454_-_Permutare_Cuvant&amp;diff=8122</id>
		<title>1454 - Permutare Cuvant</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1454_-_Permutare_Cuvant&amp;diff=8122"/>
		<updated>2023-12-14T15:09:39Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă un cuvânt format din litere ale alfabetului englez și cifre. Afișați toate permutările circulare spre stânga ale sale. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;permutarecuvantin.txt&amp;#039;&amp;#039;&amp;#039; conține cuvântul pentru care se vor afișa permutările circulare spre stânga. == Date de ieşire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;permutarecuvantout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe o singura linie toate permutările circulare ale cuvântului, separate prin câte un spațiu....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un cuvânt format din litere ale alfabetului englez și cifre. Afișați toate permutările circulare spre stânga ale sale.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;permutarecuvantin.txt&#039;&#039;&#039; conține cuvântul pentru care se vor afișa permutările circulare spre stânga.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;permutarecuvantout.txt&#039;&#039;&#039; va conține pe o singura linie toate permutările circulare ale cuvântului, separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* Cuvântul va avea maximum &#039;&#039;&#039;20&#039;&#039;&#039; de caractere.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; permutarecuvantin.txt&lt;br /&gt;
 Hello&lt;br /&gt;
; permutarecuvantout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 Hello elloH lloHe loHel oHell&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; permutarecuvantin.txt&lt;br /&gt;
 car&lt;br /&gt;
; permutarecuvantout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 car arc rca&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; permutarecuvantin.txt&lt;br /&gt;
 acestcuvantesteprealung&lt;br /&gt;
; permutarecuvantout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(cuvant_validare):&lt;br /&gt;
    # verificam daca lungimea cuvantului este mai mica sau egala cu 20&lt;br /&gt;
    if len(cuvant_validare) &amp;gt; 20:&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca lungimea cuvantului nu este in intervalul 0-20&lt;br /&gt;
    for caracter in cuvant_validare:    # parcurgem fiecare caracter din cuvant&lt;br /&gt;
        # verificam daca caracterul este o litera a alfabetului englezesc sau o cifra&lt;br /&gt;
        if not caracter.isalpha() and not caracter.isdigit():&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia permutari_circulare genereaza toate permutarile circulare ale unui cuvant&lt;br /&gt;
def permutari_circulare(cuvant):&lt;br /&gt;
    # generam toate permutarile circulare ale cuvantului&lt;br /&gt;
    return [cuvant[i:] + cuvant[:i] for i in range(len(cuvant))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;permutarecuvantin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;permutarecuvantout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim cuvantul&lt;br /&gt;
        cuvant_main = file_in.readline().strip()&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(cuvant_main)&lt;br /&gt;
        # generam toate permutarile circulare ale cuvantului si scriem rezultatul in fisierul de iesire&lt;br /&gt;
        file_out.write(&#039; &#039;.join(permutari_circulare(cuvant_main)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1346_-_PbInfo&amp;diff=8120</id>
		<title>1346 - PbInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1346_-_PbInfo&amp;diff=8120"/>
		<updated>2023-12-14T14:51:59Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Hacker-ul Gogu și-a neglijat serios activitatea în ultima vreme, așa că și-a propus să mai spargă încă un site, care, din întâmplare, este chiar www.pbinfo.ro. == Date de intrare == Pe prima linie se citește un șir reprezentând un link al site-ului PbInfo. Pe linia a doua, se citește un număr întreg &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;1 &amp;lt;= n &amp;lt;= 20&amp;#039;&amp;#039;&amp;#039;), iar pe următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii se citesc &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; cuvinte cheie. Scopul vostru este să aflați dacă hacker-ul Gog...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Hacker-ul Gogu și-a neglijat serios activitatea în ultima vreme, așa că și-a propus să mai spargă încă un site, care, din întâmplare, este chiar www.pbinfo.ro.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie se citește un șir reprezentând un link al site-ului PbInfo. Pe linia a doua, se citește un număr întreg &#039;&#039;&#039;n&#039;&#039;&#039; (&#039;&#039;&#039;1 &amp;lt;= n &amp;lt;= 20&#039;&#039;&#039;), iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se citesc &#039;&#039;&#039;n&#039;&#039;&#039; cuvinte cheie. Scopul vostru este să aflați dacă hacker-ul Gogu s-a infiltrat și a schimbat link-ul original.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Dacă link-ul dat conține unul din cuvintele cheie precizate în fișierul de intrare sau conține cuvântul “virus”, afișați &#039;&#039;&#039;DA&#039;&#039;&#039;, altfel afișați &#039;&#039;&#039;NU&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* cuvintele vor fi mai scurte decât link-ul precizat, iar link-ul va avea maxim &#039;&#039;&#039;100&#039;&#039;&#039; de caractere;&lt;br /&gt;
* hacker-ul Gogu nu este profesionist, așa că nu este nevoie să va alarmați;&lt;br /&gt;
* input-ul va conține numai litere mici ale alfabetului englez și separatorii &#039;&#039;&#039;,.!?/:&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; pbinfoin.txt&lt;br /&gt;
 //htttp:www.pbinfo.ro&lt;br /&gt;
 3&lt;br /&gt;
 hacked&lt;br /&gt;
 gogu&lt;br /&gt;
 htttp&lt;br /&gt;
; pbinfoout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; pbinfoin.txt&lt;br /&gt;
 //http:www.pbinfo.ro &lt;br /&gt;
 3&lt;br /&gt;
 hacked&lt;br /&gt;
 gogu&lt;br /&gt;
 htttp&lt;br /&gt;
; pbinfoout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 NU&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; pbinfoin.txt&lt;br /&gt;
 //http:www.pbinfo.virus.ro&lt;br /&gt;
 1&lt;br /&gt;
 gogu&lt;br /&gt;
; pbinfoout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 4 ==&lt;br /&gt;
; pbinfoin.txt&lt;br /&gt;
 //http:www.pbinfo.virus.ro&lt;br /&gt;
 223&lt;br /&gt;
 hacked&lt;br /&gt;
 gogu&lt;br /&gt;
; pbinfoout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(n_validare, link_validare, cuvinte_cheie_validare):&lt;br /&gt;
    # verificam daca n este in intervalul 1-20&lt;br /&gt;
    if n_validare &amp;lt;= 0 or n_validare &amp;gt; 20:&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca n nu este in intervalul 1-20&lt;br /&gt;
    # verificam daca lungimea link-ului este mai mica sau egala cu 100&lt;br /&gt;
    if len(link_validare) &amp;gt; 100:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for cuvant in cuvinte_cheie_validare:    # parcurgem lista de cuvinte cheie&lt;br /&gt;
        # verificam daca lungimea cuvantului este mai mica decat lungimea link-ului&lt;br /&gt;
        if len(cuvant) &amp;gt;= len(link_validare):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia is_hacked verifica daca link-ul a fost spart&lt;br /&gt;
def is_hacked(link, cuvinte_cheie):&lt;br /&gt;
    # verificam daca link-ul contine unul din cuvintele cheie sau cuvantul &amp;quot;virus&amp;quot;&lt;br /&gt;
    return any(cuvant in link for cuvant in cuvinte_cheie) or &amp;quot;virus&amp;quot; in link&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;pbinfoin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;pbinfoout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim link-ul&lt;br /&gt;
        link_main = file_in.readline().strip()&lt;br /&gt;
        # citim numarul de cuvinte cheie&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # citim cuvintele cheie&lt;br /&gt;
        cuvinte_cheie_main = [file_in.readline().strip() for _ in range(n_main)]&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(n_main, link_main, cuvinte_cheie_main)&lt;br /&gt;
        # verificam daca link-ul a fost spart si scriem rezultatul in fisierul de iesire&lt;br /&gt;
        file_out.write(&#039;DA\n&#039; if is_hacked(link_main, cuvinte_cheie_main) else &#039;NU\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0892_-_Pasareste_1&amp;diff=8119</id>
		<title>0892 - Pasareste 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0892_-_Pasareste_1&amp;diff=8119"/>
		<updated>2023-12-14T14:29:40Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Limba păsărească este foarte simplă; și asemănătoare cu limba română! Un text scris în română se traduce în păsărește astfel: după fiecare vocală se inserează litera &#039;&#039;&#039;p&#039;&#039;&#039; și vocala respectivă.&lt;br /&gt;
&lt;br /&gt;
Se dă o propoziție scrisă în limba păsărească. Să se traducă în limba română.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran șirul &#039;&#039;&#039;t&#039;&#039;&#039;, reprezentând traducerea în română a șirului &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirurile &#039;&#039;&#039;s&#039;&#039;&#039; și &#039;&#039;&#039;t&#039;&#039;&#039; vor avea cel mult &#039;&#039;&#039;255&#039;&#039;&#039; de caractere&lt;br /&gt;
* șirul &#039;&#039;&#039;s&#039;&#039;&#039; va conține litere mici ale alfabetului englez și spații&lt;br /&gt;
* vocalele sunt: &#039;&#039;&#039;aeiou&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;șirul dat în limba păsărească este corect&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 apanapa aparepe meperepe&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 ana are mere&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 78675878576875&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.islower() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru traducerea din limba păsărească în română&lt;br /&gt;
def traducere_pasareasca(s_pasareasca):&lt;br /&gt;
    vocale = &#039;aeiou&#039;&lt;br /&gt;
    t = &#039;&#039;&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; len(s_pasareasca):&lt;br /&gt;
        if s_pasareasca[i] in vocale:&lt;br /&gt;
            t += s_pasareasca[i]&lt;br /&gt;
            i += 3&lt;br /&gt;
        else:&lt;br /&gt;
            t += s_pasareasca[i]&lt;br /&gt;
            i += 1&lt;br /&gt;
    return t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Traducem șirul din limba păsărească în română și îl afișăm&lt;br /&gt;
        print(traducere_pasareasca(s))&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2693_-_Voc_Sort_Desc&amp;diff=8118</id>
		<title>2693 - Voc Sort Desc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2693_-_Voc_Sort_Desc&amp;diff=8118"/>
		<updated>2023-12-14T14:28:58Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de caractere în care cuvintele sunt formate din litere mici și mari ale alfabetului englez și sunt separate prin spații. Să se afișeze cuvintele în ordine descrescătoare după numărul de vocale și să se afișeze fiecare cuvânt pe câte o linie. Dacă două cuvinte au același număr de vocale atunci ele se vor ordona descrescător după lungime, iar dacă au aceeași lungime atunci se vor ordona lexicografic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cuvintele din text, în ordinea cerută, câte unul pe linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul va conține maximum &#039;&#039;&#039;255&#039;&#039;&#039; de caractere.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 ana are mere&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 mere&lt;br /&gt;
 ana&lt;br /&gt;
 are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 977483&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.isalpha() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru numărarea vocalelor într-un cuvânt&lt;br /&gt;
def numar_vocale(cuvant_vocale):&lt;br /&gt;
    return sum(1 for c in cuvant_vocale if c.lower() in &#039;aeiou&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru sortarea cuvintelor&lt;br /&gt;
def sortare_cuvinte(s_sort):&lt;br /&gt;
    cuvinte = s_sort.split()&lt;br /&gt;
    cuvinte.sort(key=lambda cuvant_sort: (-numar_vocale(cuvant_sort), -len(cuvant_sort), cuvant_sort))&lt;br /&gt;
    return cuvinte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Sortăm cuvintele și le afișăm&lt;br /&gt;
        for cuvant in sortare_cuvinte(s):&lt;br /&gt;
            print(cuvant)&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2584_-_Insert_Invers&amp;diff=8117</id>
		<title>2584 - Insert Invers</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2584_-_Insert_Invers&amp;diff=8117"/>
		<updated>2023-12-14T14:28:34Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de caractere care conține cuvinte formate doar din litere mici și mari ale alfabetului englez, separate printr-un spațiu. Să se afișeze cuvintele din șir, fiecare fiind urmat de inversul său. Cuvintele afișate sunt separate printr-un spațiu.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cuvintele conform cerinței.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul conține maximum 255 de caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 ana are mere&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 ana ana are era mere erem&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 99573483&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.isalpha() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru afișarea cuvintelor și a inverselor lor&lt;br /&gt;
def afisare_cuvinte_si_inversee(s_afisare):&lt;br /&gt;
    cuvinte = s_afisare.split()&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        rezultat.append(cuvant)&lt;br /&gt;
        rezultat.append(cuvant[::-1])&lt;br /&gt;
    return &#039; &#039;.join(rezultat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Afișăm cuvintele și inversele lor&lt;br /&gt;
        print(afisare_cuvinte_si_inversee(s))&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0093_-_Numar_Maxim_Cuvinte&amp;diff=8114</id>
		<title>0093 - Numar Maxim Cuvinte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0093_-_Numar_Maxim_Cuvinte&amp;diff=8114"/>
		<updated>2023-12-14T14:21:33Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Să se scrie un program care citește mai multe propoziții și determină propoziția cu cele mai multe cuvinte. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;cuvmaxin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie un număr natural &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar pe următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii câte o propoziție alcătuită din litere mici ale alfabetului englez și spații. == Date de ieşire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;cuvmaxout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie propoziția cu cele mai multe...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește mai multe propoziții și determină propoziția cu cele mai multe cuvinte.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;cuvmaxin.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte o propoziție alcătuită din litere mici ale alfabetului englez și spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;cuvmaxout.txt&#039;&#039;&#039; va conține pe prima linie propoziția cu cele mai multe cuvinte.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0&amp;lt;n&amp;lt;100&#039;&#039;&#039;&lt;br /&gt;
* fiecare propoziție va conține cel mult &#039;&#039;&#039;255&#039;&#039;&#039; de caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; cuvmaxin.txt&lt;br /&gt;
 4&lt;br /&gt;
 somnoroase pasarele&lt;br /&gt;
 pe la cuiburi se aduna&lt;br /&gt;
 se ascund in ramurele&lt;br /&gt;
 noapte buna noapte buna&lt;br /&gt;
; cuvmaxout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 pe la cuiburi se aduna&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; cuvmaxin.txt&lt;br /&gt;
 205ALA&lt;br /&gt;
; cuvmaxout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(n_validare, propozitii_validare):&lt;br /&gt;
    # verificam daca n este in intervalul 0-100&lt;br /&gt;
    if n_validare &amp;lt;= 0 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca n nu este in intervalul 0-100&lt;br /&gt;
    for propozitie in propozitii_validare:    # parcurgem lista de propozitii&lt;br /&gt;
        # verificam daca lungimea propozitiei este mai mica sau egala cu 255&lt;br /&gt;
        if len(propozitie) &amp;gt; 255:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        for caracter in propozitie:    # parcurgem fiecare caracter din propozitie&lt;br /&gt;
            # verificam daca caracterul este o litera mica a alfabetului englezesc sau un spatiu&lt;br /&gt;
            if not caracter.islower() and not caracter.isspace():&lt;br /&gt;
                raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia max_words_proposition determina propozitia cu cele mai multe cuvinte&lt;br /&gt;
def numar_max_cuvinte(propozitii):&lt;br /&gt;
    # determinam propozitia cu cele mai multe cuvinte&lt;br /&gt;
    propozitie_max_cuvinte = max(propozitii, key=lambda propozitie: len(propozitie.split()))&lt;br /&gt;
    return propozitie_max_cuvinte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;cuvmaxin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;cuvmaxout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim numarul de propozitii&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # citim propozitiile&lt;br /&gt;
        propozitii_main = [linie.strip() for linie in file_in]&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(n_main, propozitii_main)&lt;br /&gt;
        # determinam propozitia cu cele mai multe cuvinte&lt;br /&gt;
        propozitie_max = numar_max_cuvinte(propozitii_main)&lt;br /&gt;
        # scriem propozitia cu cele mai multe cuvinte in fisierul de iesire&lt;br /&gt;
        file_out.write(propozitie_max + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2584_-_Insert_Invers&amp;diff=8103</id>
		<title>2584 - Insert Invers</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2584_-_Insert_Invers&amp;diff=8103"/>
		<updated>2023-12-14T14:12:46Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă un șir de caractere care conține cuvinte formate doar din litere mici și mari ale alfabetului englez, separate printr-un spațiu. Să se afișeze cuvintele din șir, fiecare fiind urmat de inversul său. Cuvintele afișate sunt separate printr-un spațiu. == Date de intrare == Programul citește de la tastatură un șir de caractere. == Date de ieşire == Programul va afișa pe ecran cuvintele conform cerinței. == Restricții și precizări == * șir...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de caractere care conține cuvinte formate doar din litere mici și mari ale alfabetului englez, separate printr-un spațiu. Să se afișeze cuvintele din șir, fiecare fiind urmat de inversul său. Cuvintele afișate sunt separate printr-un spațiu.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cuvintele conform cerinței.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul conține maximum 255 de caractere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 ana are mere&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 ana ana are era mere erem&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 99573483&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.isalpha() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru afișarea cuvintelor și a inverselor lor&lt;br /&gt;
def afisare_cuvinte_si_inversee(s_afisare):&lt;br /&gt;
    cuvinte = s_afisare.split()&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        rezultat.append(cuvant)&lt;br /&gt;
        rezultat.append(cuvant[::-1])&lt;br /&gt;
    return &#039; &#039;.join(rezultat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Verificăm dacă acest script este rulat direct (nu este importat ca modul)&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Afișăm cuvintele și inversele lor&lt;br /&gt;
        print(afisare_cuvinte_si_inversee(s))&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2693_-_Voc_Sort_Desc&amp;diff=8096</id>
		<title>2693 - Voc Sort Desc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2693_-_Voc_Sort_Desc&amp;diff=8096"/>
		<updated>2023-12-14T14:05:47Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă un șir de caractere în care cuvintele sunt formate din litere mici și mari ale alfabetului englez și sunt separate prin spații. Să se afișeze cuvintele în ordine descrescătoare după numărul de vocale și să se afișeze fiecare cuvânt pe câte o linie. Dacă două cuvinte au același număr de vocale atunci ele se vor ordona descrescător după lungime, iar dacă au aceeași lungime atunci se vor ordona lexicografic. == Date de intrare == Pro...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de caractere în care cuvintele sunt formate din litere mici și mari ale alfabetului englez și sunt separate prin spații. Să se afișeze cuvintele în ordine descrescătoare după numărul de vocale și să se afișeze fiecare cuvânt pe câte o linie. Dacă două cuvinte au același număr de vocale atunci ele se vor ordona descrescător după lungime, iar dacă au aceeași lungime atunci se vor ordona lexicografic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cuvintele din text, în ordinea cerută, câte unul pe linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul va conține maximum &#039;&#039;&#039;255&#039;&#039;&#039; de caractere.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 ana are mere&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 mere&lt;br /&gt;
 ana&lt;br /&gt;
 are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 977483&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.isalpha() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru numărarea vocalelor într-un cuvânt&lt;br /&gt;
def numar_vocale(cuvant_vocale):&lt;br /&gt;
    return sum(1 for c in cuvant_vocale if c.lower() in &#039;aeiou&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru sortarea cuvintelor&lt;br /&gt;
def sortare_cuvinte(s_sort):&lt;br /&gt;
    cuvinte = s_sort.split()&lt;br /&gt;
    cuvinte.sort(key=lambda cuvant_sort: (-numar_vocale(cuvant_sort), -len(cuvant_sort), cuvant_sort))&lt;br /&gt;
    return cuvinte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Verificăm dacă acest script este rulat direct (nu este importat ca modul)&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Sortăm cuvintele și le afișăm&lt;br /&gt;
        for cuvant in sortare_cuvinte(s):&lt;br /&gt;
            print(cuvant)&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0089_-_Palindrom_Propozitie&amp;diff=8091</id>
		<title>0089 - Palindrom Propozitie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0089_-_Palindrom_Propozitie&amp;diff=8091"/>
		<updated>2023-12-14T13:55:15Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: Un cuvânt este palindrom dacă se citește la fel în ambele direcții. De exemplu, &amp;#039;&amp;#039;&amp;#039;capac&amp;#039;&amp;#039;&amp;#039; este palindrom.  O propoziție este palindromică dacă prin eliminarea spațiilor și a altor semne de punctuație devine palindrom. De exemplu, propoziția &amp;#039;&amp;#039;&amp;#039;ele fac cafele&amp;#039;&amp;#039;&amp;#039; este palindromică. == Cerinţa == Să se scrie un program care citește mai multe propoziții și determină despre fiecare dacă este palindromică. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;palindr...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un cuvânt este palindrom dacă se citește la fel în ambele direcții. De exemplu, &#039;&#039;&#039;capac&#039;&#039;&#039; este palindrom.&lt;br /&gt;
&lt;br /&gt;
O propoziție este palindromică dacă prin eliminarea spațiilor și a altor semne de punctuație devine palindrom. De exemplu, propoziția &#039;&#039;&#039;ele fac cafele&#039;&#039;&#039; este palindromică.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește mai multe propoziții și determină despre fiecare dacă este palindromică.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;palindromin.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte o propoziție alcătuita din litere mici ale alfabetului englez și spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;palindromout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;n&#039;&#039;&#039; linii. Linia &#039;&#039;&#039;i&#039;&#039;&#039; va conține valoarea &#039;&#039;&#039;1&#039;&#039;&#039; dacă pe linia &#039;&#039;&#039;i+1&#039;&#039;&#039; din fișierul de intrare se află o propoziție palindromică, și &#039;&#039;&#039;0&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0&amp;lt;n&amp;lt;100&#039;&#039;&#039;&lt;br /&gt;
* fiecare propoziție va conține cel mult &#039;&#039;&#039;200&#039;&#039;&#039; de caractere.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; palindromin.txt&lt;br /&gt;
 4&lt;br /&gt;
 capac&lt;br /&gt;
 ele fac cafele&lt;br /&gt;
 ale nu fac cafele&lt;br /&gt;
 aerare&lt;br /&gt;
; palindromout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 1&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; palindromin.txt&lt;br /&gt;
 101KKGKKG&lt;br /&gt;
; palindromout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(n_validare, propozitii_validare):&lt;br /&gt;
    # verificam daca n este in intervalul 0-100&lt;br /&gt;
    if n_validare &amp;lt;= 0 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca n nu este in intervalul 0-100&lt;br /&gt;
    for propozitie_validare in propozitii_validare:    # parcurgem lista de propozitii&lt;br /&gt;
        # verificam daca lungimea propozitiei este mai mica sau egala cu 200&lt;br /&gt;
        if len(propozitie_validare) &amp;gt; 200:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        for caracter in propozitie_validare:    # parcurgem fiecare caracter din propozitie&lt;br /&gt;
            # verificam daca caracterul este o litera mica a alfabetului englezesc&lt;br /&gt;
            if not caracter.islower() and not caracter.isspace():&lt;br /&gt;
                raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia is_palindrome verifica daca o propozitie este palindromica&lt;br /&gt;
def este_palindrom(propozitie_palindrom):&lt;br /&gt;
    # eliminam spatiile din propozitie si verificam daca este palindrom&lt;br /&gt;
    propozitie_fara_spatii = propozitie_palindrom.replace(&#039; &#039;, &#039;&#039;)&lt;br /&gt;
    return propozitie_fara_spatii == propozitie_fara_spatii[::-1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;palindromin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;palindromout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim numarul de propozitii&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # citim propozitiile&lt;br /&gt;
        propozitii_main = [linie.strip() for linie in file_in]&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(n_main, propozitii_main)&lt;br /&gt;
        # pentru fiecare propozitie, verificam daca este palindromica si scriem rezultatul in fisierul de iesire&lt;br /&gt;
        for propozitie in propozitii_main:&lt;br /&gt;
            file_out.write(&#039;1\n&#039; if este_palindrom(propozitie) else &#039;0\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # daca datele de intrare nu sunt valide, afisam un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # daca datele de intrare sunt incomplete, afisam un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0990_-_Sortare_Cuvinte_1&amp;diff=8078</id>
		<title>0990 - Sortare Cuvinte 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0990_-_Sortare_Cuvinte_1&amp;diff=8078"/>
		<updated>2023-12-14T13:30:08Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Să se scrie un program care citește o listă de cuvinte şi le afişează în ordine alfabetică. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;sortarecuvinte1in.txt&amp;#039;&amp;#039;&amp;#039; conține mai multe cuvinte, câte unul pe o linie. == Date de ieşire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;sortarecuvinte1out.txt&amp;#039;&amp;#039;&amp;#039; va conține cuvintele date, ordonate alfabetic, fiecare pe câte o linie. == Restricții și precizări == * în listă sunt cel mult &amp;#039;&amp;#039;&amp;#039;200&amp;#039;&amp;#039;&amp;#039; de cuvinte, fiecare având...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește o listă de cuvinte şi le afişează în ordine alfabetică.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sortarecuvinte1in.txt&#039;&#039;&#039; conține mai multe cuvinte, câte unul pe o linie.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sortarecuvinte1out.txt&#039;&#039;&#039; va conține cuvintele date, ordonate alfabetic, fiecare pe câte o linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* în listă sunt cel mult &#039;&#039;&#039;200&#039;&#039;&#039; de cuvinte, fiecare având cel mult &#039;&#039;&#039;30&#039;&#039;&#039; litere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sortarecuvinte1in.txt&lt;br /&gt;
 Dana&lt;br /&gt;
 Are&lt;br /&gt;
 Bomboane&lt;br /&gt;
; sortarecuvinte1out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 Are&lt;br /&gt;
 Bomboane&lt;br /&gt;
 Dana&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; sortarecuvinte1in.txt&lt;br /&gt;
 acestcuvantarepreamultelitereincuvant&lt;br /&gt;
; sortarecuvinte1out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(cuvinte_validare):&lt;br /&gt;
    # verificam daca numarul de cuvinte este in intervalul 0-200&lt;br /&gt;
    if len(cuvinte_validare) &amp;lt;= 0 or len(cuvinte_validare) &amp;gt; 200:&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca numarul de cuvinte nu este in intervalul 0-200&lt;br /&gt;
    for cuvant_validare in cuvinte_validare:    # parcurgem lista de cuvinte&lt;br /&gt;
        # verificam daca lungimea cuvantului este mai mica sau egala cu 30&lt;br /&gt;
        if len(cuvant_validare) &amp;gt; 30:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia sort_words sorteaza cuvintele in functie de ordinea alfabetica&lt;br /&gt;
def sort_words(cuvinte):&lt;br /&gt;
    # sortam cuvintele in functie de ordinea alfabetica&lt;br /&gt;
    cuvinte.sort()&lt;br /&gt;
    return cuvinte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;sortarecuvinte1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;sortarecuvinte1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim cuvintele&lt;br /&gt;
        cuvinte_main = [linie.strip() for linie in file_in]&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(cuvinte_main)&lt;br /&gt;
        # sortam cuvintele in functie de ordinea alfabetica&lt;br /&gt;
        cuvinte_sortate = sort_words(cuvinte_main)&lt;br /&gt;
        # scriem cuvintele sortate in fisierul de iesire&lt;br /&gt;
        for cuvant in cuvinte_sortate:&lt;br /&gt;
            file_out.write(cuvant + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # daca datele de intrare nu sunt valide, afisam un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # daca datele de intrare sunt incomplete, afisam un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0101_-_Sortare_Cuvinte&amp;diff=8073</id>
		<title>0101 - Sortare Cuvinte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0101_-_Sortare_Cuvinte&amp;diff=8073"/>
		<updated>2023-12-14T13:20:59Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Să se scrie un program care citește o propoziţie şi afişează cuvintele din propoziţie ordonate alfabetic. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;sortcuvin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie o propoziție alcătuită din litere mici ale alfabetului englez și spații. == Date de ieşire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;sortcuvout&amp;#039;&amp;#039;&amp;#039; va conține cuvintele din propoziție, ordonate alfabetic, fiecare pe câte o linie. == Restricții și precizări == * propozi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește o propoziţie şi afişează cuvintele din propoziţie ordonate alfabetic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sortcuvin.txt&#039;&#039;&#039; conține pe prima linie o propoziție alcătuită din litere mici ale alfabetului englez și spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sortcuvout&#039;&#039;&#039; va conține cuvintele din propoziție, ordonate alfabetic, fiecare pe câte o linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* propoziția va conține cel mult &#039;&#039;&#039;250&#039;&#039;&#039; de caractere;&lt;br /&gt;
* fiecare cuvânt din propoziție are cel mult &#039;&#039;&#039;20&#039;&#039;&#039; litere&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sortcuvin.txt&lt;br /&gt;
 dreptunghiul este un paralelogram cu un unghi drept&lt;br /&gt;
; sortcuvout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 cu&lt;br /&gt;
 drept&lt;br /&gt;
 dreptunghiul&lt;br /&gt;
 este&lt;br /&gt;
 paralelogram&lt;br /&gt;
 un&lt;br /&gt;
 un&lt;br /&gt;
 unghi&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; sortcuvin.txt&lt;br /&gt;
 acestcuvantaremaimulteliteredecatestepermis&lt;br /&gt;
; sortcuvout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# functia de validare verifica daca datele de intrare sunt in intervalul specificat&lt;br /&gt;
def validare(propozitie_validare):&lt;br /&gt;
    # verificam daca lungimea propozitiei este in intervalul 0-250&lt;br /&gt;
    if len(propozitie_validare) &amp;lt;= 0 or len(propozitie_validare) &amp;gt; 250:&lt;br /&gt;
        raise ValueError  # ridicam o eroare daca lungimea propozitiei nu este in intervalul 0-250&lt;br /&gt;
    for cuvant_validare in propozitie_validare.split():    # parcurgem lista de cuvinte&lt;br /&gt;
        # verificam daca lungimea cuvantului este mai mica sau egala cu 20&lt;br /&gt;
        if len(cuvant_validare) &amp;gt; 20:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # verificam daca cuvantul contine doar litere mici ale alfabetului englezesc&lt;br /&gt;
        if not cuvant_validare.islower():&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # verificam daca cuvantul contine numere&lt;br /&gt;
        if any(char.isdigit() for char in cuvant_validare):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# functia sort_words sorteaza cuvintele in functie de ordinea alfabetica&lt;br /&gt;
def sort_words(cuvinte):&lt;br /&gt;
    # sortam cuvintele in functie de ordinea alfabetica&lt;br /&gt;
    cuvinte.sort()&lt;br /&gt;
    return cuvinte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;sortcuvin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;sortcuvout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # citim propozitia&lt;br /&gt;
        propozitie_main = file_in.readline().strip()&lt;br /&gt;
        # validam datele de intrare&lt;br /&gt;
        validare(propozitie_main)&lt;br /&gt;
        # sortam cuvintele in functie de ordinea alfabetica&lt;br /&gt;
        cuvinte_sortate = sort_words(propozitie_main.split())&lt;br /&gt;
        # scriem cuvintele sortate in fisierul de iesire&lt;br /&gt;
        for cuvant in cuvinte_sortate:&lt;br /&gt;
            file_out.write(cuvant + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # daca datele de intrare nu sunt valide, afisam un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # daca datele de intrare sunt incomplete, afisam un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0892_-_Pasareste_1&amp;diff=8013</id>
		<title>0892 - Pasareste 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0892_-_Pasareste_1&amp;diff=8013"/>
		<updated>2023-12-13T16:21:58Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Limba păsărească este foarte simplă; și asemănătoare cu limba română! Un text scris în română se traduce în păsărește astfel: după fiecare vocală se inserează litera &#039;&#039;&#039;p&#039;&#039;&#039; și vocala respectivă.&lt;br /&gt;
&lt;br /&gt;
Se dă o propoziție scrisă în limba păsărească. Să se traducă în limba română.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran șirul &#039;&#039;&#039;t&#039;&#039;&#039;, reprezentând traducerea în română a șirului &#039;&#039;&#039;s&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirurile &#039;&#039;&#039;s&#039;&#039;&#039; și &#039;&#039;&#039;t&#039;&#039;&#039; vor avea cel mult &#039;&#039;&#039;255&#039;&#039;&#039; de caractere&lt;br /&gt;
* șirul &#039;&#039;&#039;s&#039;&#039;&#039; va conține litere mici ale alfabetului englez și spații&lt;br /&gt;
* vocalele sunt: &#039;&#039;&#039;aeiou&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;șirul dat în limba păsărească este corect&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 apanapa aparepe meperepe&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 ana are mere&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 78675878576875&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor s&lt;br /&gt;
def verificare(s_val):&lt;br /&gt;
    # Verificăm dacă s respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= len(s_val) &amp;lt;= 255 and all(c.islower() or c.isspace() for c in s_val):&lt;br /&gt;
        # Dacă valorile sunt valide, returnăm True&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă valorile nu sunt valide, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru traducerea din limba păsărească în română&lt;br /&gt;
def traducere_pasareasca(s_pasareasca):&lt;br /&gt;
    vocale = &#039;aeiou&#039;&lt;br /&gt;
    t = &#039;&#039;&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; len(s_pasareasca):&lt;br /&gt;
        if s_pasareasca[i] in vocale:&lt;br /&gt;
            t += s_pasareasca[i]&lt;br /&gt;
            i += 3&lt;br /&gt;
        else:&lt;br /&gt;
            t += s_pasareasca[i]&lt;br /&gt;
            i += 1&lt;br /&gt;
    return t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Verificăm dacă acest script este rulat direct (nu este importat ca modul)&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de caractere&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(s):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Traducem șirul din limba păsărească în română și îl afișăm&lt;br /&gt;
        print(traducere_pasareasca(s))&lt;br /&gt;
&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt valide&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0892_-_Pasareste_1&amp;diff=8011</id>
		<title>0892 - Pasareste 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0892_-_Pasareste_1&amp;diff=8011"/>
		<updated>2023-12-13T16:17:46Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă un vector cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; elemente, numere naturale și un număr &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;. Ordonați crescător primele &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; elemente ale vectorului și descrescător ultimele &amp;#039;&amp;#039;&amp;#039;n-k&amp;#039;&amp;#039;&amp;#039; elemente.Pentru sortare se va folosit metoda &amp;#039;&amp;#039;&amp;#039;QuickSort&amp;#039;&amp;#039;&amp;#039; sau &amp;#039;&amp;#039;&amp;#039;MergeSort&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;, iar apoi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale, reprezentând elementele vectorului. == Date de ieşire == Programul va afișa pe ecra...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un vector cu &#039;&#039;&#039;n&#039;&#039;&#039; elemente, numere naturale și un număr &#039;&#039;&#039;k&#039;&#039;&#039;. Ordonați crescător primele &#039;&#039;&#039;k&#039;&#039;&#039; elemente ale vectorului și descrescător ultimele &#039;&#039;&#039;n-k&#039;&#039;&#039; elemente.Pentru sortare se va folosit metoda &#039;&#039;&#039;QuickSort&#039;&#039;&#039; sau &#039;&#039;&#039;MergeSort&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, reprezentând elementele vectorului.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran elementele vectorului, separate prin exact un spațiu, după efectuarea operațiilor cerute.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; k &amp;lt; n &amp;amp;les; 200 000&#039;&#039;&#039;&lt;br /&gt;
* cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1 000 000 000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 7 3&lt;br /&gt;
 13 1 10 15 3 7 11&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 1 10 13 15 11 7 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 fhgjfhgfgj&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor n, k și a elementelor vectorului&lt;br /&gt;
def verificare(n_val, k_val, vector_verificare):&lt;br /&gt;
    # Verificăm dacă n și k respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= k_val &amp;lt; n_val &amp;lt;= 200000:&lt;br /&gt;
        # Verificăm dacă toate elementele vectorului sunt mai mici decât 1 000 000 000&lt;br /&gt;
        if all(x &amp;lt; 1000000000 for x in vector_verificare):&lt;br /&gt;
            # Dacă toate condițiile sunt îndeplinite, returnăm True&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru sortarea vectorului&lt;br /&gt;
def sortare_vector(k_val, vector_sortare):&lt;br /&gt;
    # Sortăm primele k elemente în ordine crescătoare&lt;br /&gt;
    vector_sortare[:k_val] = sorted(vector_sortare[:k_val])&lt;br /&gt;
    # Sortăm ultimele elemente în ordine descrescătoare&lt;br /&gt;
    vector_sortare[k_val:] = sorted(vector_sortare[k_val:], reverse=True)&lt;br /&gt;
    # Returnăm vectorul sortat&lt;br /&gt;
    return vector_sortare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    &lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de elemente din vector&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti numarul de elemente din vector: &amp;quot;))&lt;br /&gt;
        # Citim numărul k&lt;br /&gt;
        k = int(input(&amp;quot;Introduceti numarul k: &amp;quot;))&lt;br /&gt;
        # Citim elementele vectorului&lt;br /&gt;
        vector = list(map(int, input(&amp;quot;Introduceti elementele vectorului: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(n, k, vector):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            # Sortăm vectorul și afișăm rezultatul&lt;br /&gt;
            print(&#039; &#039;.join(map(str, sortare_vector(k, vector))))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt numere&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1157_-_KSort2&amp;diff=7962</id>
		<title>1157 - KSort2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1157_-_KSort2&amp;diff=7962"/>
		<updated>2023-12-12T22:17:17Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă un vector cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; elemente, numere naturale și un număr &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;. Ordonați crescător primele &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; elemente ale vectorului și descrescător ultimele &amp;#039;&amp;#039;&amp;#039;n-k&amp;#039;&amp;#039;&amp;#039; elemente.Pentru sortare se va folosit metoda &amp;#039;&amp;#039;&amp;#039;QuickSort&amp;#039;&amp;#039;&amp;#039; sau &amp;#039;&amp;#039;&amp;#039;MergeSort&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;, iar apoi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale, reprezentând elementele vectorului. == Date de ieşire == Programul va afișa pe ecra...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un vector cu &#039;&#039;&#039;n&#039;&#039;&#039; elemente, numere naturale și un număr &#039;&#039;&#039;k&#039;&#039;&#039;. Ordonați crescător primele &#039;&#039;&#039;k&#039;&#039;&#039; elemente ale vectorului și descrescător ultimele &#039;&#039;&#039;n-k&#039;&#039;&#039; elemente.Pentru sortare se va folosit metoda &#039;&#039;&#039;QuickSort&#039;&#039;&#039; sau &#039;&#039;&#039;MergeSort&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, reprezentând elementele vectorului.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran elementele vectorului, separate prin exact un spațiu, după efectuarea operațiilor cerute.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; k &amp;lt; n &amp;amp;les; 200 000&#039;&#039;&#039;&lt;br /&gt;
* cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1 000 000 000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 7 3&lt;br /&gt;
 13 1 10 15 3 7 11&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 1 10 13 15 11 7 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 fhgjfhgfgj&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Definim funcția de verificare a valorilor n, k și a elementelor vectorului&lt;br /&gt;
def verificare(n_val, k_val, vector_verificare):&lt;br /&gt;
    # Verificăm dacă n și k respectă restricțiile problemei&lt;br /&gt;
    if 1 &amp;lt;= k_val &amp;lt; n_val &amp;lt;= 200000:&lt;br /&gt;
        # Verificăm dacă toate elementele vectorului sunt mai mici decât 1 000 000 000&lt;br /&gt;
        if all(x &amp;lt; 1000000000 for x in vector_verificare):&lt;br /&gt;
            # Dacă toate condițiile sunt îndeplinite, returnăm True&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Definim funcția pentru sortarea vectorului&lt;br /&gt;
def sortare_vector(k_val, vector_sortare):&lt;br /&gt;
    # Sortăm primele k elemente în ordine crescătoare&lt;br /&gt;
    vector_sortare[:k_val] = sorted(vector_sortare[:k_val])&lt;br /&gt;
    # Sortăm ultimele elemente în ordine descrescătoare&lt;br /&gt;
    vector_sortare[k_val:] = sorted(vector_sortare[k_val:], reverse=True)&lt;br /&gt;
    # Returnăm vectorul sortat&lt;br /&gt;
    return vector_sortare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    &lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de elemente din vector&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti numarul de elemente din vector: &amp;quot;))&lt;br /&gt;
        # Citim numărul k&lt;br /&gt;
        k = int(input(&amp;quot;Introduceti numarul k: &amp;quot;))&lt;br /&gt;
        # Citim elementele vectorului&lt;br /&gt;
        vector = list(map(int, input(&amp;quot;Introduceti elementele vectorului: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă datele introduse sunt valide&lt;br /&gt;
        if verificare(n, k, vector):&lt;br /&gt;
            # Dacă datele sunt valide, afișăm un mesaj de confirmare&lt;br /&gt;
            print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            # Sortăm vectorul și afișăm rezultatul&lt;br /&gt;
            print(&#039; &#039;.join(map(str, sortare_vector(k, vector))))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    # Tratăm cazul în care datele introduse nu sunt numere&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0637_%E2%80%93_Frunze&amp;diff=7739</id>
		<title>0637 – Frunze</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0637_%E2%80%93_Frunze&amp;diff=7739"/>
		<updated>2023-12-10T13:38:46Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se dă vectorul de tați al unui arbore cu rădăcină cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri. Determinați rădăcina arborelui și frunzele acestuia. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;frunzein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul de noduri &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații. == Date de ieşire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;frunzeout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie rădăcina arborelui. A doua li...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă vectorul de tați al unui arbore cu rădăcină cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri. Determinați rădăcina arborelui și frunzele acestuia.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;frunzein.txt&#039;&#039;&#039; conține pe prima linie numărul de noduri &#039;&#039;&#039;n&#039;&#039;&#039;. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;frunzeout.txt&#039;&#039;&#039; va conține pe prima linie rădăcina arborelui. A doua linia va conține numărul de frunze din arbore, iar următoarea linie frunzele, în ordine crescătoare și separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
* în vectorul de tați rădăcina este marcată cu &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; frunzein.txt&lt;br /&gt;
 7&lt;br /&gt;
 4 1 7 0 7 7 1&lt;br /&gt;
; frunzeout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 4&lt;br /&gt;
 4&lt;br /&gt;
 2 3 5 6  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; frunzein.txt&lt;br /&gt;
 jjgrgjrfrf&lt;br /&gt;
; frunzeout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, tati_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-100&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-100&lt;br /&gt;
    # Verificăm dacă rădăcina este marcată cu 0 în vectorul de tați&lt;br /&gt;
    if 0 not in tati_validare:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă rădăcina nu este marcată cu 0&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția radacina_frunze determină rădăcina arborelui și frunzele acestuia&lt;br /&gt;
def radacina_frunze(n, tati):&lt;br /&gt;
    # Rădăcina arborelui este nodul care are tatăl 0&lt;br /&gt;
    radacina_tati = tati.index(0) + 1&lt;br /&gt;
    # Frunzele arborelui sunt nodurile care nu sunt tați pentru niciun nod&lt;br /&gt;
    frunze_tati = sorted(set(range(1, n + 1)) - set(tati))&lt;br /&gt;
    return radacina_tati, frunze_tati&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;frunzein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;frunzeout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de noduri&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim vectorul de tați&lt;br /&gt;
        tati_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, tati_main)&lt;br /&gt;
        # Determinăm rădăcina arborelui și frunzele acestuia&lt;br /&gt;
        radacina, frunze = radacina_frunze(n_main, tati_main)&lt;br /&gt;
        # Scriem rădăcina și frunzele în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(radacina) + &#039;\n&#039;)&lt;br /&gt;
        file_out.write(str(len(frunze)) + &#039;\n&#039;)&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, frunze)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1906_-_Memory_007&amp;diff=7735</id>
		<title>1906 - Memory 007</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1906_-_Memory_007&amp;diff=7735"/>
		<updated>2023-12-10T13:18:46Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Agentul 007 a uitat cifrul seifului în care păstra documentele, însă ştie cum poate fi aflat. Are nişte cartonaşe pe care sunt notate &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale distincte din intervalul [ &amp;#039;&amp;#039;&amp;#039;a,b&amp;#039;&amp;#039;&amp;#039; ]. Mai are o listă cu &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; numere naturale distincte care reprezintă anumite poziţii din şirul ordonat crescător al numerelor de pe cartonaşe. Însumând numerele aflate pe poziţiile din listă se determină un număr natural care reprezintă cifrul sei...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Agentul 007 a uitat cifrul seifului în care păstra documentele, însă ştie cum poate fi aflat. Are nişte cartonaşe pe care sunt notate &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale distincte din intervalul [ &#039;&#039;&#039;a,b&#039;&#039;&#039; ]. Mai are o listă cu &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale distincte care reprezintă anumite poziţii din şirul ordonat crescător al numerelor de pe cartonaşe. Însumând numerele aflate pe poziţiile din listă se determină un număr natural care reprezintă cifrul seifului. Cum Agentul 007 nu a mai programat din liceu, vă roagă pe voi să găsiţi cifrul în schimbul a 100 de … puncte.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;memory007in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n,m,a,b&#039;&#039;&#039;, pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale distincte separate prin spații reprezentând numerele de pe cartonaşe, iar pe a treia linie &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale distincte reprezentând poziţiile din listă.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;memory007out.txt&#039;&#039;&#039; va conține pe prima linie cifrul seifului.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; m &amp;amp;les; n &amp;amp;les; 500.000&#039;&#039;&#039;&lt;br /&gt;
* numerele de pe cartonaşe vor fi distincte şi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* numerele din listă vor fi naturale nenule, distincte şi mai mici sau egale cu &#039;&#039;&#039;n&#039;&#039;&#039;, ordonate crescător&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; a &amp;amp;les; b &amp;amp;les; 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;n &amp;amp;les; b - a &amp;amp;les; 700.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; memory007in.txt&lt;br /&gt;
 5 3 30 80&lt;br /&gt;
 78 56 34 45 61&lt;br /&gt;
 1 2 5&lt;br /&gt;
; memory007out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 157&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Numerele de pe cartonaşe sunt &#039;&#039;&#039;78,56,34,45,61&#039;&#039;&#039; şi sunt din intervalul [ &#039;&#039;&#039;30,80&#039;&#039;&#039; ]. Ordonate crescător formează şirul &#039;&#039;&#039;34,45,56,61,78&#039;&#039;&#039;. Numerele din listă, adică &#039;&#039;&#039;1,2,5&#039;&#039;&#039;, ne spun că cifrul se obţine însumând numerele de pe poziţiile &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;&#039;2&#039;&#039;&#039; şi &#039;&#039;&#039;5&#039;&#039;&#039; din şirul ordonat crescător al numerelor de pe cartonaşe, adică cifrul este &#039;&#039;&#039;34+45+78=157&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; memory007in.txt&lt;br /&gt;
 rhgurhkfgrjg&lt;br /&gt;
; memory007out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, m_validare, a_validare, b_validare, cartonase_validare, pozitii_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-500000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 500000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    # Verificăm dacă m este în intervalul 1-n&lt;br /&gt;
    if m_validare &amp;lt; 1 or m_validare &amp;gt; n_validare:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    # Verificăm dacă a este în intervalul 1-1000000000&lt;br /&gt;
    if a_validare &amp;lt; 1 or a_validare &amp;gt; 1000000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    # Verificăm dacă b este în intervalul a-1000000000&lt;br /&gt;
    if b_validare &amp;lt; a_validare or b_validare &amp;gt; 1000000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if n_validare &amp;gt; b_validare - a_validare or b_validare - a_validare &amp;gt; 700000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă aceste condiții nu sunt îndeplinite&lt;br /&gt;
    # Parcurgem lista de valori de pe cartonașe&lt;br /&gt;
    for valoare in cartonase_validare:&lt;br /&gt;
        # Verificăm dacă valoarea este în intervalul a-b&lt;br /&gt;
        if valoare &amp;lt; a_validare or valoare &amp;gt; b_validare:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    for pozitie in pozitii_validare:    # Parcurgem lista de poziții&lt;br /&gt;
        # Verificăm dacă poziția este în intervalul 1-n&lt;br /&gt;
        if pozitie &amp;lt; 1 or pozitie &amp;gt; n_validare:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția cifru_seif calculează cifrul seifului&lt;br /&gt;
def cifru_seif(cartonase, pozitii):&lt;br /&gt;
    cartonase.sort()&lt;br /&gt;
    cifru_calcul = sum(cartonase[pozitie - 1] for pozitie in pozitii)&lt;br /&gt;
    return cifru_calcul&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;memory007in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;memory007out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de cartonașe, numărul de poziții, limita inferioară și limita superioară a intervalului&lt;br /&gt;
        n_main, m_main, a_main, b_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim valorile de pe cartonașe&lt;br /&gt;
        cartonase_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Citim pozițiile&lt;br /&gt;
        pozitii_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, m_main, a_main, b_main, cartonase_main, pozitii_main)&lt;br /&gt;
        # Calculăm cifrul seifului&lt;br /&gt;
        cifru = cifru_seif(cartonase_main, pozitii_main)&lt;br /&gt;
        # Scriem cifrul în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(cifru) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4301_-_Gustare&amp;diff=7695</id>
		<title>4301 - Gustare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4301_-_Gustare&amp;diff=7695"/>
		<updated>2023-12-09T15:43:09Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == A venit ora mesei pentru Por Costel (masa dintre prânz și cină). Scormonind printr-o grădină, el descoperă un număr de &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coceni de porumb și &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; mere. Masa lui Por Costel va consta în exact un cocean și un măr. Însă, mai nou, fanii săi l-au atenționat că trebuie să aibă grijă ce mănâncă. Fiecare cocean și fiecare măr are o valoare nutritivă. Valoarea nutritivă a mesei va fi valoarea nutritivă a coceanului ales + valoarea nut...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
A venit ora mesei pentru Por Costel (masa dintre prânz și cină). Scormonind printr-o grădină, el descoperă un număr de &#039;&#039;&#039;N&#039;&#039;&#039; coceni de porumb și &#039;&#039;&#039;M&#039;&#039;&#039; mere. Masa lui Por Costel va consta în exact un cocean și un măr. Însă, mai nou, fanii săi l-au atenționat că trebuie să aibă grijă ce mănâncă. Fiecare cocean și fiecare măr are o valoare nutritivă. Valoarea nutritivă a mesei va fi valoarea nutritivă a coceanului ales + valoarea nutritiva a mărului ales. Dându-se valorile nutritive ale cocenilor și ale merelor, Por Costel vă întreabă dacă există o masă pe care o poate lua cu valoare nutritivă &#039;&#039;&#039;X&#039;&#039;&#039;. Pentru că Por Costel vrea sa mănânce de mai multe ori între prânz și cină, el va vă pune &#039;&#039;&#039;T&#039;&#039;&#039; întrebări de forma aceasta.&lt;br /&gt;
(Întrebările sunt independente între ele, a nu se considera că după o întrebare se elimină perechea cocean-mar aleasă).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;gustarein.txt&#039;&#039;&#039; se găsește un număr natural &#039;&#039;&#039;N&#039;&#039;&#039;: numărul de coceni. Pe a doua linie se găsește o secvență de &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale separate prin câte un spațiu (valorile nutritive ale cocenilor). Pe a treia linie se găsește un număr natural &#039;&#039;&#039;M&#039;&#039;&#039;: numărul de mere. Pe a patra linie se găsește o secvență de &#039;&#039;&#039;M&#039;&#039;&#039; numere naturale separate prin câte un spațiu (valorile nutritive ale merelor). Pe a cincea linie se găsește un număr natural &#039;&#039;&#039;T&#039;&#039;&#039;, numărul de întrebări ale lui Por Costel. Pe a sasea linie se gasește o secvență de &#039;&#039;&#039;T&#039;&#039;&#039; numere naturale separate prin câte un spațiu, al &#039;&#039;&#039;i&#039;&#039;&#039;-lea număr fiind valoarea dorită pentru cea de a i-a masă.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
În fișierul &#039;&#039;&#039;gustareout.txt&#039;&#039;&#039; se vor scrie &#039;&#039;&#039;T&#039;&#039;&#039; linii corespunzătoare celor &#039;&#039;&#039;T&#039;&#039;&#039; întrebări. A &#039;&#039;&#039;i&#039;&#039;&#039;-a linie va conține mesajul &#039;&#039;&#039;DA&#039;&#039;&#039; dacă se poate forma valoarea nutritivă pentru a &#039;&#039;&#039;i&#039;&#039;&#039;-a masă și &#039;&#039;&#039;NU&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;N, M ≤ 500.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;T ≤ 100&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;0 ≤&#039;&#039;&#039; valoare nutritiva a unui aliment &#039;&#039;&#039;≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;0 ≤&#039;&#039;&#039; valoarea X a unei intrebari &#039;&#039;&#039;≤ 2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* Pentru &#039;&#039;&#039;20&#039;&#039;&#039; de puncte, &#039;&#039;&#039;N, M ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
* Pentru alte &#039;&#039;&#039;50&#039;&#039;&#039; de puncte, &#039;&#039;&#039;T ≤ 20&#039;&#039;&#039; &lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; gustarein.txt&lt;br /&gt;
 4&lt;br /&gt;
 2 2 3 5&lt;br /&gt;
 3&lt;br /&gt;
 2 4 6&lt;br /&gt;
 5&lt;br /&gt;
 6 20 10 11 7&lt;br /&gt;
; gustareout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 DA&lt;br /&gt;
 NU&lt;br /&gt;
 NU&lt;br /&gt;
 DA &lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; gustarein.txt&lt;br /&gt;
 jgjikfikm&lt;br /&gt;
; gustareout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, m_validare, t_validare, coceni_validare, mere_validare, intrebari_validare):&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 500000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if m_validare &amp;lt; 1 or m_validare &amp;gt; 500000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if t_validare &amp;lt; 1 or t_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for valoare in coceni_validare + mere_validare:&lt;br /&gt;
        if valoare &amp;lt; 0 or valoare &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    for x in intrebari_validare:&lt;br /&gt;
        if x &amp;lt; 0 or x &amp;gt; 2000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția exista_masa verifică dacă există o masă cu valoare nutritivă X&lt;br /&gt;
def exista_masa(coceni, mere, intrebari):&lt;br /&gt;
    raspunsuri_creare = []&lt;br /&gt;
    for x in intrebari:&lt;br /&gt;
        exista = &#039;NU&#039;&lt;br /&gt;
        for cocean in coceni:&lt;br /&gt;
            if x - cocean in mere:&lt;br /&gt;
                exista = &#039;DA&#039;&lt;br /&gt;
                break&lt;br /&gt;
        raspunsuri_creare.append(exista)&lt;br /&gt;
    return raspunsuri_creare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;gustarein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;gustareout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de coceni, numărul de mere și numărul de întrebări&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        coceni_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        m_main = int(file_in.readline())&lt;br /&gt;
        mere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        t_main = int(file_in.readline())&lt;br /&gt;
        intrebari_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, m_main, t_main, coceni_main, mere_main, intrebari_main)&lt;br /&gt;
        # Verificăm dacă există o masă cu valoare nutritivă X pentru fiecare întrebare&lt;br /&gt;
        raspunsuri = exista_masa(coceni_main, mere_main, intrebari_main)&lt;br /&gt;
        # Scriem răspunsurile în fișierul de ieșire&lt;br /&gt;
        for raspuns in raspunsuri:&lt;br /&gt;
            file_out.write(raspuns + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4300_-_Secv_Fb&amp;diff=7694</id>
		<title>4300 - Secv Fb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4300_-_Secv_Fb&amp;diff=7694"/>
		<updated>2023-12-09T15:24:45Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: == Cerinţa == Se citește un număr &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;, un număr &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; și apoi un șir cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere naturale. Determinați câte secvențe de lungime exact &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; au elementele distincte. Prin secvență înțelegem un set de elemente aflate pe poziții consecutive. == Date de intrare == Pe prima linie a fișierului &amp;#039;&amp;#039;&amp;#039;secv_fbin.txt&amp;#039;&amp;#039;&amp;#039; se găsesc două numere naturale, separate prin exact un spațiu, &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039;. Pe linia a doua se găsesc cele &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere ale șir...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citește un număr &#039;&#039;&#039;N&#039;&#039;&#039;, un număr &#039;&#039;&#039;K&#039;&#039;&#039; și apoi un șir cu &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Determinați câte secvențe de lungime exact &#039;&#039;&#039;K&#039;&#039;&#039; au elementele distincte. Prin secvență înțelegem un set de elemente aflate pe poziții consecutive.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;secv_fbin.txt&#039;&#039;&#039; se găsesc două numere naturale, separate prin exact un spațiu, &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;K&#039;&#039;&#039;. Pe linia a doua se găsesc cele &#039;&#039;&#039;N&#039;&#039;&#039; numere ale șirului, separate prin câte un spațiu.numere întregi separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;secv_fbout.txt&#039;&#039;&#039; se găsește un număr natural ce reprezintă valoarea cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;2 &amp;amp;les; N &amp;amp;les; 100.000&#039;&#039;&#039;;&lt;br /&gt;
* Pentru &#039;&#039;&#039;20&#039;&#039;&#039; de puncte &#039;&#039;&#039;K = 2&#039;&#039;&#039;;&lt;br /&gt;
* Pentru alte &#039;&#039;&#039;20&#039;&#039;&#039; de puncte &#039;&#039;&#039;K = 3&#039;&#039;&#039;;&lt;br /&gt;
* Pentru alte &#039;&#039;&#039;20&#039;&#039;&#039; de puncte &#039;&#039;&#039;4 &amp;amp;les; K &amp;amp;les; 10&#039;&#039;&#039;;&lt;br /&gt;
* Pentru alte &#039;&#039;&#039;20&#039;&#039;&#039; de puncte, &#039;&#039;&#039;10 &amp;lt; K &amp;amp;les; n-1&#039;&#039;&#039; și valorile din șir &#039;&#039;&#039;&amp;amp;les; 100.000&#039;&#039;&#039;;&lt;br /&gt;
* Pentru restul testelor &#039;&#039;&#039;10 &amp;lt; K &amp;amp;les; n-1&#039;&#039;&#039; și valorile din șir &#039;&#039;&#039;&amp;amp;les; 2.000.000.000&#039;&#039;&#039;; &lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; secv_fbin.txt&lt;br /&gt;
 8 3&lt;br /&gt;
 3 2 4 3 4 5 6 7&lt;br /&gt;
; sortcif2out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 5&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; secv_fbin.txt&lt;br /&gt;
 jfgjfkljd&lt;br /&gt;
; sortcif2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, k_validare, numere_validare):&lt;br /&gt;
    if n_validare &amp;lt; 2 or n_validare &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if k_validare &amp;lt; 2 or k_validare &amp;gt; n_validare:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if k_validare == 2 or k_validare == 3 or (4 &amp;lt;= k_validare &amp;lt;= 10) or (10 &amp;lt; k_validare &amp;lt;= n_validare - 1):&lt;br /&gt;
        for numar in numere_validare:&lt;br /&gt;
            if numar &amp;lt; 1 or numar &amp;gt; 100000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
    else:&lt;br /&gt;
        for numar in numere_validare:&lt;br /&gt;
            if numar &amp;lt; 1 or numar &amp;gt; 2000000000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția secvente_distincte calculează câte secvențe de lungime exact K au elementele distincte&lt;br /&gt;
def secvente_distincte(numere, k):&lt;br /&gt;
    raspunsuri = 0&lt;br /&gt;
    for i in range(len(numere) - k + 1):&lt;br /&gt;
        if len(set(numere[i:i+k])) == k:&lt;br /&gt;
            raspunsuri += 1&lt;br /&gt;
    return raspunsuri&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;secv_fbin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;secv_fbout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de numere și lungimea secvenței&lt;br /&gt;
        n_main, k_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim numerele&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, k_main, numere_main)&lt;br /&gt;
        # Calculăm câte secvențe de lungime exact K au elementele distincte&lt;br /&gt;
        raspuns = secvente_distincte(numere_main, k_main)&lt;br /&gt;
        # Scriem răspunsul în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(raspuns) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2789_-_Cb3&amp;diff=7693</id>
		<title>2789 - Cb3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2789_-_Cb3&amp;diff=7693"/>
		<updated>2023-12-09T14:57:56Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Pagină nouă: Se consideră un șir de numere naturale nenule &amp;#039;&amp;#039;&amp;#039;a[1], a[2], ..., a[n]&amp;#039;&amp;#039;&amp;#039;. Asupra șirului se efectuează &amp;#039;&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;&amp;#039; interogări de forma: &amp;#039;&amp;#039;&amp;#039;care este numărul maxim de elemente ale șirului a căror sumă nu depășește valoarea S&amp;#039;&amp;#039;&amp;#039; ? == Cerinţa == Trebuie să răspundeți la cele &amp;#039;&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;&amp;#039; interogări. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;cb3in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numerele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;&amp;#039;. Pe a doua linie &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale nenule, separate pri...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră un șir de numere naturale nenule &#039;&#039;&#039;a[1], a[2], ..., a[n]&#039;&#039;&#039;. Asupra șirului se efectuează &#039;&#039;&#039;Q&#039;&#039;&#039; interogări de forma: &#039;&#039;&#039;care este numărul maxim de elemente ale șirului a căror sumă nu depășește valoarea S&#039;&#039;&#039; ?&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Trebuie să răspundeți la cele &#039;&#039;&#039;Q&#039;&#039;&#039; interogări.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;cb3in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;Q&#039;&#039;&#039;. Pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule, separate prin spații, ce reprezintă elementele șirului. Pe următoarele &#039;&#039;&#039;Q&#039;&#039;&#039; linii se află sumele aferente celor &#039;&#039;&#039;Q&#039;&#039;&#039; interogări.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;cb3out.txt&#039;&#039;&#039; va conține pe câte o linie răspunsurile la cele &#039;&#039;&#039;Q&#039;&#039;&#039; interogări.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 10.000&lt;br /&gt;
* 1 &amp;amp;les; Q &amp;amp;les; 100.000&lt;br /&gt;
* 1 &amp;amp;les; S &amp;amp;les; 2.000.000.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; cb3in.txt&lt;br /&gt;
 5 3&lt;br /&gt;
 1 2 3 4 5&lt;br /&gt;
 6&lt;br /&gt;
 17&lt;br /&gt;
 5&lt;br /&gt;
; cb3out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 3&lt;br /&gt;
 5&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; cb3in.txt&lt;br /&gt;
 fhfthtfhft&lt;br /&gt;
; cb3out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, q_validare, numere_validare, sume_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-10000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 10000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000&lt;br /&gt;
    # Verificăm dacă Q este în intervalul 1-100000&lt;br /&gt;
    if q_validare &amp;lt; 1 or q_validare &amp;gt; 100000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă Q nu este în intervalul 1-100000&lt;br /&gt;
    for numar in numere_validare:    # Parcurgem lista de numere&lt;br /&gt;
        # Verificăm dacă numărul este mai mic decât 1000000&lt;br /&gt;
        if numar &amp;gt;= 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    for suma in sume_validare:  # Parcurgem lista de sume&lt;br /&gt;
        # Verificăm dacă suma este în intervalul 1-2000000000&lt;br /&gt;
        if suma &amp;lt; 1 or suma &amp;gt; 2000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția max_elemente calculează numărul maxim de elemente ale șirului a căror sumă nu depășește valoarea S&lt;br /&gt;
def max_elemente(numere, sume):&lt;br /&gt;
    numere.sort()  # Sortăm numerele în ordine crescătoare&lt;br /&gt;
    raspunsuri_elemente = []  # Inițializăm lista de răspunsuri&lt;br /&gt;
    for S in sume:  # Pentru fiecare sumă S&lt;br /&gt;
        suma = 0&lt;br /&gt;
        nr_elemente = 0&lt;br /&gt;
        for numar in numere:  # Pentru fiecare număr din șir&lt;br /&gt;
            if suma + numar &amp;lt;= S:  # Dacă suma curentă plus numărul curent nu depășește S&lt;br /&gt;
                suma += numar  # Adăugăm numărul la sumă&lt;br /&gt;
                nr_elemente += 1  # Creștem numărul de elemente&lt;br /&gt;
            else:  # Dacă suma curentă plus numărul curent depășește S&lt;br /&gt;
                break  # Întrerupem bucla&lt;br /&gt;
        raspunsuri_elemente.append(nr_elemente)  # Adăugăm numărul de elemente la lista de răspunsuri&lt;br /&gt;
    return raspunsuri_elemente&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;cb3in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;cb3out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de numere și numărul de interogări&lt;br /&gt;
        n_main, Q_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim numerele&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Citim sumele&lt;br /&gt;
        sume_main = [int(file_in.readline()) for _ in range(Q_main)]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, Q_main, numere_main, sume_main)&lt;br /&gt;
        # Calculăm numărul maxim de elemente ale șirului a căror sumă nu depășește valoarea S pentru fiecare interogare&lt;br /&gt;
        raspunsuri = max_elemente(numere_main, sume_main)&lt;br /&gt;
        # Scriem răspunsurile în fișierul de ieșire&lt;br /&gt;
        for raspuns in raspunsuri:&lt;br /&gt;
            file_out.write(str(raspuns) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0131_-_Sort_Cif_2&amp;diff=7517</id>
		<title>0131 - Sort Cif 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0131_-_Sort_Cif_2&amp;diff=7517"/>
		<updated>2023-11-27T15:16:50Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dă un vector cu &#039;&#039;&#039;n&#039;&#039;&#039; elemente numere întregi.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se ordoneze crescător elementele unui vector crescător după prima cifră.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;sortcif2in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039; si pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;sortcif2out.txt&#039;&#039;&#039; va conţine pe prima linie cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 0 &amp;lt; n &amp;amp;les; 100&lt;br /&gt;
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &#039;&#039;&#039;2 &amp;lt;sup&amp;gt; 30 &amp;lt;/sup&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sortcif2in.txt&lt;br /&gt;
 6&lt;br /&gt;
 89 2246 91 4005 51 721&lt;br /&gt;
; sortcif2out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 2246 4005 51 721 89 91&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; sortcif2in.txt&lt;br /&gt;
 -1&lt;br /&gt;
 101&lt;br /&gt;
; sortcif2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(validare_cif, numere_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 0-100&lt;br /&gt;
    if validare_cif &amp;lt;= 0 or validare_cif &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 0-100&lt;br /&gt;
    for numar in numere_validare:    # Parcurgem lista de numere&lt;br /&gt;
        # Verificăm dacă valoarea absolută a numărului este mai mică decât 2^30&lt;br /&gt;
        if abs(numar) &amp;gt;= 2**30:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția sort_numbers sortează numerele în funcție de prima cifră&lt;br /&gt;
def sort_numbers(numere):&lt;br /&gt;
    # Sortăm numerele în funcție de prima cifră&lt;br /&gt;
    numere.sort(key=lambda x: int(str(abs(x))[0]))&lt;br /&gt;
    return numere&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;sortcif2in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;sortcif2out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de numere&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim numerele&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, numere_main)&lt;br /&gt;
        # Sortăm numerele în funcție de prima cifră&lt;br /&gt;
        numere_sortate = sort_numbers(numere_main)&lt;br /&gt;
        # Scriem numerele sortate în fișierul de ieșire&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, numere_sortate)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0269_-_Puteri_K&amp;diff=7506</id>
		<title>0269 - Puteri K</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0269_-_Puteri_K&amp;diff=7506"/>
		<updated>2023-11-27T15:09:05Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale şi un număr natural &#039;&#039;&#039;k&#039;&#039;&#039;. Afişaţi în ordine crescătoare acele numere date care sunt puteri ale lui &#039;&#039;&#039;k&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;puterikin.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;k&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;puterikout.txt&#039;&#039;&#039; va conţine pe prima linie numerele care sunt puteri ale lui &#039;&#039;&#039;k&#039;&#039;&#039;, separate printr-un spaţiu, în ordine crescătoare.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 100&lt;br /&gt;
* 2 &amp;amp;les; k &amp;amp;les; 10&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult &#039;&#039;&#039;8&#039;&#039;&#039; cifre&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; puterikin.txt&lt;br /&gt;
 8 2&lt;br /&gt;
 32 56 317 809 256 2 1 60&lt;br /&gt;
; puterikout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 1 2 32 256&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; puterikin.txt&lt;br /&gt;
 gjkfjgkfjgkfgf&lt;br /&gt;
; puterikout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, k_validare, numere_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-100&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-100&lt;br /&gt;
    # Verificăm dacă k este în intervalul 2-10&lt;br /&gt;
    if k_validare &amp;lt; 2 or k_validare &amp;gt; 10:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă k nu este în intervalul 2-10&lt;br /&gt;
    for numar in numere_validare:    # Parcurgem lista de numere&lt;br /&gt;
        # Verificăm dacă numărul are cel mult 8 cifre&lt;br /&gt;
        if len(str(numar)) &amp;gt; 8:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția puterik calculează numerele care sunt puteri ale lui k&lt;br /&gt;
def puterik(k, numere):&lt;br /&gt;
    import math  # Importăm modulul math pentru a folosi funcția log&lt;br /&gt;
    # Verificăm dacă fiecare număr este o putere a lui k și creăm o listă cu aceste numere&lt;br /&gt;
    puteri_k = [num for num in numere if (num != 0 and ((math.log(num, k) % 1) == 0))]&lt;br /&gt;
    puteri_k.sort()  # Sortăm lista în ordine crescătoare&lt;br /&gt;
    return puteri_k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;puterikin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;puterikout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de numere și k&lt;br /&gt;
        n_main, k_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim numerele&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, k_main, numere_main)&lt;br /&gt;
        # Calculăm numerele care sunt puteri ale lui k&lt;br /&gt;
        puteri_k_main = puterik(k_main, numere_main)&lt;br /&gt;
        # Scriem numerele care sunt puteri ale lui k în fișierul de ieșire&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, puteri_k_main)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1900_-_Numere_16&amp;diff=7477</id>
		<title>1900 - Numere 16</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1900_-_Numere_16&amp;diff=7477"/>
		<updated>2023-11-26T14:07:42Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se citește un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; cu cel mult &#039;&#039;&#039;16&#039;&#039;&#039; cifre. Fie &#039;&#039;&#039;q&#039;&#039;&#039; numărul de cifre ale numărului &#039;&#039;&#039;n&#039;&#039;&#039;. Prin eliminarea unei singure cifre din scrierea numărului &#039;&#039;&#039;n&#039;&#039;&#039; se obține un șir de &#039;&#039;&#039;q&#039;&#039;&#039; numere. Să se afișeze în ordine crescătoare, numerele nenule din acest șir care sunt prime cu numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;numere16in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;numere16out.txt&#039;&#039;&#039; va conține pe prima linie separate printr-un spațiu, numerele care respectă proprietatea din cerință.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 2 &amp;amp;les; q &amp;amp;les; 16&lt;br /&gt;
* dacă nu avem niciun număr care respectă cerința afișăm mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; numere16in.txt&lt;br /&gt;
 342477&lt;br /&gt;
; numere16out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 32477 34247 34247 34277 34477&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; numere16in.txt&lt;br /&gt;
 gjkjrji&lt;br /&gt;
; numere16out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Numerele 32477 34247 34247 34277 34477 sunt afișate în ordine crescătoare și sunt prime cu numărul 342477&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare):&lt;br /&gt;
    # Verificăm dacă n are cel puțin 2 cifre și cel mult 16 cifre&lt;br /&gt;
    if len(str(n_validare)) &amp;lt; 2 or len(str(n_validare)) &amp;gt; 16:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu are cel puțin 2 cifre sau mai mult de 16 cifre&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția numere_prime_cu_n calculează numerele prime cu n&lt;br /&gt;
def numere_prime_cu_n(n):&lt;br /&gt;
    from math import gcd&lt;br /&gt;
    # Convertim numărul în șir de caractere pentru a putea elimina ușor fiecare cifră&lt;br /&gt;
    n_str = str(n)&lt;br /&gt;
    q = len(n_str)&lt;br /&gt;
    # Inițializăm lista de numere prime cu n&lt;br /&gt;
    numereprime_calcul = []&lt;br /&gt;
    # Generăm toate numerele prin eliminarea unei singure cifre&lt;br /&gt;
    for i in range(q):&lt;br /&gt;
        numar = int(n_str[:i] + n_str[i+1:])&lt;br /&gt;
        # Verificăm dacă numărul este prim cu n și îl adăugăm în listă dacă este&lt;br /&gt;
        if numar != 0 and gcd(numar, n) == 1:&lt;br /&gt;
            numereprime_calcul.append(numar)&lt;br /&gt;
    # Sortăm lista și o returnăm&lt;br /&gt;
    numereprime_calcul.sort()&lt;br /&gt;
    return numereprime_calcul&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;numere16in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;numere16out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main)&lt;br /&gt;
        # Calculăm numerele prime cu n&lt;br /&gt;
        numere_prime = numere_prime_cu_n(n_main)&lt;br /&gt;
        # Scriem numerele prime cu n în fișierul de ieșire&lt;br /&gt;
        if numere_prime:&lt;br /&gt;
            file_out.write(&#039; &#039;.join(map(str, numere_prime)) + &#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            file_out.write(&#039;NU EXISTA\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4299_-_Gravitatie&amp;diff=7476</id>
		<title>4299 - Gravitatie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4299_-_Gravitatie&amp;diff=7476"/>
		<updated>2023-11-26T13:54:01Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Gigel era foarte plictisit așa că a început să se joace cu piese de lego. El a construit turnuleţe de diverse înalţimi pe care le-a aranjat unul lângă celalalt, în linie. Prietenul său, Gogu, intrând în cameră să vadă ce face, a călcat accidental pe turnuleţe, urlând de durere. Când şi-a dat seama Gigel că şi-a supărat prietenul acesta s-a hotărât să îşi rearanjeze turnurile în aşa fel încât gradul de durere, atunci când cineva va călca pe ele sa fie cat mai mic.&lt;br /&gt;
Ca să calculeze acest grad de durere, Gigel, băiat deştept, a aruncat o placă de plastic peste toate turnuleţele, placă ce s-a rupt în locurile în care două turnuri adiacente au inaltimi diferite. Acesta a stabilit ca gradul de durere să fie egal cu numărul părților în care s-a rupt placa iniţială.&lt;br /&gt;
Pentru a minimiza gradul de durere, Gigel poate interschimba (de câte ori vrea el) oricare două turnuleţe între ele. (ex: schimbă turnuleţul &#039;&#039;&#039;1&#039;&#039;&#039; cu turnuleţul &#039;&#039;&#039;3&#039;&#039;&#039;, apoi turnuleţul &#039;&#039;&#039;4&#039;&#039;&#039; cu turnuleţul &#039;&#039;&#039;2&#039;&#039;&#039;, etc…).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
În fișierul de intrare &#039;&#039;&#039;gravitatiein.txt&#039;&#039;&#039; se află pe prima linie, &#039;&#039;&#039;N&#039;&#039;&#039; numărul de turnuleţe. Pe a doua linie se găsesc &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale, reprezentând înalţimea Hi a fiecărui turnuleţ, în ordinea în care acestea sunt aranjate inițial.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
În fisierul de iesire &#039;&#039;&#039;gravitatieout.txt&#039;&#039;&#039; se va scrie un singur numar, &#039;&#039;&#039;Nr&#039;&#039;&#039;, reprezentând gradul minim de durere ce se poate obține prin rearanjarea turnulețelor folosind miscări valide.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 100.000&lt;br /&gt;
* 0 &amp;amp;les; Hi &amp;amp;les; 4.000.000.000 (patru miliarde)&lt;br /&gt;
* Bucata de plastic aruncată are lungimea egală cu lungimea șirului de turnulețe.&lt;br /&gt;
* Pentru &#039;&#039;&#039;40%&#039;&#039;&#039; din punctaj 0 &amp;amp;les; Hi &amp;amp;les; 100.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; gravitatiein.txt&lt;br /&gt;
 3&lt;br /&gt;
 7 3 3&lt;br /&gt;
; gravitatieout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Gradul minim de durere se poate obține folosind configuratia inițială. Daca de exemplu am schimba primul turnuleț cu al doilea, atunci gradul de durere ar fi 3, placa rupându-se în 3 bucăți diferite.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; gravitatiein.txt&lt;br /&gt;
 4&lt;br /&gt;
 4 7 2 7&lt;br /&gt;
; gravitatieout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se observă că dacă inversăm ultimul turn cu penultimul se obține configurația: &#039;&#039;&#039;4 7 7 2&#039;&#039;&#039;, configurație ce are gradul de durere &#039;&#039;&#039;3&#039;&#039;&#039;, care este și gradul minim.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; gravitatiein.txt&lt;br /&gt;
 jfhhdinjd&lt;br /&gt;
; gravitatieout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, h_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-10000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 10000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000&lt;br /&gt;
    for h in h_validare:    # Parcurgem lista de înălțimi&lt;br /&gt;
        # Verificăm dacă înălțimea este în intervalul 0-2^64-1&lt;br /&gt;
        if h &amp;lt; 0 or h &amp;gt; 2**64-1:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția durere_minima calculează gradul minim de durere ce se poate obține prin rearanjarea turnulețelor&lt;br /&gt;
def durere_minima(n_minim, h_minim):&lt;br /&gt;
    # Creăm o listă de perechi (înălțime, poziție inițială)&lt;br /&gt;
    turnuri = [(h_minim[i], i) for i in range(n_minim)]&lt;br /&gt;
    # Sortăm lista în funcție de înălțime&lt;br /&gt;
    turnuri.sort()&lt;br /&gt;
    # Calculăm numărul de bucăți în care se rupe placa de plastic&lt;br /&gt;
    calculare = 1&lt;br /&gt;
    for i in range(1, n_minim):&lt;br /&gt;
        if turnuri[i-1][1] &amp;gt; turnuri[i][1] or turnuri[i-1][0] != turnuri[i][0]:&lt;br /&gt;
            calculare += 1&lt;br /&gt;
    return calculare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;gravitatiein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;gravitatieout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de turnulețe&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim înălțimile turnulețelor&lt;br /&gt;
        H_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, H_main)&lt;br /&gt;
        # Calculăm durerea minimă&lt;br /&gt;
        durere = durere_minima(n_main, H_main)&lt;br /&gt;
        # Scriem durerea minimă în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(durere) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4299_-_Gravitatie&amp;diff=7475</id>
		<title>4299 - Gravitatie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4299_-_Gravitatie&amp;diff=7475"/>
		<updated>2023-11-26T13:52:33Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Gigel era foarte plictisit așa că a început să se joace cu piese de lego. El a construit turnuleţe de diverse înalţimi pe care le-a aranjat unul lângă celalalt, în linie. Prietenul său, Gogu, intrând în cameră să vadă ce face, a călcat accidental pe turnuleţe, urlând de durere. Când şi-a dat seama Gigel că şi-a supărat prietenul acesta s-a hotărât să îşi rearanjeze turnurile în aşa fel încât gradul de durere, atunci când cineva va călca pe ele sa fie cat mai mic.&lt;br /&gt;
Ca să calculeze acest grad de durere, Gigel, băiat deştept, a aruncat o placă de plastic peste toate turnuleţele, placă ce s-a rupt în locurile în care două turnuri adiacente au inaltimi diferite. Acesta a stabilit ca gradul de durere să fie egal cu numărul părților în care s-a rupt placa iniţială.&lt;br /&gt;
Pentru a minimiza gradul de durere, Gigel poate interschimba (de câte ori vrea el) oricare două turnuleţe între ele. (ex: schimbă turnuleţul &#039;&#039;&#039;1&#039;&#039;&#039; cu turnuleţul &#039;&#039;&#039;3&#039;&#039;&#039;, apoi turnuleţul &#039;&#039;&#039;4&#039;&#039;&#039; cu turnuleţul &#039;&#039;&#039;2&#039;&#039;&#039;, etc…).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
În fișierul de intrare &#039;&#039;&#039;gravitatiein.txt&#039;&#039;&#039; se află pe prima linie, &#039;&#039;&#039;N&#039;&#039;&#039; numărul de turnuleţe. Pe a doua linie se găsesc &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale, reprezentând înalţimea &amp;lt;math&amp;gt; Hi &amp;lt;/math&amp;gt; a fiecărui turnuleţ, în ordinea în care acestea sunt aranjate inițial.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
În fisierul de iesire &#039;&#039;&#039;gravitatieout.txt&#039;&#039;&#039; se va scrie un singur numar, &#039;&#039;&#039;Nr&#039;&#039;&#039;, reprezentând gradul minim de durere ce se poate obține prin rearanjarea turnulețelor folosind miscări valide.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 100.000&lt;br /&gt;
* 0 &amp;amp;les; Hi &amp;amp;les; 4.000.000.000 (patru miliarde)&lt;br /&gt;
* Bucata de plastic aruncată are lungimea egală cu lungimea șirului de turnulețe.&lt;br /&gt;
* Pentru &#039;&#039;&#039;40%&#039;&#039;&#039; din punctaj 0 &amp;amp;les; Hi &amp;amp;les; 100.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; gravitatiein.txt&lt;br /&gt;
 3&lt;br /&gt;
 7 3 3&lt;br /&gt;
; gravitatieout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Gradul minim de durere se poate obține folosind configuratia inițială. Daca de exemplu am schimba primul turnuleț cu al doilea, atunci gradul de durere ar fi 3, placa rupându-se în 3 bucăți diferite.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; gravitatiein.txt&lt;br /&gt;
 4&lt;br /&gt;
 4 7 2 7&lt;br /&gt;
; gravitatieout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se observă că dacă inversăm ultimul turn cu penultimul se obține configurația: &#039;&#039;&#039;4 7 7 2&#039;&#039;&#039;, configurație ce are gradul de durere &#039;&#039;&#039;3&#039;&#039;&#039;, care este și gradul minim.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; gravitatiein.txt&lt;br /&gt;
 jfhhdinjd&lt;br /&gt;
; gravitatieout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, h_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-10000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 10000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000&lt;br /&gt;
    for h in h_validare:    # Parcurgem lista de înălțimi&lt;br /&gt;
        # Verificăm dacă înălțimea este în intervalul 0-2^64-1&lt;br /&gt;
        if h &amp;lt; 0 or h &amp;gt; 2**64-1:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția durere_minima calculează gradul minim de durere ce se poate obține prin rearanjarea turnulețelor&lt;br /&gt;
def durere_minima(n_minim, h_minim):&lt;br /&gt;
    # Creăm o listă de perechi (înălțime, poziție inițială)&lt;br /&gt;
    turnuri = [(h_minim[i], i) for i in range(n_minim)]&lt;br /&gt;
    # Sortăm lista în funcție de înălțime&lt;br /&gt;
    turnuri.sort()&lt;br /&gt;
    # Calculăm numărul de bucăți în care se rupe placa de plastic&lt;br /&gt;
    calculare = 1&lt;br /&gt;
    for i in range(1, n_minim):&lt;br /&gt;
        if turnuri[i-1][1] &amp;gt; turnuri[i][1] or turnuri[i-1][0] != turnuri[i][0]:&lt;br /&gt;
            calculare += 1&lt;br /&gt;
    return calculare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;gravitatiein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;gravitatieout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de turnulețe&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim înălțimile turnulețelor&lt;br /&gt;
        H_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, H_main)&lt;br /&gt;
        # Calculăm durerea minimă&lt;br /&gt;
        durere = durere_minima(n_main, H_main)&lt;br /&gt;
        # Scriem durerea minimă în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(durere) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2274_-_Limite&amp;diff=7473</id>
		<title>2274 - Limite</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2274_-_Limite&amp;diff=7473"/>
		<updated>2023-11-26T13:16:04Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Afișați tipul de date C++ minim ca număr de octeți permite memorarea fiecărui număr. Dacă un număr încape și în tipul cu semn și în tipul fără semn, se afișează tipul cu semn.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;limitein.txt&#039;&#039;&#039; conține numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;limiteout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;n&#039;&#039;&#039; șiruri de caractere, pe &#039;&#039;&#039;n&#039;&#039;&#039; rânduri, reprezentând tipurile de date cerute, dintre &#039;&#039;&#039;char, unsigned char, short, unsigned short, int, unsigned int, long long, unsigned long long&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 10000&lt;br /&gt;
* cele n numere citite vor fi mai mici sau egale cu &#039;&#039;&#039;18446744073709551615&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; limitein.txt&lt;br /&gt;
 5&lt;br /&gt;
 10 18446744073709551615 32767 127 65535&lt;br /&gt;
; limiteout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 char&lt;br /&gt;
 unsigned long long&lt;br /&gt;
 short&lt;br /&gt;
 char&lt;br /&gt;
 unsigned short&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; limitein.txt&lt;br /&gt;
 gghrguhrkf&lt;br /&gt;
; limiteout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, numere_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-10000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 10000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000&lt;br /&gt;
    for numar_validare in numere_validare:    # Parcurgem lista de numere&lt;br /&gt;
        # Verificăm dacă numărul este în intervalul 0-2^64-1&lt;br /&gt;
        if numar_validare &amp;lt; 0 or numar_validare &amp;gt; 2**64-1:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția tip_date determină tipul de date C++ minim necesar pentru a stoca un număr&lt;br /&gt;
def tip_date(numar_date):&lt;br /&gt;
    if numar_date &amp;lt;= 127:  # Dacă numărul poate fi stocat într-un char&lt;br /&gt;
        return &#039;char&#039;&lt;br /&gt;
    elif numar_date &amp;lt;= 255:  # Dacă numărul poate fi stocat într-un unsigned char&lt;br /&gt;
        return &#039;unsigned char&#039;&lt;br /&gt;
    elif numar_date &amp;lt;= 32767:  # Dacă numărul poate fi stocat într-un short&lt;br /&gt;
        return &#039;short&#039;&lt;br /&gt;
    elif numar_date &amp;lt;= 65535:  # Dacă numărul poate fi stocat într-un unsigned short&lt;br /&gt;
        return &#039;unsigned short&#039;&lt;br /&gt;
    elif numar_date &amp;lt;= 2147483647:  # Dacă numărul poate fi stocat într-un int&lt;br /&gt;
        return &#039;int&#039;&lt;br /&gt;
    elif numar_date &amp;lt;= 4294967295:  # Dacă numărul poate fi stocat într-un unsigned int&lt;br /&gt;
        return &#039;unsigned int&#039;&lt;br /&gt;
    elif numar_date &amp;lt;= 9223372036854775807:  # Dacă numărul poate fi stocat într-un long long&lt;br /&gt;
        return &#039;long long&#039;&lt;br /&gt;
    else:  # Dacă numărul este mai mare, atunci trebuie să fie stocat într-un unsigned long long&lt;br /&gt;
        return &#039;unsigned long long&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;limitein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;limiteout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de numere&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim numerele&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, numere_main)&lt;br /&gt;
        # Pentru fiecare număr, determinăm tipul de date minim și îl scriem în fișierul de ieșire&lt;br /&gt;
        for numar in numere_main:&lt;br /&gt;
            file_out.write(tip_date(numar) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2569_-_Alo&amp;diff=7286</id>
		<title>2569 - Alo</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2569_-_Alo&amp;diff=7286"/>
		<updated>2023-11-12T15:40:43Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;De ziua ei, Dora a primit cadou un telefon mobil cu cartelă pentru rețeaua favorită. Suma disponibilă pe cartelă este de &#039;&#039;&#039;E&#039;&#039;&#039; Eurici dar oferta este grozavă pentru convorbiri. Astfel, pentru fiecare minut de convorbire în care a fost sunată dintr-o altă rețea decât rețeaua ei, cartela se încarcă cu &#039;&#039;&#039;1&#039;&#039;&#039; Euric dar, dacă sună ea într-o altă rețea, Dora va consuma câte &#039;&#039;&#039;2&#039;&#039;&#039; Eurici din creditul de pe cartela ei pentru fiecare minut de convorbire. Între membrii rețelei Dorei, toate convorbirile sunt gratuite indiferent de durata convorbirii, fie că sună ea, fie că este sunată.&lt;br /&gt;
&lt;br /&gt;
Toate numerele din rețeaua Dorei au patru cifre și se termină cu cifra &#039;&#039;&#039;9&#039;&#039;&#039; iar numerele din alte rețele au tot patru cifre și se termină cu cifra &#039;&#039;&#039;5&#039;&#039;&#039;. Când sună Dora, ea formează întâi cifra &#039;&#039;&#039;1&#039;&#039;&#039; înaintea numărului pe care îl apelează. Când este sunată, apare cifra &#039;&#039;&#039;2&#039;&#039;&#039; înaintea numărului de la care primește apelul.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Scrieți un program care, știind &#039;&#039;&#039;E&#039;&#039;&#039;, valoarea inițială a creditului de pe cartela primită cadou, cele &#039;&#039;&#039;N&#039;&#039;&#039; numere corespunzătoare convorbirilor pe care le-a avut Dora și duratele acestora exprimate în minute, să determine valoarea creditului rămas pe cartelă la terminarea convorbirilor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Din prima linie a fișierului text &#039;&#039;&#039;aloin.txt&#039;&#039;&#039; se citesc &#039;&#039;&#039;E&#039;&#039;&#039;, valoarea creditului inițial de pe cartelă și &#039;&#039;&#039;N&#039;&#039;&#039; numărul de convorbiri. Din următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se citesc perechi de forma &#039;&#039;&#039;Nr D&#039;&#039;&#039; unde &#039;&#039;&#039;Nr&#039;&#039;&#039; – numărul corespunzător convorbirii și &#039;&#039;&#039;D&#039;&#039;&#039; – durata acesteia.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
În fișierul text &#039;&#039;&#039;aloout.txt&#039;&#039;&#039; se va scrie pe prima linie &#039;&#039;&#039;S&#039;&#039;&#039;-numărul de Eurici care sunt disponibili pe cartela Dorei după cele &#039;&#039;&#039;N&#039;&#039;&#039; convorbiri.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;5 &amp;amp;les; E &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;2 &amp;amp;les; N &amp;amp;les; 500&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; D &amp;amp;les; 50&#039;&#039;&#039;&lt;br /&gt;
* Convorbirile în care sună Dora se încadrează în limita creditului de pe cartelă de la momentul respectiv.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; aloin.txt&lt;br /&gt;
: 10 5&lt;br /&gt;
: 12345 4&lt;br /&gt;
: 12439 15&lt;br /&gt;
: 21335 30&lt;br /&gt;
: 18375 10&lt;br /&gt;
: 22359 20&lt;br /&gt;
; aloout.txt&lt;br /&gt;
: Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
: 12&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; aloin.txt&lt;br /&gt;
: 4 5&lt;br /&gt;
: 12 2&lt;br /&gt;
: z 15&lt;br /&gt;
: 785 12&lt;br /&gt;
: 18 a&lt;br /&gt;
: 22 1&lt;br /&gt;
; aloout.txt&lt;br /&gt;
: Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
* &#039;&#039;&#039;12345 4&#039;&#039;&#039; – Dora sună la numărul &#039;&#039;&#039;2345&#039;&#039;&#039; care nu face parte din rețeaua ei și vorbește &#039;&#039;&#039;4&#039;&#039;&#039; minute. De pe cartelă se consumă &#039;&#039;&#039;4*2=8&#039;&#039;&#039; Eurici&lt;br /&gt;
* &#039;&#039;&#039;12439 15&#039;&#039;&#039; – Dora sună la numărul &#039;&#039;&#039;2439&#039;&#039;&#039; din rețeaua ei și vorbește &#039;&#039;&#039;15&#039;&#039;&#039; minute gratis&lt;br /&gt;
* &#039;&#039;&#039;21335 30&#039;&#039;&#039; – Dora este sunată de la numărul &#039;&#039;&#039;1335&#039;&#039;&#039; care nu este din rețeaua ei și vorbește &#039;&#039;&#039;30&#039;&#039;&#039; minute: Cartelase încarcă cu &#039;&#039;&#039;30*1=30&#039;&#039;&#039; Eurici&lt;br /&gt;
* &#039;&#039;&#039;18375 10&#039;&#039;&#039; – Dora sună la numărul &#039;&#039;&#039;8375&#039;&#039;&#039; care nu face parte din rețeaua ei și vorbește &#039;&#039;&#039;10&#039;&#039;&#039; minute. De pe cartelă se consumă &#039;&#039;&#039;10*2=20&#039;&#039;&#039; Eurici&lt;br /&gt;
* &#039;&#039;&#039;22359 20&#039;&#039;&#039; – Dora este sunată de la &#039;&#039;&#039;2359&#039;&#039;&#039; din rețeaua ei și vorbește &#039;&#039;&#039;20&#039;&#039;&#039; minute gratis.&lt;br /&gt;
&lt;br /&gt;
Suma rămasă: &#039;&#039;&#039;10-8+30-20=12&#039;&#039;&#039; Eurici&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2569  Alo&lt;br /&gt;
def validare(e_validare, n_validare, convorbiri_validare):&lt;br /&gt;
    if e_validare &amp;lt; 5 or e_validare &amp;gt; 100:    # Verificăm dacă e este în intervalul 5-100&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă e nu este în intervalul 5-100&lt;br /&gt;
    if n_validare &amp;lt; 2 or n_validare &amp;gt; 500:    # Verificăm dacă n este în intervalul 2-500&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 2-500&lt;br /&gt;
    for Nr, d in convorbiri_validare:    # Parcurgem lista de convorbiri&lt;br /&gt;
        if d &amp;lt; 1 or d &amp;gt; 50:    # Verificăm dacă durata convorbirii este în intervalul 1-50&lt;br /&gt;
            raise ValueError  # Ridicăm o eroare dacă durata convorbirii nu este în intervalul 1-50&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția calculeaza_credit calculează creditul rămas pe cartelă după fiecare convorbire&lt;br /&gt;
def calculeaza_credit(nr_credit, durata_credit, credit_calc):&lt;br /&gt;
    # Verificăm dacă Dora sună (numărul începe cu 1)&lt;br /&gt;
    if str(nr_credit)[0] == &#039;1&#039;:&lt;br /&gt;
        # Verificăm dacă sună în altă rețea (numărul se termină cu 5)&lt;br /&gt;
        if str(nr_credit)[-1] == &#039;5&#039;:&lt;br /&gt;
            # Dacă sună în altă rețea, se consumă 2 Eurici pe minut&lt;br /&gt;
            credit_calc -= durata_credit * 2&lt;br /&gt;
    # Verificăm dacă Dora este sunată (numărul începe cu 2)&lt;br /&gt;
    elif str(nr_credit)[0] == &#039;2&#039;:&lt;br /&gt;
        # Verificăm dacă este sunată din altă rețea (numărul se termină cu 5)&lt;br /&gt;
        if str(nr_credit)[-1] == &#039;5&#039;:&lt;br /&gt;
            # Dacă este sunată din altă rețea, cartela se încarcă cu 1 Euric pe minut&lt;br /&gt;
            credit_calc += durata_credit&lt;br /&gt;
    return credit_calc    # Returnăm creditul rămas pe cartelă&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;aloin.txt&#039;, &#039;r&#039;)&lt;br /&gt;
    file_out = open(&#039;aloout.txt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim valoarea inițială a creditului și numărul de convorbiri&lt;br /&gt;
        E_main, N_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim numerele și duratele convorbirilor&lt;br /&gt;
        convorbiri_main = [list(map(int, linie.split())) for linie in file_in]&lt;br /&gt;
        validare(E_main, N_main, convorbiri_main)    # Validăm datele de intrare&lt;br /&gt;
        credit = E_main    # Inițializăm creditul cu valoarea inițială&lt;br /&gt;
        for nr, durata in convorbiri_main:    # Parcurgem fiecare convorbire&lt;br /&gt;
            # Calculăm creditul rămas pe cartelă după fiecare convorbire&lt;br /&gt;
            credit = calculeaza_credit(nr, durata, credit)&lt;br /&gt;
        # Scriem creditul rămas pe cartelă în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(credit))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:    # Tratăm excepțiile&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2132_-_Min_Subsir&amp;diff=7283</id>
		<title>2132 - Min Subsir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2132_-_Min_Subsir&amp;diff=7283"/>
		<updated>2023-11-12T15:16:49Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră un șir de caractere format din litere mici ale alfabetului englez.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine &#039;&#039;&#039;lungimea minimă&#039;&#039;&#039; a unei secvențe care conține toate literele întâlnite în șirul inițial.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură șirul de caractere.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran lungimea secvențele cerute.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; lungime sir &amp;amp;les; 10000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: aadcaabcbacadca&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 54454534&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt folosite literele: &#039;&#039;&#039;a,b,c,d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Secvențe de lungime minimă care folosesc toate literele: &#039;&#039;&#039;dcaab, bacad&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2132 -Min Subsir&lt;br /&gt;
def verificare(verif_car):&lt;br /&gt;
    # Verificăm dacă lungimea șirului este în intervalul [1, 10000]&lt;br /&gt;
    if 1 &amp;lt;= len(verif_car) &amp;lt;= 10000:&lt;br /&gt;
        # Verificăm dacă șirul conține doar litere mici ale alfabetului englez&lt;br /&gt;
        if not all(c.islower() for c in verif_car if not c.isspace()):&lt;br /&gt;
            # Dacă șirul conține alte caractere, ridicăm o excepție&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # Dacă șirul este valid, îl returnăm&lt;br /&gt;
        return verif_car&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă șirul nu este valid, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția lungime_minima determină lungimea minim&lt;br /&gt;
def lungime_minima(min_lung):&lt;br /&gt;
    litere_unice = set(min_lung)&lt;br /&gt;
    lungime_min = len(min_lung)&lt;br /&gt;
    for i in range(len(min_lung)):&lt;br /&gt;
        for j in range(i, len(min_lung)):&lt;br /&gt;
            if set(min_lung[i:j+1]) == litere_unice:&lt;br /&gt;
                lungime_min = min(lungime_min, j-i+1)&lt;br /&gt;
    return lungime_min&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de la utilizator&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
        # Validăm șirul&lt;br /&gt;
        s = verificare(s)&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(lungime_minima(s))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Dacă șirul nu este valid, afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2738_-_Dist_Lung_Max&amp;diff=7281</id>
		<title>2738 - Dist Lung Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2738_-_Dist_Lung_Max&amp;diff=7281"/>
		<updated>2023-11-12T14:55:50Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de caractere care conține cuvinte formate din litere mici ale alfabetului englez și separate printr-un singur spațiu. Să se determine cel mai lung cuvânt care are toate literele distincte. Dacă nu există niciun cuvânt cu toate literele distincte se va afișa &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran cuvântul determinat sau &#039;&#039;&#039;-1&#039;&#039;&#039;, conform cerinței.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul dat conține maximum &#039;&#039;&#039;255&#039;&#039;&#039; de caractere&lt;br /&gt;
* dacă există mai multe cuvinte cu toate literele distincte de lungime maximă se va afișa cel mai din stânga&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: abcabcd abcdef ab&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: abcdef&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 547545//4/32&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2738  Dist Lung Max&lt;br /&gt;
def verificare(verificare_date):&lt;br /&gt;
    # Verificăm dacă șirul conține cel mult 255 de caractere&lt;br /&gt;
    if len(verificare_date) &amp;lt;= 255:&lt;br /&gt;
        # Verificăm dacă șirul conține doar litere mici ale alfabetului englez și spații&lt;br /&gt;
        if not all(c.islower() or c.isspace() for c in verificare_date):&lt;br /&gt;
            # Dacă șirul conține alte caractere, ridicăm o excepție&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # Dacă șirul este valid, îl returnăm&lt;br /&gt;
        return verificare_date&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă șirul nu este valid, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția cel_mai_lung_cuvant_cu_litere_distincte determină cel mai lung cuvânt cu litere distincte din șir&lt;br /&gt;
def cel_mai_lung_cuvant_cu_litere_distincte(s_lung):&lt;br /&gt;
    cuvinte = s_lung.split()&lt;br /&gt;
    lungime_maxima = -1&lt;br /&gt;
    cuvant_maxim = &amp;quot;&amp;quot;&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        if len(cuvant) == len(set(cuvant)):&lt;br /&gt;
            if len(cuvant) &amp;gt; lungime_maxima:&lt;br /&gt;
                lungime_maxima = len(cuvant)&lt;br /&gt;
                cuvant_maxim = cuvant&lt;br /&gt;
    return cuvant_maxim if cuvant_maxim else -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de la utilizator&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
        # Validăm șirul&lt;br /&gt;
        s = verificare(s)&lt;br /&gt;
        # Dacă șirul este valid, determinăm cel mai lung cuvânt cu litere distincte și afișăm rezultatul&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(cel_mai_lung_cuvant_cu_litere_distincte(s))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Dacă șirul nu este valid, afișăm un singur mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse..&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1270_-_B16&amp;diff=7279</id>
		<title>1270 - B16</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1270_-_B16&amp;diff=7279"/>
		<updated>2023-11-12T14:41:18Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un număr natural în baza &#039;&#039;&#039;16&#039;&#039;&#039;. Să se transforme acest număr în baza &#039;&#039;&#039;10&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039; în baza &#039;&#039;&#039;16&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;n&#039;&#039;&#039; transformat în baza &#039;&#039;&#039;10&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* reprezentarea în baza &#039;&#039;&#039;10&#039;&#039;&#039; a numărului dat este mai mică decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* Cifrele în baza &#039;&#039;&#039;16&#039;&#039;&#039; sunt : &#039;&#039;&#039;0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 100&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 256&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 200000000&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1270  B16&lt;br /&gt;
def verificare(n_hex):&lt;br /&gt;
    try:&lt;br /&gt;
        # Încercăm să convertim numărul în baza 10&lt;br /&gt;
        n_dec = int(n_hex, 16)&lt;br /&gt;
        # Verificăm dacă numărul este în intervalul [0, 2000000000]&lt;br /&gt;
        if 0 &amp;lt;= n_dec &amp;lt;= 2000000000:&lt;br /&gt;
            # Dacă numărul este valid, îl returnăm&lt;br /&gt;
            return n_hex&lt;br /&gt;
        else:&lt;br /&gt;
            # Dacă numărul nu este valid, ridicăm o excepție&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Dacă conversia a eșuat, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția transformare convertește numărul din baza 16 în baza 10&lt;br /&gt;
def transformare(numar_hex):&lt;br /&gt;
    return int(numar_hex, 16)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de la utilizator&lt;br /&gt;
        n = input(&amp;quot;Introduceti numarul in baza 16: &amp;quot;)&lt;br /&gt;
        # Validăm numărul&lt;br /&gt;
        n = verificare(n)&lt;br /&gt;
        # Dacă numărul este valid, îl convertim în baza 10 și afișăm rezultatul&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(transformare(n))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Dacă numărul nu este valid, afișăm un mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0807_-_Inlocuire_1&amp;diff=7278</id>
		<title>0807 - Inlocuire 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0807_-_Inlocuire_1&amp;diff=7278"/>
		<updated>2023-11-12T14:29:15Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un şir de caractere ce conţine cuvinte formate din litere mici ale alfabetului englez, separate prin unul sau mai multe spații. Înaintea primului cuvânt nu există spații, și nici după ultimul. Să se modifice șirul dat, astfel încât să se înlocuiască fiecare cuvânt cu exact trei litere din șir cu simbolul &#039;&#039;&#039;*&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va citi de la tastatură şirul dat.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afişa pe ecran şirul transformat corespunzător.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* șirul dat va conține cel mult 255 caractere, litere mici ale alfabetului englez și spații&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: bun este izvorul ce are apa rece&lt;br /&gt;
; Ieşire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: * este izvorul ce * * rece&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 1235//&lt;br /&gt;
; Ieşire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0807 Inlocuire 1&lt;br /&gt;
def verificare(verificare_n):&lt;br /&gt;
    # Verificăm dacă șirul conține cel mult 255 de caractere&lt;br /&gt;
    if len(verificare_n) &amp;lt;= 255:&lt;br /&gt;
        # Verificăm dacă șirul conține doar litere mici ale alfabetului englez și spații&lt;br /&gt;
        if not all(c.islower() or c.isspace() for c in verificare_n):&lt;br /&gt;
            # Dacă șirul conține alte caractere, ridicăm o excepție&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # Dacă șirul este valid, îl returnăm&lt;br /&gt;
        return verificare_n&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă șirul nu este valid, ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția inlocuire înlocuiește cuvintele cu trei litere din șir cu &#039;*&#039;&lt;br /&gt;
def inlocuire(inlocuire_s):&lt;br /&gt;
    cuvinte = inlocuire_s.split()&lt;br /&gt;
    for index in range(len(cuvinte)):&lt;br /&gt;
        if len(cuvinte[index]) == 3:&lt;br /&gt;
            cuvinte[index] = &#039;*&#039;&lt;br /&gt;
    return &#039; &#039;.join(cuvinte)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim șirul de la utilizator&lt;br /&gt;
        s = input(&amp;quot;Introduceti sirul de caractere: &amp;quot;)&lt;br /&gt;
        # Validăm șirul&lt;br /&gt;
        s = verificare(s)&lt;br /&gt;
        # Dacă șirul este valid, înlocuim cuvintele cu trei litere și afișăm rezultatul&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(inlocuire(s))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Dacă șirul nu este valid, afișăm un singur mesaj de eroare&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2736_-_Baza_de_Date&amp;diff=7276</id>
		<title>2736 - Baza de Date</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2736_-_Baza_de_Date&amp;diff=7276"/>
		<updated>2023-11-12T14:04:09Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: Ștergerea conținutului paginii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3481_-_Sort_Div&amp;diff=7240</id>
		<title>3481 - Sort Div</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3481_-_Sort_Div&amp;diff=7240"/>
		<updated>2023-11-11T15:28:03Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Să se afișeze acestea în ordinea crescătoare a numărului de divizori ai fiecăruia, la același număr de divizori crescător după cifra de control, la aceeași cifră de control crescător după prima cifră, iar dacă și prima cifră este aceeași atunci numerele se vor afișa în ordinea crescătoare a valorii lor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sort_divin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie n numere naturale separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sort_divout.txt&#039;&#039;&#039; va conține pe prima linie cele &#039;&#039;&#039;n&#039;&#039;&#039; numere separate prin câte un spațiu, ordonate crescător pe baza criteriilor din enunț.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 10000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi distincte și mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
* cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului &#039;&#039;&#039;645&#039;&#039;&#039; este &#039;&#039;&#039;6&#039;&#039;&#039;. &#039;&#039;&#039;(6+4+5=15, 1+5=6)&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sort_divin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 6 8 3 10 5&lt;br /&gt;
; sort_divout.txt&lt;br /&gt;
: Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
: 3 5 10 6 8&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; sort_divin.txt&lt;br /&gt;
: 4&lt;br /&gt;
: 2 5 6 q x&lt;br /&gt;
; sort_divout.txt&lt;br /&gt;
: Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicaţii ==&lt;br /&gt;
&#039;&#039;&#039;3&#039;&#039;&#039; și &#039;&#039;&#039;5&#039;&#039;&#039; au ambele &#039;&#039;&#039;2&#039;&#039;&#039; divizori, deci se afișează în ordine crescătoare după cifra de control. La fel și &#039;&#039;&#039;6&#039;&#039;&#039;, &#039;&#039;&#039;8&#039;&#039;&#039; și &#039;&#039;&#039;10&#039;&#039;&#039; care au fiecare câte &#039;&#039;&#039;4&#039;&#039;&#039; divizori.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3481  Sort Div&lt;br /&gt;
def validare(n_validare, numere_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-10000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 10000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-10000&lt;br /&gt;
    for numar in numere_validare:    # Parcurgem lista de numere&lt;br /&gt;
        # Verificăm dacă numărul este în intervalul 1-1000000&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția numar_divizori calculează numărul de divizori ai unui număr.&lt;br /&gt;
def numar_divizori(n):&lt;br /&gt;
    count = 0  # Inițializăm contorul de divizori&lt;br /&gt;
    # Parcurgem numerele de la 1 la rădăcina pătrată a lui n&lt;br /&gt;
    for i in range(1, int(n**0.5) + 1):&lt;br /&gt;
        if n % i == 0:    # Verificăm dacă i este un divizor al lui n&lt;br /&gt;
            # Dacă i și n/i sunt egale, înseamnă că i este un divizor pătrat&lt;br /&gt;
            if n / i == i:&lt;br /&gt;
                count += 1  # Adăugăm un divizor&lt;br /&gt;
            else:&lt;br /&gt;
                count += 2  # Adăugăm doi divizori (i și n/i)&lt;br /&gt;
    return count  # Returnăm numărul total de divizori&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția cifra_control calculează cifra de control a unui număr.&lt;br /&gt;
def cifra_control(numere_control):&lt;br /&gt;
    # Continuăm să calculăm suma cifrelor până când obținem o singură cifră&lt;br /&gt;
    while numere_control &amp;gt; 9:&lt;br /&gt;
        numere_control = sum(int(digit) for digit in str(numere_control))  # Calculăm suma cifrelor&lt;br /&gt;
    return numere_control  # Returnăm cifra de control&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția sortare sortează lista de numere în funcție de criteriile specificate.&lt;br /&gt;
def sortare(numere):&lt;br /&gt;
    # Sortăm numerele în funcție de numărul de divizori, cifra de control, prima cifră și valoarea numărului&lt;br /&gt;
    numere.sort(key=lambda x: (numar_divizori(x), cifra_control(x), int(str(x)[0]), x))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;sort_divin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;sort_divout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n_main = int(file_in.readline())    # Citim numărul de numere&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))    # Citim numerele&lt;br /&gt;
        validare(n_main, numere_main)    # Validăm datele de intrare&lt;br /&gt;
        sortare(numere_main)    # Sortăm lista de numere în funcție de criteriile specificate&lt;br /&gt;
        # Scriem numerele sortate în fișierul de ieșire&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, numere_main)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2004_-_Ore&amp;diff=7239</id>
		<title>2004 - Ore</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2004_-_Ore&amp;diff=7239"/>
		<updated>2023-11-11T15:15:05Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se consideră două evenimente a căror durată este exprimată fiecare prin câte trei numere naturale: ore (h), minute (m) şi secunde (s).Să se scrie în fișierul de ieșire:&lt;br /&gt;
* a) pe primele două linii, duratele în formatul &#039;&#039;&#039;h: m: s&#039;&#039;&#039;&lt;br /&gt;
* b) pe următoarele două linii, duratele exprimate în secunde, corespunzătoare fiecăruieveniment, pe rânduri separate;&lt;br /&gt;
* c) pe următoarea linie suma obţinută din adunarea duratelor celor două evenimente, exprimată în ore, minute, secunde, în formatul &#039;&#039;&#039;h: m: s&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;orein.txt&#039;&#039;&#039; conține două linii pe care sunt scrise câte trei numere naturale, separate prin câte un spaţiu, reprezentând duratele a două evenimente exprimate în: &#039;&#039;&#039;ore (h), minute (m) şi secunde (s)&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;oreout.txt&#039;&#039;&#039; va conține pe primele două linii răspuncul de la cerința &#039;&#039;&#039;a)&#039;&#039;&#039;, apoi pe liniile &#039;&#039;&#039;3&#039;&#039;&#039; și &#039;&#039;&#039;4&#039;&#039;&#039; răspunsul la cerința &#039;&#039;&#039;b)&#039;&#039;&#039;, iar pe a &#039;&#039;&#039;5&#039;&#039;&#039;-a linie răspunsul la cerința &#039;&#039;&#039;c)&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; h &amp;amp;les; 24&lt;br /&gt;
* 0 &amp;amp;les; m &amp;amp;les; 60&lt;br /&gt;
* 0 &amp;amp;les; s &amp;amp;les; 60&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; orein.txt&lt;br /&gt;
: 3 35 55&lt;br /&gt;
: 2 40 8&lt;br /&gt;
; oreout.txt&lt;br /&gt;
: Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
: 3: 35: 55&lt;br /&gt;
: 2: 40: 8&lt;br /&gt;
: 12955&lt;br /&gt;
: 9608&lt;br /&gt;
: 6: 16: 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; orein.txt&lt;br /&gt;
: 9 55 70&lt;br /&gt;
: 12 1 99&lt;br /&gt;
; oreout.txt&lt;br /&gt;
: Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicaţii ==&lt;br /&gt;
În fișierul de intrare sunt detaliile referitoare la duratele cele două evenimente, iar suma lor este &#039;&#039;&#039;6: 16: 3&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2004  Ore&lt;br /&gt;
def validare(event1_validare, event2_validare):&lt;br /&gt;
    for event in [event1_validare, event2_validare]:  # Parcurgem lista de evenimente&lt;br /&gt;
        h, m, s = event&lt;br /&gt;
        # Verificăm dacă orele sunt în intervalul 1-24&lt;br /&gt;
        if h &amp;lt; 1 or h &amp;gt; 24:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # Verificăm dacă minutele sunt în intervalul 0-60&lt;br /&gt;
        if m &amp;lt; 0 or m &amp;gt; 60:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # Verificăm dacă secundele sunt în intervalul 0-60&lt;br /&gt;
        if s &amp;lt; 0 or s &amp;gt; 60:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_durata(event1, event2):&lt;br /&gt;
    # Calculăm durata în secunde pentru fiecare eveniment&lt;br /&gt;
    sec1 = event1[0] * 3600 + event1[1] * 60 + event1[2]&lt;br /&gt;
    sec2 = event2[0] * 3600 + event2[1] * 60 + event2[2]&lt;br /&gt;
    # Calculăm suma duratelor&lt;br /&gt;
    total_sec = sec1 + sec2&lt;br /&gt;
    # Convertim suma duratelor înapoi în ore, minute și secunde&lt;br /&gt;
    total_o, total_sec = divmod(total_sec, 3600)&lt;br /&gt;
    total_m, total_s = divmod(total_sec, 60)&lt;br /&gt;
    return sec1, sec2, total_o, total_m, total_s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;orein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;oreout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele pentru fiecare eveniment&lt;br /&gt;
        event1_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        event2_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(event1_main, event2_main)&lt;br /&gt;
        # Calculăm durata în secunde și suma duratelor&lt;br /&gt;
        sec1_main, sec2_main, total_o_main, total_m_main, total_s_main = calculeaza_durata(event1_main, event2_main)&lt;br /&gt;
        # Scriem rezultatele în fișierul de ieșire&lt;br /&gt;
        file_out.write(f&#039;{event1_main[0]}: {event1_main[1]}: {event1_main[2]}\n&#039;)&lt;br /&gt;
        file_out.write(f&#039;{event2_main[0]}: {event2_main[1]}: {event2_main[2]}\n&#039;)&lt;br /&gt;
        file_out.write(f&#039;{sec1_main}\n{sec2_main}\n&#039;)&lt;br /&gt;
        file_out.write(f&#039;{total_o_main}: {total_m_main}: {total_s_main}\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1460_-_Serbare&amp;diff=7238</id>
		<title>1460 - Serbare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1460_-_Serbare&amp;diff=7238"/>
		<updated>2023-11-11T15:04:24Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
La o serbare sunt &#039;&#039;&#039;n&#039;&#039;&#039; grupe de copii care poartă &#039;&#039;&#039;p&#039;&#039;&#039; tipuri de uniforme. Scrieţi un program care să afişeze pe ecran tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Afişarea se va face pe o singură linie, valoriile fiind separate printr-un spaţiu.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;serbarein.txt&#039;&#039;&#039; conține, pe prima linie, numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;p&#039;&#039;&#039;, separate printr-un spaţiu, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte două valori separate printr-un spaţiu ce reprezintă numărul de copii dintr-o grupă şi respectiv tipul de uniformă pe care aceştia îl poartă.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;serbareout.txt&#039;&#039;&#039; va conţine tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Numerele vor fi separate printr-un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 1000&lt;br /&gt;
* 1 &amp;amp;les; p &amp;amp;les; 11&lt;br /&gt;
* Numărul de copii dintr-o grupă este cel mult &#039;&#039;&#039;100&#039;&#039;&#039;&lt;br /&gt;
* Fiecare mărime de uniformă din intervalul &#039;&#039;&#039;[1,p]&#039;&#039;&#039; este purtată de cel puţin un copil&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; serbarein.txt&lt;br /&gt;
: 5 3&lt;br /&gt;
: 20 2&lt;br /&gt;
: 20 3&lt;br /&gt;
: 30 2&lt;br /&gt;
: 20 1&lt;br /&gt;
: 10 1&lt;br /&gt;
; serbareout.txt&lt;br /&gt;
: Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
: 2 1 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; serbarein.txt&lt;br /&gt;
: 3 3&lt;br /&gt;
: 20 q&lt;br /&gt;
: 20 3&lt;br /&gt;
: 30 3000&lt;br /&gt;
; serbareout.txt&lt;br /&gt;
: Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicaţii ==&lt;br /&gt;
Tipul &#039;&#039;&#039;2&#039;&#039;&#039; de uniformă este purtat de &#039;&#039;&#039;50&#039;&#039;&#039; de copii, tipul &#039;&#039;&#039;1&#039;&#039;&#039; de &#039;&#039;&#039;30&#039;&#039;&#039; de copii, iar tipul &#039;&#039;&#039;3 &#039;&#039;&#039;de &#039;&#039;&#039;20&#039;&#039;&#039; de copii.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1460  Serbare&lt;br /&gt;
def validare(n_validare, p_validare, grupe_validare):&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 1000:    # Verificăm dacă n este în intervalul 1-1000&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-1000&lt;br /&gt;
    if p_validare &amp;lt; 1 or p_validare &amp;gt; 11:    # Verificăm dacă p este în intervalul 1-11&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă p nu este în intervalul 1-11&lt;br /&gt;
    for grup in grupe_validare:    # Parcurgem lista de grupe&lt;br /&gt;
        # Verificăm dacă numărul de copii este în intervalul 1-100&lt;br /&gt;
        if grup[0] &amp;lt; 1 or grup[0] &amp;gt; 100:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        # Verificăm dacă tipul de uniformă este în intervalul 1-p&lt;br /&gt;
        if grup[1] &amp;lt; 1 or grup[1] &amp;gt; p_validare:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def uniforme(grupe):&lt;br /&gt;
    uni = {}  # Inițializăm un dicționar gol&lt;br /&gt;
    for grup in grupe:  # Parcurgem lista de grupe&lt;br /&gt;
        # Dacă tipul de uniformă nu se află încă în dicționar, îl adăugăm cu valoarea 0&lt;br /&gt;
        if grup[1] not in uni:&lt;br /&gt;
            uni[grup[1]] = 0&lt;br /&gt;
        # Adăugăm numărul de copii la totalul pentru tipul respectiv de uniformă&lt;br /&gt;
        uni[grup[1]] += grup[0]&lt;br /&gt;
    # Sortăm tipurile de uniforme în ordinea descrescătoare a numărului total de copii&lt;br /&gt;
    sort_uni = sorted(uni.items(), key=lambda x: x[1], reverse=True)&lt;br /&gt;
    return [uni[0] for uni in sort_uni]    # Returnăm tipurile de uniforme sortate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;serbarein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;serbareout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de grupe și tipuri de uniforme&lt;br /&gt;
        n_main, p_main = map(int, file_in.readline().split())&lt;br /&gt;
        # Citim datele pentru fiecare grup&lt;br /&gt;
        grupe_main = [list(map(int, file_in.readline().split())) for _ in range(n_main)]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, p_main, grupe_main)&lt;br /&gt;
        # Calculăm numărul total de copii pentru fiecare tip de uniformă&lt;br /&gt;
        rezultat_main = uniforme(grupe_main)&lt;br /&gt;
        # Scriem tipurile de uniforme în fișierul de ieșire, separate printr-un spațiu&lt;br /&gt;
        file_out.write(&#039; &#039;.join(str(uni) for uni in rezultat_main) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1013_-_Aniversari&amp;diff=7237</id>
		<title>1013 - Aniversari</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1013_-_Aniversari&amp;diff=7237"/>
		<updated>2023-11-11T14:44:59Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau datele de naștere a n persoane, numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;, în forma &#039;&#039;&#039;an luna zi&#039;&#039;&#039;. Să se determine numărul de ordine al celei mai tinere și al celei mai în vârstă persoană dintre cele date.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; triplete de numere naturale &#039;&#039;&#039;a l z&#039;&#039;&#039;, reprezentând anul, luna și ziua de naștere a fiecărei persoane.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran două numere &#039;&#039;&#039;p q&#039;&#039;&#039;, reprezentând numărul de ordine al celei mai tinere, respectiv al celei mai în vârstă persoană.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 1000&lt;br /&gt;
* cele &#039;&#039;&#039;n&#039;&#039;&#039; date calendaristice sunt corecte&lt;br /&gt;
* dacă există două sau mai multe persoane cele mai tinere (în vârstă) se va afișa numărul de ordine mai mic&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 5&lt;br /&gt;
: 1998 5 26&lt;br /&gt;
: 1987 12 18&lt;br /&gt;
: 1987 9 25&lt;br /&gt;
: 2015 1 16&lt;br /&gt;
: 2015 1 8&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 2&lt;br /&gt;
: 12 7 1990&lt;br /&gt;
: 14 2 2000&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1013  Aniversari&lt;br /&gt;
def validare(n_val, date_nastere_s):&lt;br /&gt;
    # Verificăm dacă numărul de persoane este în intervalul [1, 1000]&lt;br /&gt;
    if 1 &amp;lt;= n_val &amp;lt;= 1000:&lt;br /&gt;
        # Verificăm dacă data de naștere a fiecărei persoane este validă&lt;br /&gt;
        for an1, luna1, zi1 in date_nastere_s:&lt;br /&gt;
            # Data de naștere este validă dacă anul este între 1 și 9999, luna între 1 și 12, și ziua între 1 și 31&lt;br /&gt;
            if not(1 &amp;lt;= an1 &amp;lt;= 9999 and 1 &amp;lt;= luna1 &amp;lt;= 12 and 1 &amp;lt;= zi1 &amp;lt;= 31):&lt;br /&gt;
                # Dacă data de naștere nu este validă, ridicăm o excepție&lt;br /&gt;
                raise ValueError&lt;br /&gt;
        # Dacă toate datele de naștere sunt valide, returnăm numărul de persoane&lt;br /&gt;
        return n_val&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă numărul de persoane nu este în intervalul [1, 1000], ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def persoane(numar, data_nastere):&lt;br /&gt;
    # Inițializăm datele celei mai tinere și celei mai în vârstă persoane&lt;br /&gt;
    data_tanar = (0, 0, 0)&lt;br /&gt;
    data_batran = (9999, 12, 31)&lt;br /&gt;
    numar_tanar = numar_batran = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(numar):    # Parcurgem fiecare persoană&lt;br /&gt;
        anul, luna_nastere, zi_nastere = data_nastere[i]    # Extragem data de naștere a persoanei&lt;br /&gt;
        # Dacă persoana este mai tânără decât cea mai tânără persoană curentă&lt;br /&gt;
        if (anul, luna_nastere, zi_nastere) &amp;gt; data_tanar:&lt;br /&gt;
            # Actualizăm data celei mai tinere persoane și numărul său de ordine&lt;br /&gt;
            data_tanar = (anul, luna_nastere, zi_nastere)&lt;br /&gt;
            numar_tanar = i + 1&lt;br /&gt;
        # Dacă persoana este mai în vârstă decât cea mai în vârstă persoană curentă&lt;br /&gt;
        if (anul, luna_nastere, zi_nastere) &amp;lt; data_batran:&lt;br /&gt;
            # Actualizăm data celei mai în vârstă persoane și numărul său de ordine&lt;br /&gt;
            data_batran = (anul, luna_nastere, zi_nastere)&lt;br /&gt;
            numar_batran = i + 1&lt;br /&gt;
    return numar_tanar, numar_batran&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = input(&amp;quot;Introduceti numarul de persoane: &amp;quot;)    # Citim numărul de persoane de la utilizator&lt;br /&gt;
        date_nastere = []    # Inițializăm lista de date de naștere&lt;br /&gt;
&lt;br /&gt;
        # Citim data de naștere a fiecărei persoane de la utilizator&lt;br /&gt;
        for _ in range(int(n)):&lt;br /&gt;
            an, luna, zi = map(int, input(&amp;quot;Introduceti data de nastere a persoanei (an luna zi): &amp;quot;).split())&lt;br /&gt;
            date_nastere.append((an, luna, zi))&lt;br /&gt;
&lt;br /&gt;
        # Validăm numărul de persoane și datele de naștere&lt;br /&gt;
        n = validare(int(n), date_nastere)&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        nr_tanar, nr_batran = persoane(n, date_nastere)&lt;br /&gt;
        print(f&amp;quot;{nr_tanar} {nr_batran}&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0922_-_Puncte&amp;diff=7234</id>
		<title>0922 - Puncte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0922_-_Puncte&amp;diff=7234"/>
		<updated>2023-11-11T14:28:13Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau coordonatele carteziene a &#039;&#039;&#039;n&#039;&#039;&#039; puncte în plan. Să se determine distanța maximă dintre un punct dat și originea sistemului de coordonate și numărul de puncte situate la acea distanță față de origine.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; perechi de puncte &#039;&#039;&#039;x y&#039;&#039;&#039;, reprezentând coordonatele punctelor.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul va afișa pe ecran două numere &#039;&#039;&#039;D C&#039;&#039;&#039;, reprezentând distanța maximă față de originea sistemului și numărul de puncte situate la acea distanță.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 100&lt;br /&gt;
* coordonatele punctelor sunt numere întregi din intervalul &#039;&#039;&#039;[-1000,1000]&#039;&#039;&#039;&lt;br /&gt;
* distanța maximă se va afișa cu cel puțin trei zecimale exacte&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 7&lt;br /&gt;
: 2 -1 &lt;br /&gt;
: -2 4 &lt;br /&gt;
: 2 3 &lt;br /&gt;
: 3 -1 &lt;br /&gt;
: -2 -4 &lt;br /&gt;
: 2 -2 &lt;br /&gt;
: -4 2&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4.472 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 9&lt;br /&gt;
: 244a&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cele trei puncte aflate la distanța &#039;&#039;&#039;4.472&#039;&#039;&#039; față de origine sunt: &#039;&#039;&#039;-2 4&#039;&#039;&#039;, &#039;&#039;&#039;-2 -4&#039;&#039;&#039; și &#039;&#039;&#039;-4 2.&#039;&#039;&#039;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0922  Puncte&lt;br /&gt;
def verificare(n1_val, puncte_val1):&lt;br /&gt;
    # Verificăm dacă numărul de puncte este în intervalul [1, 100]&lt;br /&gt;
    if 1 &amp;lt;= n1_val &amp;lt;= 100:&lt;br /&gt;
        # Verificăm dacă coordonatele fiecărui punct sunt în intervalul [-1000, 1000]&lt;br /&gt;
        for x1_val, y1_val in puncte_val1:&lt;br /&gt;
            if not(-1000 &amp;lt;= x1_val &amp;lt;= 1000 and -1000 &amp;lt;= y1_val &amp;lt;= 1000):&lt;br /&gt;
                # Dacă un punct nu respectă restricțiile, ridicăm o excepție&lt;br /&gt;
                raise ValueError&lt;br /&gt;
        # Dacă toate punctele respectă restricțiile, returnăm numărul de puncte&lt;br /&gt;
        return n1_val&lt;br /&gt;
    else:&lt;br /&gt;
        # Dacă numărul de puncte nu este în intervalul [1, 100], ridicăm o excepție&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def distanta_maxima(numar_valoare, puncte_valoare):&lt;br /&gt;
    # Inițializăm distanța maximă și numărul de puncte&lt;br /&gt;
    distanta_max = 0&lt;br /&gt;
    numar_puncte = 0&lt;br /&gt;
    for i in range(numar_valoare):    # Parcurgem fiecare punct&lt;br /&gt;
        x_valoare, y_valoare = puncte_valoare[i]    # Extragem coordonatele punctului&lt;br /&gt;
&lt;br /&gt;
        # Calculăm distanța de la origine până la punct&lt;br /&gt;
        distanta = (x_valoare**2 + y_valoare**2)**0.5&lt;br /&gt;
&lt;br /&gt;
        # Dacă distanța este mai mare decât distanța maximă curentă&lt;br /&gt;
        if distanta &amp;gt; distanta_max:&lt;br /&gt;
            # Actualizăm distanța maximă și resetăm numărul de puncte&lt;br /&gt;
            distanta_max = distanta&lt;br /&gt;
            numar_puncte = 1&lt;br /&gt;
        # Dacă distanța este egală cu distanța maximă curentă&lt;br /&gt;
        elif distanta == distanta_max:&lt;br /&gt;
            numar_puncte += 1    # Incrementăm numărul de puncte&lt;br /&gt;
    return round(distanta_max, 3), numar_puncte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de puncte de la utilizator&lt;br /&gt;
        n_main = input(&amp;quot;Introduceti numarul de puncte: &amp;quot;)&lt;br /&gt;
        puncte_main = []    # Inițializăm lista de puncte&lt;br /&gt;
        # Citim coordonatele fiecărui punct de la utilizator&lt;br /&gt;
        for _ in range(int(n_main)):&lt;br /&gt;
            x_main, y_main = map(int, input(&amp;quot;Introduceti coordonatele punctului: &amp;quot;).split())&lt;br /&gt;
            puncte_main.append((x_main, y_main))&lt;br /&gt;
&lt;br /&gt;
        # Validăm numărul de puncte și coordonatele acestora&lt;br /&gt;
        n_main = verificare(int(n_main), puncte_main)&lt;br /&gt;
&lt;br /&gt;
        # Dacă datele introduse sunt valide, calculăm și afișăm distanța maximă și numărul de puncte&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        dist_max, nr_puncte = distanta_maxima(n_main, puncte_main)&lt;br /&gt;
        print(f&amp;quot;{dist_max} {nr_puncte}&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0923_-_Fractii_Max&amp;diff=7218</id>
		<title>0923 - Fractii Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0923_-_Fractii_Max&amp;diff=7218"/>
		<updated>2023-11-10T19:15:19Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;4&#039;&#039;&#039; numere naturale &#039;&#039;&#039;a b c d&#039;&#039;&#039;, reprezentând fracţiile &#039;&#039;&#039;a/b&#039;&#039;&#039; şi &#039;&#039;&#039;c/d&#039;&#039;&#039;. Determinați și afișați cea mai mare dintre cele două fracții.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;a b c d&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Programul afișează pe ecran numerele &#039;&#039;&#039;m n&#039;&#039;&#039;, separate prin exact un spațiu, reprezentând numărătorul şi numitorul fracției maxime, adusă la forma ireductibilă.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; a, b, c, d &amp;amp;les; 10000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 7 &lt;br /&gt;
: 14 &lt;br /&gt;
: 24 &lt;br /&gt;
: 18&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
: 4 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 4 &lt;br /&gt;
: 9 &lt;br /&gt;
: 15 &lt;br /&gt;
: 100000&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Fracția maximă este &#039;&#039;&#039;24/18&#039;&#039;&#039;. Prin simplificare devine &#039;&#039;&#039;4/3&#039;&#039;&#039;.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0923  Fractii Max&lt;br /&gt;
def verificare(valoare_numar):&lt;br /&gt;
    # Verificăm dacă numărul este între 1 și 10000&lt;br /&gt;
    if 1 &amp;lt;= valoare_numar &amp;lt;= 10000:&lt;br /&gt;
        return valoare_numar    # Dacă este, returnăm numărul&lt;br /&gt;
    else:&lt;br /&gt;
        raise ValueError    # Dacă nu este, ridicăm o excepție&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cmmdc(valoare1, valoare2):&lt;br /&gt;
    # Folosim algoritmul lui Euclid pentru a găsi cmmdc&lt;br /&gt;
    while valoare2:&lt;br /&gt;
        valoare1, valoare2 = valoare2, valoare1 % valoare2&lt;br /&gt;
    return valoare1    # Returnăm cmmdc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numerele de la utilizator&lt;br /&gt;
        a = input(&amp;quot;Introduceți numărătorul primei fracții: &amp;quot;)&lt;br /&gt;
        b = input(&amp;quot;Introduceți numitorul primei fracții: &amp;quot;)&lt;br /&gt;
        c = input(&amp;quot;Introduceți numărătorul celei de-a doua fracții: &amp;quot;)&lt;br /&gt;
        d = input(&amp;quot;Introduceți numitorul celei de-a doua fracții: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Validăm numerele folosind funcția de verificare&lt;br /&gt;
        a = verificare(int(a))&lt;br /&gt;
        b = verificare(int(b))&lt;br /&gt;
        c = verificare(int(c))&lt;br /&gt;
        d = verificare(int(d))&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm valorile fracțiilor&lt;br /&gt;
        frac1 = a / b&lt;br /&gt;
        frac2 = c / d&lt;br /&gt;
&lt;br /&gt;
        # Verificăm care fracție este mai mare și o simplificăm&lt;br /&gt;
        if frac1 &amp;gt; frac2:&lt;br /&gt;
            cmmdc_val = cmmdc(a, b)    # Calculăm cmmdc pentru a și b&lt;br /&gt;
            print(a // cmmdc_val, b // cmmdc_val)    # Afișăm fracția simplificată&lt;br /&gt;
        else:&lt;br /&gt;
            cmmdc_val = cmmdc(c, d)    # Calculăm cmmdc pentru c și d&lt;br /&gt;
            print(c // cmmdc_val, d // cmmdc_val)    # Afișăm fracția simplificată&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2714_-_Frecv_Imp&amp;diff=7217</id>
		<title>2714 - Frecv Imp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2714_-_Frecv_Imp&amp;diff=7217"/>
		<updated>2023-11-10T19:14:37Z</updated>

		<summary type="html">&lt;p&gt;AntalKrisztian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir format din &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Toate valorile putere a lui &#039;&#039;&#039;2&#039;&#039;&#039; din acest șir au frecvență pară, cu o singură excepție. Determinați această valoare – putere a lui &#039;&#039;&#039;2&#039;&#039;&#039; cu frecvență impară.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;frecvimpin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;frecvimpout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;p&#039;&#039;&#039;, reprezentând singura valoare din șirul dat care este putere a lui 2 și are frecvență impară.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 1.000.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare sunt naturale, nenule și mai mici decât &amp;lt;math&amp;gt; 9223372036854775807 &amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt; 9223372036854775807 &amp;lt;/math&amp;gt; = 2 &amp;lt;sup&amp;gt; 63 &amp;lt;/sup&amp;gt; - 1&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; frecvimpin.txt&lt;br /&gt;
: 10&lt;br /&gt;
: 41 235 64 41 512 64 1488 512 361 512&lt;br /&gt;
; frecvimpout.txt&lt;br /&gt;
: Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
: 512&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; frecvimpin.txt&lt;br /&gt;
: -1&lt;br /&gt;
: 22 77 99 11&lt;br /&gt;
; frecvimp.out&lt;br /&gt;
: Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
În fișierul de intrare sunt &#039;&#039;&#039;2&#039;&#039;&#039; puteri ale lui 2, &#039;&#039;&#039;64&#039;&#039;&#039; și &#039;&#039;&#039;512&#039;&#039;&#039;, dintre care &#039;&#039;&#039;512&#039;&#039;&#039; apare de &#039;&#039;&#039;3&#039;&#039;&#039; ori.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2714  Frecv Imp&lt;br /&gt;
def validare(n_validare, numere_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-1000000&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-1000000&lt;br /&gt;
    for numar in numere_validare:    # Parcurgem lista de numere&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; 9223372036854775807:&lt;br /&gt;
            # Ridicăm o eroare dacă numărul nu este în intervalul 1-9223372036854775807&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def frecvimp(numere):&lt;br /&gt;
    frec = {}    # Inițializăm un dicționar gol&lt;br /&gt;
    for numar in numere:    # Parcurgem lista de numere&lt;br /&gt;
        # Dacă numărul nu se află încă în dicționar, îl adăugăm cu frecvența 0&lt;br /&gt;
        if numar not in frec:&lt;br /&gt;
            frec[numar] = 0&lt;br /&gt;
        frec[numar] += 1    # Incrementăm frecvența numărului curent&lt;br /&gt;
&lt;br /&gt;
    for numar in frec:    # Parcurgem dicționarul&lt;br /&gt;
        # Dacă frecvența numărului curent este impară și dacă numărul este o putere a lui 2&lt;br /&gt;
        if frec[numar] % 2 == 1 and (numar &amp;amp; (numar - 1) == 0):&lt;br /&gt;
            return numar    # Dacă găsim un astfel de număr îl returnăm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;frecvimpin.txt&amp;quot;, &amp;quot;r&amp;quot;)    # Deschidem fișierul de intrare pentru citire&lt;br /&gt;
    file_out = open(&amp;quot;frecvimpout.txt&amp;quot;, &amp;quot;w&amp;quot;)    # Deschidem fișierul de ieșire pentru scriere&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de numere&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim numerele&lt;br /&gt;
        numere_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        validare(n_main, numere_main)    # Validăm datele de intrare&lt;br /&gt;
        # Calculăm și scriem numărul cu frecvență impară&lt;br /&gt;
        rezultat_main = frecvimp(numere_main)&lt;br /&gt;
        file_out.write(str(rezultat_main) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
</feed>