<?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=Sinn+Erich</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=Sinn+Erich"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Sinn_Erich"/>
	<updated>2026-05-02T15:22:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=28260&amp;diff=9537</id>
		<title>28260</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=28260&amp;diff=9537"/>
		<updated>2024-01-16T18:51:47Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: Pagină nouă: &amp;#039;&amp;#039;&amp;#039;28260 (Dana Heuberger)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Enunț&amp;#039;&amp;#039;&amp;#039;  Fie triunghiul echilateral ABC înscris în cercul de centru O și rază.1. Considerăm mulțimea M a punctelor X din plan cu proprietatea că &amp;lt;math&amp;gt;\overrightarrow{OX}= k&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\cdot \overrightarrow{OA} + m \cdot \overrightarrow{OB} + n \cdot \overrightarrow{OC}&amp;lt;/math&amp;gt;,unde &amp;lt;math&amp;gt;k,m,n \in N^*&amp;lt;/math&amp;gt;. Arătați că oricare ar fi punctele distincte &amp;lt;math&amp;gt;M,N,P \in M &amp;lt;/math&amp;gt; există &amp;lt;math&amp;gt;Q\in\{M}\&amp;lt;/math&amp;gt; astfel încât vecto...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;28260 (Dana Heuberger)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enunț&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Fie triunghiul echilateral ABC înscris în cercul de centru O și rază.1.&lt;br /&gt;
Considerăm mulțimea M a punctelor X din plan cu proprietatea că &amp;lt;math&amp;gt;\overrightarrow{OX}= k&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\cdot \overrightarrow{OA} + m \cdot \overrightarrow{OB} + n \cdot \overrightarrow{OC}&amp;lt;/math&amp;gt;,unde &amp;lt;math&amp;gt;k,m,n \in N^*&amp;lt;/math&amp;gt;. Arătați că oricare ar fi punctele distincte &amp;lt;math&amp;gt;M,N,P \in M &amp;lt;/math&amp;gt; există &amp;lt;math&amp;gt;Q\in\{M}\&amp;lt;/math&amp;gt; astfel încât vectorii &amp;lt;math&amp;gt;\overrightarrow{MN}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\overrightarrow{PQ} &amp;lt;/math&amp;gt;  și &amp;lt;math&amp;gt;\overrightarrow{NM}+&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\overrightarrow{QP}&amp;lt;/math&amp;gt; să formeze un triunghi echilateral.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Formăm in plan o rețea de triunghiuri echilaterale ale căror vârfuri&lt;br /&gt;
se află pe drepte paralele echidistante, avand direcțiile dreptelor OA,OB și OC,&lt;br /&gt;
distanța ditre două drepte consecutive fiind de &amp;lt;math&amp;gt;\sqrt{3}&amp;lt;/math&amp;gt;, ca în figura alăturată. Cum &amp;lt;math&amp;gt;\overrightarrow{OC}&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;-\overrightarrow{OC}&amp;lt;/math&amp;gt; - &amp;lt;math&amp;gt;\overrightarrow{OC}&amp;lt;/math&amp;gt; obținem că &amp;lt;math&amp;gt;X\in M&amp;lt;/math&amp;gt; dacă și numai dacă există &amp;lt;math&amp;gt;p,q\in Z&amp;lt;/math&amp;gt;, astfel încât &amp;lt;math&amp;gt;\overrightarrow{OX} = p&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OA} + q&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;\cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OB} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Analog,coordonatele lui &amp;lt;math&amp;gt;\overrightarrow{OX}&amp;lt;/math&amp;gt; în baza &amp;lt;math&amp;gt;(\overrightarrow{OB},\,\overrightarrow{OC})&amp;lt;/math&amp;gt;, precum și cele din baza &amp;lt;math&amp;gt;(\overrightarrow{OA},\,\overrightarrow{OC})&amp;lt;/math&amp;gt; sunt întregi. De aici rezultă ușor că &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; este mulțimea tuturor vârfurilor rețelei.&lt;br /&gt;
&lt;br /&gt;
Alegem punctele &amp;lt;math&amp;gt;M,N,P \in M &amp;lt;/math&amp;gt;. Dacă vectorul &amp;lt;math&amp;gt;\overrightarrow{MN}&amp;lt;/math&amp;gt; este paralel cu unul dintre vectorii &amp;lt;math&amp;gt;\overrightarrow{OA}&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;\overrightarrow{OB}&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;\overrightarrow{OA},&amp;lt;/math&amp;gt; problema este evidentă. Dacă &amp;lt;math&amp;gt;\overrightarrow{MN}&amp;lt;/math&amp;gt; nu este paralel cu niciunul dintre vectorii &amp;lt;math&amp;gt;\overrightarrow{OA},&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\overrightarrow{OB},&amp;lt;/math&amp;gt;,&amp;lt;math&amp;gt;\overrightarrow{OC},&amp;lt;/math&amp;gt; fie &amp;lt;math&amp;gt;a,b\in Z^*&amp;lt;/math&amp;gt; coordonatele lui &amp;lt;math&amp;gt;\overrightarrow{MN}&amp;lt;/math&amp;gt; în baza &amp;lt;math&amp;gt;(\overrightarrow{OA},&amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\overrightarrow{OB})&amp;lt;/math&amp;gt; și punctele &amp;lt;math&amp;gt;S,T,R,&amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt;\overrightarrow{SN} = a \cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OA},&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{MS} = b \cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OB},&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\overrightarrow{NR} = a \cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OC},&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;\overrightarrow{RT} = b \cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OA} &amp;lt;/math&amp;gt;. Rezultă &amp;lt;math&amp;gt;\overrightarrow{MN} = a \cdot &amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\overrightarrow{OA}+ b \cdot&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{OB} &amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;\overrightarrow{NT} = a \cdot &amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\overrightarrow{OC} + b \cdot &amp;lt;/math&amp;gt;&amp;lt;math&amp;gt;\overrightarrow{OA} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;math&amp;gt;a \cdot b &amp;gt; 0,&amp;lt;/math&amp;gt; atunci &amp;lt;math&amp;gt;m(\angle MSN) = m(\angle TRN) = 60^\circ&amp;lt;/math&amp;gt; , iar daca &amp;lt;math&amp;gt;a \cdot b &amp;lt; 0,&amp;lt;/math&amp;gt; atunci  &amp;lt;math&amp;gt;m(\angle MSN) = m(\angle TRN) = 120^\circ&amp;lt;/math&amp;gt;. Cum &amp;lt;math&amp;gt;MS = RT = |b|,&amp;lt;/math&amp;gt; iar &amp;lt;math&amp;gt; SN = NR = |a|,&amp;lt;/math&amp;gt; rezultă că triunghiurile &amp;lt;math&amp;gt;MNS&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;TNR&amp;lt;/math&amp;gt; sunt congruente, deci &amp;lt;math&amp;gt;TN = MN &amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;m(\angle MSN) = m(\angle TRN). &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Întrucât &amp;lt;math&amp;gt;m(\angle SNR) = 60^\circ&amp;lt;/math&amp;gt; , obținem și &amp;lt;math&amp;gt;m(\angle MNT) = 60^\circ&amp;lt;/math&amp;gt;, deci triunghiul &amp;lt;math&amp;gt;MNT&amp;lt;/math&amp;gt; este echilateral. Este suficient să alegem punctul &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt;\overrightarrow{PQ} =&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\overrightarrow{NT}&amp;lt;/math&amp;gt; și problema este rezolvată.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remarcă:&#039;&#039;&#039; &lt;br /&gt;
De fapt, triunghiul &amp;lt;math&amp;gt;TNR&amp;lt;/math&amp;gt; este imaginea triunghiului &amp;lt;math&amp;gt;MNS&amp;lt;/math&amp;gt; prin rotația de centru &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; și unghi de &amp;lt;math&amp;gt;60^/circ&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=Gazeta_Matematic%C4%83&amp;diff=9527</id>
		<title>Gazeta Matematică</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=Gazeta_Matematic%C4%83&amp;diff=9527"/>
		<updated>2024-01-16T17:38:34Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Această pagină conține o listă cu numerele revistei &#039;&#039;[https://gmb.ssmr.ro/ Gazeta Matematică]&#039;&#039; care conțin articole/probleme cu autori membri ai [https://ssmr.cunbm.utcluj.ro/ Filialei Maramureș] a [https://ssmr.ro/ Societății de Științe Matematice din România].&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Anul&lt;br /&gt;
!Numărul &lt;br /&gt;
!Numărul problemei&lt;br /&gt;
!Clasa&lt;br /&gt;
!Domeniu&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;13&amp;quot; |2022&lt;br /&gt;
|-&lt;br /&gt;
|rowspawn=&amp;quot;3&amp;quot;|1&lt;br /&gt;
| [[28260]]&lt;br /&gt;
|&lt;br /&gt;
|Geometrie&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|1 &lt;br /&gt;
| [[28247]]&lt;br /&gt;
|11&lt;br /&gt;
|Matrice&lt;br /&gt;
|-&lt;br /&gt;
| [[28250]]&lt;br /&gt;
|12&lt;br /&gt;
|integrala Riemann&lt;br /&gt;
|-&lt;br /&gt;
| [[28251]]&lt;br /&gt;
|12&lt;br /&gt;
|integrala Riemann&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| [[S:L22.58]]&lt;br /&gt;
|10&lt;br /&gt;
| ecuație cu logaritmi&lt;br /&gt;
|-&lt;br /&gt;
|4 - [[Gazeta Matematică nr 4 2022|link]]&lt;br /&gt;
| [[28315]]&lt;br /&gt;
|10  &lt;br /&gt;
|numere complexe&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
| [[28338]]&lt;br /&gt;
|10&lt;br /&gt;
|numere complexe&lt;br /&gt;
afixe&lt;br /&gt;
|-&lt;br /&gt;
|6-7-8&lt;br /&gt;
| [[28354]]&lt;br /&gt;
|9&lt;br /&gt;
|vectori&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot; |10 - [[Gazeta Matematică nr 10 2022|link]]&lt;br /&gt;
| [[28437]]&lt;br /&gt;
|11&lt;br /&gt;
|șir recurent&lt;br /&gt;
|-&lt;br /&gt;
|[[E:16379]]&lt;br /&gt;
|5&lt;br /&gt;
|numere naturale&lt;br /&gt;
|-&lt;br /&gt;
|[[E:16380]]&lt;br /&gt;
|5&lt;br /&gt;
|puteri &lt;br /&gt;
|-&lt;br /&gt;
|[[E:16382]]&lt;br /&gt;
|5&lt;br /&gt;
|puteri &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|11 &lt;br /&gt;
| [[E:16407]]&lt;br /&gt;
|5&lt;br /&gt;
|cub perfect&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[28450]]&lt;br /&gt;
|9&lt;br /&gt;
|progresii aritmetice&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;8&amp;quot; |2021&lt;br /&gt;
|rowspan = &amp;quot;3&amp;quot; |6-7-8 - [[Gazeta Matematică nr 6-7-8 din 2021|link]]&lt;br /&gt;
|[[E:15990]]&lt;br /&gt;
|5&lt;br /&gt;
|numere naturale&lt;br /&gt;
|-&lt;br /&gt;
| [[E:15991]]&lt;br /&gt;
|5&lt;br /&gt;
|numere naturale&lt;br /&gt;
|-&lt;br /&gt;
| [[E:15992]]&lt;br /&gt;
|5&lt;br /&gt;
|numere naturale&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|[[28163]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|rowspan= &amp;quot;3&amp;quot; | 11&lt;br /&gt;
|[[28203]]&lt;br /&gt;
|12&lt;br /&gt;
|funcție primitivabilă&lt;br /&gt;
|-&lt;br /&gt;
|[[S:L21.287]]&lt;br /&gt;
|9&lt;br /&gt;
|puteri&lt;br /&gt;
|-&lt;br /&gt;
|[[S:E21.313]]&lt;br /&gt;
|8&lt;br /&gt;
|ecuație&lt;br /&gt;
|-&lt;br /&gt;
|rowspan= &amp;quot;1&amp;quot; | 12&lt;br /&gt;
|[[28208]]&lt;br /&gt;
|9&lt;br /&gt;
|vectori&lt;br /&gt;
|-&lt;br /&gt;
|rowspan =&amp;quot;5&amp;quot;|2020&lt;br /&gt;
|rowspan =&amp;quot;3&amp;quot;| 4 - [[Gazeta Matematică nr 4 2020|link]]&lt;br /&gt;
|[[15698|E:15698]]&lt;br /&gt;
|6&lt;br /&gt;
|pătrate perfecte&lt;br /&gt;
|-&lt;br /&gt;
|[[E:15694]]&lt;br /&gt;
|5&lt;br /&gt;
|teorema împărțirii cu rest&lt;br /&gt;
|-&lt;br /&gt;
|[[E:15695]]&lt;br /&gt;
|5&lt;br /&gt;
|numere naturale&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[E:15714]]&lt;br /&gt;
|6&lt;br /&gt;
|divizibilitate &lt;br /&gt;
probabilitate&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|[[27930]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; |2018&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot; |4 - [[Gazeta Matematică nr 4 2018|link]]&lt;br /&gt;
| [[S:E18.128]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[S:E18.131]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[S:E18.131]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2017&lt;br /&gt;
|6-7-8&lt;br /&gt;
|[[27401]]&lt;br /&gt;
|10&lt;br /&gt;
|inegalitate&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;10&amp;quot; |2015&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|1&lt;br /&gt;
|[[27024]]&lt;br /&gt;
|12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[27020]]&lt;br /&gt;
|10&lt;br /&gt;
|coeficienți binomiali&lt;br /&gt;
|-&lt;br /&gt;
|2 - [[Gazeta Matematică nr 2 2015|link]]&lt;br /&gt;
|[[27036]]&lt;br /&gt;
|11&lt;br /&gt;
|ecuații funcționale&lt;br /&gt;
|-&lt;br /&gt;
|3 - [[Gazeta Matematică nr 2 2015|link]]&lt;br /&gt;
|[[27024]]&lt;br /&gt;
|12&lt;br /&gt;
|ecuații funcționale&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;6&amp;quot;|9&lt;br /&gt;
|[[E:14892]]&lt;br /&gt;
|8&lt;br /&gt;
|patrulater inscriptibil&lt;br /&gt;
|-&lt;br /&gt;
|[[S:E15.208]]&lt;br /&gt;
|5&lt;br /&gt;
|sumă de numere consecutive &lt;br /&gt;
|-&lt;br /&gt;
|[[S:E15.239]]&lt;br /&gt;
|8&lt;br /&gt;
|Teorema lui Pitagora&lt;br /&gt;
|-&lt;br /&gt;
|[[S:L15.236]]&lt;br /&gt;
|12&lt;br /&gt;
|funcție primitivabilă&lt;br /&gt;
|-&lt;br /&gt;
|[[S:L15.231]]&lt;br /&gt;
|12&lt;br /&gt;
|limita unui șir&lt;br /&gt;
|-&lt;br /&gt;
|[[S:L15.228]]&lt;br /&gt;
|11&lt;br /&gt;
|limita unui șir&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|2014&lt;br /&gt;
|1&lt;br /&gt;
|[[14682]]&lt;br /&gt;
|6&lt;br /&gt;
|Geometrie&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;| 2013&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|1&lt;br /&gt;
|[[26713]]&lt;br /&gt;
|11&lt;br /&gt;
|șiruri, limită&lt;br /&gt;
|-&lt;br /&gt;
|E:[[14440]]&lt;br /&gt;
|5&lt;br /&gt;
|pătrat perfect&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;4&amp;quot;| 2012&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|4&lt;br /&gt;
|[[E:14336]]&lt;br /&gt;
|&lt;br /&gt;
|ecuație funcțională&lt;br /&gt;
|-&lt;br /&gt;
|[[E:14331]]&lt;br /&gt;
| 7 &amp;amp; 8&lt;br /&gt;
|numere prime&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|9 - [[Gazeta Matematică nr 9 2012|link]]&lt;br /&gt;
|E:[[14380]]&lt;br /&gt;
|5&lt;br /&gt;
|numere naturale&lt;br /&gt;
|-&lt;br /&gt;
|[[14383|E:14383]]&lt;br /&gt;
|6&lt;br /&gt;
|cmmdc &amp;amp; cmmmc&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;| 2011&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|7-8-9 - [[Gazeta Matematică nr 789 2011|link]]&lt;br /&gt;
|[[E:14223]]&lt;br /&gt;
|7&lt;br /&gt;
|rezolvarea triunghiului&lt;br /&gt;
|-&lt;br /&gt;
|[[E:14228]]&lt;br /&gt;
|7&lt;br /&gt;
|radicali&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1915_-_Numar_Minim_1&amp;diff=5587</id>
		<title>1915 - Numar Minim 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1915_-_Numar_Minim_1&amp;diff=5587"/>
		<updated>2023-04-29T20:08:51Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana nu are clipă de răgaz. Profesorul de info îi cere acum să afle cel mai mic număr natural de &#039;&#039;&#039;n&#039;&#039;&#039; cifre care împărţit la b dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;. Poate o ajutaţi să treacă şi peste acest hop.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele&#039;&#039;&#039; n, b şi rest&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cel mai mic număr natural de n cifre care împărţit la b dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;b&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
dacă numărul nu există se va afişa -1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceți numărul de cifre:&lt;br /&gt;
: 5 &lt;br /&gt;
:Introduceți divizorul: &lt;br /&gt;
: 97 &lt;br /&gt;
:Introduceți restul:&lt;br /&gt;
: 14&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Cel mai mic număr de 5 cifre care împărțit la 97 dă restul 14 este 10005&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1915&lt;br /&gt;
def get_next_number(numar, n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Returnează următorul număr natural de n cifre care urmează după numar.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return numar + 10**(n - len(str(numar))) if numar + 1 &amp;gt;= 10**(n - 1) else 10**(n - 1)&lt;br /&gt;
&lt;br /&gt;
def find_number(n, b, rest):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Găsește cel mai mic număr natural de n cifre care împărțit la b dă restul rest.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    numar = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        numar = get_next_number(numar, n)&lt;br /&gt;
        if numar &amp;gt; 10**n - 1:&lt;br /&gt;
            return -1&lt;br /&gt;
        if numar % b == rest:&lt;br /&gt;
            return numar&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, b, rest):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă valorile introduse pentru n, b și rest respectă restricțiile impuse.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if n &amp;lt;= 0 or n &amp;gt; 100000 or b &amp;lt; 2 or b &amp;gt; 1000000000 or rest &amp;lt; 0 or rest &amp;gt;= b:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Funcția principală care citește numerele de la tastatură și afișează numărul cerut.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul de cifre: &amp;quot;))&lt;br /&gt;
    b = int(input(&amp;quot;Introduceți divizorul: &amp;quot;))&lt;br /&gt;
    rest = int(input(&amp;quot;Introduceți restul: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, b, rest):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    numar_cautat = find_number(n, b, rest)&lt;br /&gt;
    print(&amp;quot;Cel mai mic număr de&amp;quot;, n, &amp;quot;cifre care împărțit la&amp;quot;, b, &amp;quot;dă restul&amp;quot;, rest, &amp;quot;este&amp;quot;, numar_cautat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
Acest cod conține 3 funcții și o funcție principală:&lt;br /&gt;
&lt;br /&gt;
Funcția get_next_number(numar, n) primește un număr natural numar și numărul de cifre n și returnează următorul număr natural de n cifre care urmează după numar. Pentru aceasta, funcția adaugă 10**(n - len(str(numar))) la numar dacă numar + 1 este mai mare sau egal cu 10**(n - 1) (adică numărul numar + 1 are cel puțin n cifre), altfel returnează 10**(n - 1).&lt;br /&gt;
&lt;br /&gt;
Funcția find_number(n, b, rest) primește numărul de cifre n, divizorul b și restul rest și returnează cel mai mic număr natural de n cifre care împărțit la b dă restul rest. Funcția caută numărul începând de la 0, apelând funcția get_next_number() și verificând dacă numărul respectiv împărțit la b dă restul rest. Dacă da, atunci funcția returnează numărul găsit.&lt;br /&gt;
&lt;br /&gt;
Funcția principală main() citește numerele de la tastatură și afișează numărul cerut apelând funcția find_number().&lt;br /&gt;
&lt;br /&gt;
Astfel, programul determină cel mai mic număr natural de n cifre care împărțit la b dă restul rest folosind cele trei funcții descrise mai sus.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5586</id>
		<title>3166 - Vas 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5586"/>
		<updated>2023-04-29T20:04:48Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Într-un vas sunt &#039;&#039;&#039;apa_initiala&#039;&#039;&#039; litri de apă &#039;&#039;&#039;(apa_initiala&amp;gt;0)&#039;&#039;&#039;. După fiecare &#039;&#039;&#039;t&#039;&#039;&#039; minute, &#039;&#039;&#039;apa_initiala\rata_evaporare&#039;&#039;&#039; din cantitatea de apă rămasă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură patru numere naturale &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima,rata_evaporare&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul de minute necesare astfel încât in vas sa rămână cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apa.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
 &lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;rata_evaporare&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti apa initiala,timpul de evaporare,apa minima si rata de evaporare separate prin spatiu: &lt;br /&gt;
: 100 15 20 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
:Dupa 210 minute, vor ramane in vas cel mult 20 litri de apa&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3166&lt;br /&gt;
def calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
    remaining_water = apa_initiala&lt;br /&gt;
    elapsed_time = 0&lt;br /&gt;
    while remaining_water&amp;gt;rata_evaporare:&lt;br /&gt;
        evaporated_water = remaining_water / rata_evaporare&lt;br /&gt;
        remaining_water -= evaporated_water&lt;br /&gt;
        elapsed_time += timp_evaporare&lt;br /&gt;
    return elapsed_time&lt;br /&gt;
&lt;br /&gt;
def validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
    if not (1 &amp;lt;= apa_initiala &amp;lt;= 1000000000 and 1 &amp;lt;= timp_evaporare &amp;lt;= 1000000000 and 1 &amp;lt;= apa_minima &amp;lt;= 1000000000 and 2 &amp;lt;= rata_evaporare &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    apa_initiala, timp_evaporare, apa_minima, rata_evaporare = map(int, input(&amp;quot;Introduceti X T Y I, separate prin spatiu: &amp;quot;).split())&lt;br /&gt;
    if not validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        elapsed_time = calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Dupa&amp;quot;, elapsed_time, &amp;quot;minute, vor ramane in vas cel mult&amp;quot;, apa_minima, &amp;quot;litri de apa&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod are rolul de a calcula timpul necesar pentru ca cantitatea de apa dintr-un vas sa ajunga la o cantitate minima dupa evaporare, pe baza datelor de intrare: cantitatea initiala de apa din vas, timpul de evaporare pentru fiecare unitate de apa, cantitatea minima de apa pe care dorim sa o lasam in vas si rata de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_remaining_water_time primește ca parametri cantitatea inițială de apă, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Ea calculează timpul necesar pentru ca cantitatea de apă din vas să ajungă la cantitatea minimă prin scăderea continuă a cantității de apă evaporată de rata de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția validate_input primește ca parametri datele de intrare și returnează True dacă acestea respectă restricțiile impuse (cantitățile de apă trebuie să fie între 1 și 1.000.000.000, timpul de evaporare între 1 și 1.000.000.000, cantitatea minimă de apă între 1 și 1.000.000.000 și rata de evaporare între 2 și 100), altfel returnează False.&lt;br /&gt;
&lt;br /&gt;
În secțiunea principală, se cere utilizatorului să introducă cantitatea inițială de apă din vas, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Se validează datele de intrare cu ajutorul funcției validate_input, iar dacă acestea sunt valide, se calculează timpul necesar pentru evaporare cu ajutorul funcției calculate_remaining_water_time și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5585</id>
		<title>1910 - Numar Minim 0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5585"/>
		<updated>2023-04-29T20:00:59Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana a mai primit o problemă de la doamna profesor. Se dau &#039;&#039;&#039;n&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;primul_nr, al_doilea_nr, rest,&#039;&#039;&#039; iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu &#039;&#039;&#039;primul_nr&#039;&#039;&#039; , care împărţit la &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&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.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran, pe &#039;&#039;&#039;linii separate&#039;&#039;&#039;, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere cerute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează care este cel mai mic număr natural format cu n_cifre , care împărţit la m_cifre dă restul rest. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;primul_nr&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti numarul de triplete:&lt;br /&gt;
: 3&lt;br /&gt;
: Introduceti tripletul 1 de forma m_cifre n_cifre rest:&lt;br /&gt;
: 2 3 1&lt;br /&gt;
:Introduceti tripletul 2 de forma m_cifre n_cifre rest:&lt;br /&gt;
: 3 5 4&lt;br /&gt;
:Introduceti tripletul 3 de forma m_cifre n_cifre rest:&lt;br /&gt;
: 4 6 0&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 10&lt;br /&gt;
: 104&lt;br /&gt;
: 1002&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1910&lt;br /&gt;
def gaseste_numar(m_cifre, n_cifre, rest):&lt;br /&gt;
    for j in range(10**(m_cifre-1), 10**m_cifre):&lt;br /&gt;
        if j % n_cifre == rest:&lt;br /&gt;
            return j&lt;br /&gt;
&lt;br /&gt;
def validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
    if not (1 &amp;lt;= m_cifre &amp;lt;= 100000) or not (2 &amp;lt;= n_cifre &amp;lt;= 10) or not (0 &amp;lt;= rest &amp;lt; n_cifre):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de triplete: &amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        m_cifre, n_cifre, rest = map(int, input(&amp;quot;Introduceti tripletul {} de forma m_cifre n_cifre rest: &amp;quot;.format(i+1)).split())&lt;br /&gt;
        if not validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            print(gaseste_numar(m_cifre, n_cifre, rest))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse. &lt;br /&gt;
&lt;br /&gt;
Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare. &lt;br /&gt;
&lt;br /&gt;
Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran. &lt;br /&gt;
&lt;br /&gt;
Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1915_-_Numar_Minim_1&amp;diff=5584</id>
		<title>1915 - Numar Minim 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1915_-_Numar_Minim_1&amp;diff=5584"/>
		<updated>2023-04-29T19:59:02Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana nu are clipă de răgaz. Profesorul de info îi cere acum să afle cel mai mic număr natural de &#039;&#039;&#039;n&#039;&#039;&#039; cifre care împărţit la b dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;. Poate o ajutaţi să treacă şi peste acest hop.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele&#039;&#039;&#039; n, b şi rest&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cel mai mic număr natural de n cifre care împărţit la b dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;b&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
dacă numărul nu există se va afişa -1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceți numărul de cifre:&lt;br /&gt;
: 5 &lt;br /&gt;
:Introduceți divizorul: &lt;br /&gt;
: 97 &lt;br /&gt;
:Introduceți restul:&lt;br /&gt;
: 14&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Cel mai mic număr de 5 cifre care împărțit la 97 dă restul 14 este 10005&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1915&lt;br /&gt;
def get_next_number(numar, n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Returnează următorul număr natural de n cifre care urmează după numar.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return numar + 10**(n - len(str(numar))) if numar + 1 &amp;gt;= 10**(n - 1) else 10**(n - 1)&lt;br /&gt;
&lt;br /&gt;
def find_number(n, b, r):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Găsește cel mai mic număr natural de n cifre care împărțit la b dă restul r.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    numar = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        numar = get_next_number(numar, n)&lt;br /&gt;
        if numar &amp;gt; 10**n - 1:&lt;br /&gt;
            return -1&lt;br /&gt;
        if numar % b == r:&lt;br /&gt;
            return numar&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, b, r):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă valorile introduse pentru n, b și r respectă restricțiile impuse.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if n &amp;lt;= 0 or n &amp;gt; 100000 or b &amp;lt; 2 or b &amp;gt; 1000000000 or r &amp;lt; 0 or r &amp;gt;= b:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Funcția principală care citește numerele de la tastatură și afișează numărul cerut.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul de cifre: &amp;quot;))&lt;br /&gt;
    b = int(input(&amp;quot;Introduceți divizorul: &amp;quot;))&lt;br /&gt;
    r = int(input(&amp;quot;Introduceți restul: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, b, r):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    numar_cautat = find_number(n, b, r)&lt;br /&gt;
    print(&amp;quot;Cel mai mic număr de&amp;quot;, n, &amp;quot;cifre care împărțit la&amp;quot;, b, &amp;quot;dă restul&amp;quot;, r, &amp;quot;este&amp;quot;, numar_cautat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
Acest cod conține 3 funcții și o funcție principală:&lt;br /&gt;
&lt;br /&gt;
Funcția get_next_number(numar, n) primește un număr natural numar și numărul de cifre n și returnează următorul număr natural de n cifre care urmează după numar. Pentru aceasta, funcția adaugă 10**(n - len(str(numar))) la numar dacă numar + 1 este mai mare sau egal cu 10**(n - 1) (adică numărul numar + 1 are cel puțin n cifre), altfel returnează 10**(n - 1).&lt;br /&gt;
&lt;br /&gt;
Funcția find_number(n, b, r) primește numărul de cifre n, divizorul b și restul r și returnează cel mai mic număr natural de n cifre care împărțit la b dă restul r. Funcția caută numărul începând de la 0, apelând funcția get_next_number() și verificând dacă numărul respectiv împărțit la b dă restul r. Dacă da, atunci funcția returnează numărul găsit.&lt;br /&gt;
&lt;br /&gt;
Funcția principală main() citește numerele de la tastatură și afișează numărul cerut apelând funcția find_number().&lt;br /&gt;
&lt;br /&gt;
Astfel, programul determină cel mai mic număr natural de n cifre care împărțit la b dă restul r folosind cele trei funcții descrise mai sus.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5364</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5364"/>
		<updated>2023-04-29T09:47:24Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;N&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;N&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Numarul N este:&lt;br /&gt;
: 1&lt;br /&gt;
:Numarul A este:&lt;br /&gt;
: 4&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validate_input(a):&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def calculate_k(a):&lt;br /&gt;
    k = 0&lt;br /&gt;
    while a % 2 == 0:&lt;br /&gt;
        k += 1&lt;br /&gt;
        a //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(a))+1, 2):&lt;br /&gt;
        while a % i == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
            a //= i&lt;br /&gt;
    if a &amp;gt; 2:&lt;br /&gt;
        k += 1&lt;br /&gt;
    return k&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Numarul N este:&amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        a = int(input(&amp;quot;Numarul A este:&amp;quot;))&lt;br /&gt;
        if not validate_input(a):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            k = calculate_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. &lt;br /&gt;
&lt;br /&gt;
Funcția validate_input(a) verifică dacă numărul a respectă restricțiile impuse. În caz afirmativ, returnează True, altfel returnează False.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_k(a) primește ca parametru numărul a și calculează cel mai mare număr k astfel încât există un șir B de k numere naturale nenule, nu neapărat distincte, astfel încât produsul (B1 + 1)(B2 + 1)...(BK + 1) să fie egal cu a. Pentru a afla acest număr, se parcurg toți factorii primi ai lui a, iar pentru fiecare factor se împarte numărul a la factorul respectiv cât timp acesta este un divizor, crescând în același timp numărul k cu 1. Dacă la sfârșitul parcurgerii mai rămâne un factor mai mare decât 2, atunci și acesta trebuie inclus în produs, deci se adaugă încă un 1 la k.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &#039;__main__&#039;: se citește numărul t de valori date, apoi se parcurg acestea. Pentru fiecare valoare se verifică dacă respectă restricțiile cu ajutorul funcției validate_input(a). Dacă nu respectă, se afișează un mesaj corespunzător. Altfel, se calculează numărul k cu ajutorul funcției calculate_k(a) și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5363</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5363"/>
		<updated>2023-04-29T09:46:53Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;N&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;N&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validate_input(a):&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def calculate_k(a):&lt;br /&gt;
    k = 0&lt;br /&gt;
    while a % 2 == 0:&lt;br /&gt;
        k += 1&lt;br /&gt;
        a //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(a))+1, 2):&lt;br /&gt;
        while a % i == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
            a //= i&lt;br /&gt;
    if a &amp;gt; 2:&lt;br /&gt;
        k += 1&lt;br /&gt;
    return k&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Numarul N este:&amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        a = int(input(&amp;quot;Numarul A este:&amp;quot;))&lt;br /&gt;
        if not validate_input(a):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            k = calculate_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. &lt;br /&gt;
&lt;br /&gt;
Funcția validate_input(a) verifică dacă numărul a respectă restricțiile impuse. În caz afirmativ, returnează True, altfel returnează False.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_k(a) primește ca parametru numărul a și calculează cel mai mare număr k astfel încât există un șir B de k numere naturale nenule, nu neapărat distincte, astfel încât produsul (B1 + 1)(B2 + 1)...(BK + 1) să fie egal cu a. Pentru a afla acest număr, se parcurg toți factorii primi ai lui a, iar pentru fiecare factor se împarte numărul a la factorul respectiv cât timp acesta este un divizor, crescând în același timp numărul k cu 1. Dacă la sfârșitul parcurgerii mai rămâne un factor mai mare decât 2, atunci și acesta trebuie inclus în produs, deci se adaugă încă un 1 la k.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &#039;__main__&#039;: se citește numărul t de valori date, apoi se parcurg acestea. Pentru fiecare valoare se verifică dacă respectă restricțiile cu ajutorul funcției validate_input(a). Dacă nu respectă, se afișează un mesaj corespunzător. Altfel, se calculează numărul k cu ajutorul funcției calculate_k(a) și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5362</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5362"/>
		<updated>2023-04-29T09:44:56Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Restricţii şi precizări */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;N&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;N&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for factorizing a number into prime factors&lt;br /&gt;
def factorize(n):&lt;br /&gt;
    factors = []&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        factors.append(2)&lt;br /&gt;
        n //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(n)) + 1, 2):&lt;br /&gt;
        while n % i == 0:&lt;br /&gt;
            factors.append(i)&lt;br /&gt;
            n //= i&lt;br /&gt;
    if n &amp;gt; 2:&lt;br /&gt;
        factors.append(n)&lt;br /&gt;
    return factors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for finding the maximum value of k&lt;br /&gt;
def find_k(a):&lt;br /&gt;
    factors = factorize(a)&lt;br /&gt;
    max_k = 1&lt;br /&gt;
    for p in set(factors):&lt;br /&gt;
        k = factors.count(p)&lt;br /&gt;
        while a % (p ** k) == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
        max_k = max(max_k, k - 1)&lt;br /&gt;
    return max_k&lt;br /&gt;
def validate_input(t: int, a: int) -&amp;gt; bool:&lt;br /&gt;
    if not (1 &amp;lt;= t &amp;lt;= 500):&lt;br /&gt;
        print(&amp;quot;Numărul de teste nu respectă restricțiile impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        print(&amp;quot;Numărul a nu respectă restricțiile impuse.&amp;quot;)&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;
    t = int(input(&amp;quot;t:&amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;a:&amp;quot;))&lt;br /&gt;
    if validate_input(t, a):&lt;br /&gt;
        for i in range(t):&lt;br /&gt;
            k = find_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. În acest cod, este utilizată funcția &amp;quot;sqrt&amp;quot; pentru a găsi rădăcina pătrată a unui număr în funcția &amp;quot;factorize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;factorize&amp;quot; primește un număr &amp;quot;n&amp;quot; și returnează o listă cu factorii primi ai numărului. Algoritmul utilizat este metoda divizării repetate a numerelor la 2 și apoi testarea divizorilor impari de la 3 la radicalul pătrat al numărului &amp;quot;n&amp;quot;. Pentru fiecare divizor găsit, se adaugă la lista &amp;quot;factors&amp;quot; și se împarte numărul &amp;quot;n&amp;quot; la acel divizor, până când acesta nu mai poate fi împărțit.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;find_k&amp;quot; primește un număr &amp;quot;a&amp;quot; și calculează cel mai mare exponent &amp;quot;k&amp;quot;, astfel încât numărul să poată fi scris ca un produs de numere prime ridicate la puterea &amp;quot;k&amp;quot;. Pentru fiecare factor prim al numărului &amp;quot;a&amp;quot;, se calculează câte apariții are în lista de factori ai lui &amp;quot;a&amp;quot;. Apoi, se caută cel mai mare &amp;quot;k&amp;quot; astfel încât &amp;quot;a&amp;quot; să fie divizibil cu puterea a &amp;quot;p&amp;quot; la &amp;quot;k&amp;quot;. Valoarea maximă a &amp;quot;k&amp;quot; este returnată.&lt;br /&gt;
&lt;br /&gt;
La sfârșitul programului, utilizând condiția &amp;quot;if name == &#039;main&#039;&amp;quot;, se verifică dacă codul este rulat direct sau importat ca modul într-un alt program. În cazul în care programul este rulat direct, se citește numărul de cazuri de testare și se verifică dacă se încadrează în intervalul specificat, precum și pentru fiecare valoare a lui &amp;quot;a&amp;quot;. Dacă nu se îndeplinesc restricțiile, se afișează un mesaj de eroare și programul se termină. În caz contrar, se rezolvă fiecare caz de testare și se afișează răspunsul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5361</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5361"/>
		<updated>2023-04-29T09:44:48Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;N&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;N&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;T&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for factorizing a number into prime factors&lt;br /&gt;
def factorize(n):&lt;br /&gt;
    factors = []&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        factors.append(2)&lt;br /&gt;
        n //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(n)) + 1, 2):&lt;br /&gt;
        while n % i == 0:&lt;br /&gt;
            factors.append(i)&lt;br /&gt;
            n //= i&lt;br /&gt;
    if n &amp;gt; 2:&lt;br /&gt;
        factors.append(n)&lt;br /&gt;
    return factors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for finding the maximum value of k&lt;br /&gt;
def find_k(a):&lt;br /&gt;
    factors = factorize(a)&lt;br /&gt;
    max_k = 1&lt;br /&gt;
    for p in set(factors):&lt;br /&gt;
        k = factors.count(p)&lt;br /&gt;
        while a % (p ** k) == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
        max_k = max(max_k, k - 1)&lt;br /&gt;
    return max_k&lt;br /&gt;
def validate_input(t: int, a: int) -&amp;gt; bool:&lt;br /&gt;
    if not (1 &amp;lt;= t &amp;lt;= 500):&lt;br /&gt;
        print(&amp;quot;Numărul de teste nu respectă restricțiile impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        print(&amp;quot;Numărul a nu respectă restricțiile impuse.&amp;quot;)&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;
    t = int(input(&amp;quot;t:&amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;a:&amp;quot;))&lt;br /&gt;
    if validate_input(t, a):&lt;br /&gt;
        for i in range(t):&lt;br /&gt;
            k = find_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. În acest cod, este utilizată funcția &amp;quot;sqrt&amp;quot; pentru a găsi rădăcina pătrată a unui număr în funcția &amp;quot;factorize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;factorize&amp;quot; primește un număr &amp;quot;n&amp;quot; și returnează o listă cu factorii primi ai numărului. Algoritmul utilizat este metoda divizării repetate a numerelor la 2 și apoi testarea divizorilor impari de la 3 la radicalul pătrat al numărului &amp;quot;n&amp;quot;. Pentru fiecare divizor găsit, se adaugă la lista &amp;quot;factors&amp;quot; și se împarte numărul &amp;quot;n&amp;quot; la acel divizor, până când acesta nu mai poate fi împărțit.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;find_k&amp;quot; primește un număr &amp;quot;a&amp;quot; și calculează cel mai mare exponent &amp;quot;k&amp;quot;, astfel încât numărul să poată fi scris ca un produs de numere prime ridicate la puterea &amp;quot;k&amp;quot;. Pentru fiecare factor prim al numărului &amp;quot;a&amp;quot;, se calculează câte apariții are în lista de factori ai lui &amp;quot;a&amp;quot;. Apoi, se caută cel mai mare &amp;quot;k&amp;quot; astfel încât &amp;quot;a&amp;quot; să fie divizibil cu puterea a &amp;quot;p&amp;quot; la &amp;quot;k&amp;quot;. Valoarea maximă a &amp;quot;k&amp;quot; este returnată.&lt;br /&gt;
&lt;br /&gt;
La sfârșitul programului, utilizând condiția &amp;quot;if name == &#039;main&#039;&amp;quot;, se verifică dacă codul este rulat direct sau importat ca modul într-un alt program. În cazul în care programul este rulat direct, se citește numărul de cazuri de testare și se verifică dacă se încadrează în intervalul specificat, precum și pentru fiecare valoare a lui &amp;quot;a&amp;quot;. Dacă nu se îndeplinesc restricțiile, se afișează un mesaj de eroare și programul se termină. În caz contrar, se rezolvă fiecare caz de testare și se afișează răspunsul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5360</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5360"/>
		<updated>2023-04-29T09:42:54Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Date de intrare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;N&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;N&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conţine &#039;&#039;&#039;T&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, programul va rula.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: &#039;&#039;&#039; &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;T&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for factorizing a number into prime factors&lt;br /&gt;
def factorize(n):&lt;br /&gt;
    factors = []&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        factors.append(2)&lt;br /&gt;
        n //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(n)) + 1, 2):&lt;br /&gt;
        while n % i == 0:&lt;br /&gt;
            factors.append(i)&lt;br /&gt;
            n //= i&lt;br /&gt;
    if n &amp;gt; 2:&lt;br /&gt;
        factors.append(n)&lt;br /&gt;
    return factors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for finding the maximum value of k&lt;br /&gt;
def find_k(a):&lt;br /&gt;
    factors = factorize(a)&lt;br /&gt;
    max_k = 1&lt;br /&gt;
    for p in set(factors):&lt;br /&gt;
        k = factors.count(p)&lt;br /&gt;
        while a % (p ** k) == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
        max_k = max(max_k, k - 1)&lt;br /&gt;
    return max_k&lt;br /&gt;
def validate_input(t: int, a: int) -&amp;gt; bool:&lt;br /&gt;
    if not (1 &amp;lt;= t &amp;lt;= 500):&lt;br /&gt;
        print(&amp;quot;Numărul de teste nu respectă restricțiile impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        print(&amp;quot;Numărul a nu respectă restricțiile impuse.&amp;quot;)&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;
    t = int(input(&amp;quot;t:&amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;a:&amp;quot;))&lt;br /&gt;
    if validate_input(t, a):&lt;br /&gt;
        for i in range(t):&lt;br /&gt;
            k = find_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. În acest cod, este utilizată funcția &amp;quot;sqrt&amp;quot; pentru a găsi rădăcina pătrată a unui număr în funcția &amp;quot;factorize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;factorize&amp;quot; primește un număr &amp;quot;n&amp;quot; și returnează o listă cu factorii primi ai numărului. Algoritmul utilizat este metoda divizării repetate a numerelor la 2 și apoi testarea divizorilor impari de la 3 la radicalul pătrat al numărului &amp;quot;n&amp;quot;. Pentru fiecare divizor găsit, se adaugă la lista &amp;quot;factors&amp;quot; și se împarte numărul &amp;quot;n&amp;quot; la acel divizor, până când acesta nu mai poate fi împărțit.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;find_k&amp;quot; primește un număr &amp;quot;a&amp;quot; și calculează cel mai mare exponent &amp;quot;k&amp;quot;, astfel încât numărul să poată fi scris ca un produs de numere prime ridicate la puterea &amp;quot;k&amp;quot;. Pentru fiecare factor prim al numărului &amp;quot;a&amp;quot;, se calculează câte apariții are în lista de factori ai lui &amp;quot;a&amp;quot;. Apoi, se caută cel mai mare &amp;quot;k&amp;quot; astfel încât &amp;quot;a&amp;quot; să fie divizibil cu puterea a &amp;quot;p&amp;quot; la &amp;quot;k&amp;quot;. Valoarea maximă a &amp;quot;k&amp;quot; este returnată.&lt;br /&gt;
&lt;br /&gt;
La sfârșitul programului, utilizând condiția &amp;quot;if name == &#039;main&#039;&amp;quot;, se verifică dacă codul este rulat direct sau importat ca modul într-un alt program. În cazul în care programul este rulat direct, se citește numărul de cazuri de testare și se verifică dacă se încadrează în intervalul specificat, precum și pentru fiecare valoare a lui &amp;quot;a&amp;quot;. Dacă nu se îndeplinesc restricțiile, se afișează un mesaj de eroare și programul se termină. În caz contrar, se rezolvă fiecare caz de testare și se afișează răspunsul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5359</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5359"/>
		<updated>2023-04-29T09:42:39Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Cerinţa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;N&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;T&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;T&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conţine &#039;&#039;&#039;T&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, programul va rula.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: &#039;&#039;&#039; &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;T&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for factorizing a number into prime factors&lt;br /&gt;
def factorize(n):&lt;br /&gt;
    factors = []&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        factors.append(2)&lt;br /&gt;
        n //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(n)) + 1, 2):&lt;br /&gt;
        while n % i == 0:&lt;br /&gt;
            factors.append(i)&lt;br /&gt;
            n //= i&lt;br /&gt;
    if n &amp;gt; 2:&lt;br /&gt;
        factors.append(n)&lt;br /&gt;
    return factors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for finding the maximum value of k&lt;br /&gt;
def find_k(a):&lt;br /&gt;
    factors = factorize(a)&lt;br /&gt;
    max_k = 1&lt;br /&gt;
    for p in set(factors):&lt;br /&gt;
        k = factors.count(p)&lt;br /&gt;
        while a % (p ** k) == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
        max_k = max(max_k, k - 1)&lt;br /&gt;
    return max_k&lt;br /&gt;
def validate_input(t: int, a: int) -&amp;gt; bool:&lt;br /&gt;
    if not (1 &amp;lt;= t &amp;lt;= 500):&lt;br /&gt;
        print(&amp;quot;Numărul de teste nu respectă restricțiile impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        print(&amp;quot;Numărul a nu respectă restricțiile impuse.&amp;quot;)&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;
    t = int(input(&amp;quot;t:&amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;a:&amp;quot;))&lt;br /&gt;
    if validate_input(t, a):&lt;br /&gt;
        for i in range(t):&lt;br /&gt;
            k = find_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. În acest cod, este utilizată funcția &amp;quot;sqrt&amp;quot; pentru a găsi rădăcina pătrată a unui număr în funcția &amp;quot;factorize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;factorize&amp;quot; primește un număr &amp;quot;n&amp;quot; și returnează o listă cu factorii primi ai numărului. Algoritmul utilizat este metoda divizării repetate a numerelor la 2 și apoi testarea divizorilor impari de la 3 la radicalul pătrat al numărului &amp;quot;n&amp;quot;. Pentru fiecare divizor găsit, se adaugă la lista &amp;quot;factors&amp;quot; și se împarte numărul &amp;quot;n&amp;quot; la acel divizor, până când acesta nu mai poate fi împărțit.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;find_k&amp;quot; primește un număr &amp;quot;a&amp;quot; și calculează cel mai mare exponent &amp;quot;k&amp;quot;, astfel încât numărul să poată fi scris ca un produs de numere prime ridicate la puterea &amp;quot;k&amp;quot;. Pentru fiecare factor prim al numărului &amp;quot;a&amp;quot;, se calculează câte apariții are în lista de factori ai lui &amp;quot;a&amp;quot;. Apoi, se caută cel mai mare &amp;quot;k&amp;quot; astfel încât &amp;quot;a&amp;quot; să fie divizibil cu puterea a &amp;quot;p&amp;quot; la &amp;quot;k&amp;quot;. Valoarea maximă a &amp;quot;k&amp;quot; este returnată.&lt;br /&gt;
&lt;br /&gt;
La sfârșitul programului, utilizând condiția &amp;quot;if name == &#039;main&#039;&amp;quot;, se verifică dacă codul este rulat direct sau importat ca modul într-un alt program. În cazul în care programul este rulat direct, se citește numărul de cazuri de testare și se verifică dacă se încadrează în intervalul specificat, precum și pentru fiecare valoare a lui &amp;quot;a&amp;quot;. Dacă nu se îndeplinesc restricțiile, se afișează un mesaj de eroare și programul se termină. În caz contrar, se rezolvă fiecare caz de testare și se afișează răspunsul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5358</id>
		<title>2037 - Dec 2 Ord</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2037_-_Dec_2_Ord&amp;diff=5358"/>
		<updated>2023-04-29T09:42:30Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Cerinţa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Vrăjitorul Arpsod are foarte multă treabă, așa că s-a gândit să vă ocupe timpul cu o problemă foarte grea, astfel încât acesta să poată lucra liniștit la proiectele sale despre stăpânirea lumii.&lt;br /&gt;
&lt;br /&gt;
Acesta vă dă &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Pentru fiecare număr &#039;&#039;&#039;A&#039;&#039;&#039; trebuie să găsiți cel mai mare &#039;&#039;&#039;K&#039;&#039;&#039; cu proprietatea că există un șir &#039;&#039;&#039;B&#039;&#039;&#039; de numere naturale nenule, nu neapărat distincte, astfel încât: &#039;&#039;&#039;(B1 + 1)(B2 + 1)...(BK + 1) = A&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arătați-i vrăjitorului că problema nu e suficient de grea pentru voi, găsind numărul &#039;&#039;&#039;K&#039;&#039;&#039; cerut într-un timp cât mai scurt, pentru fiecare din cele &#039;&#039;&#039;T&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va conţine pe prima linie numărul natural &#039;&#039;&#039;T&#039;&#039;&#039;, reprezentând numărul de valori date. Urmează apoi &#039;&#039;&#039;T&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;A&#039;&#039;&#039;, numărul dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conţine &#039;&#039;&#039;T&#039;&#039;&#039; linii. Pe fiecare linie va exista un număr &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul maxim de termeni pe care îi poate avea șirul, astfel încât să respecte proprietatea cerută. Prima linie reprezintă raspunsul pentru primul număr, a doua penrtu cel de-al doilea … şamd.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, programul va rula.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: &#039;&#039;&#039; &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;T&#039;&#039;&#039; ≤ 500&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;A&#039;&#039;&#039; ≤ 2.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2037&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for factorizing a number into prime factors&lt;br /&gt;
def factorize(n):&lt;br /&gt;
    factors = []&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        factors.append(2)&lt;br /&gt;
        n //= 2&lt;br /&gt;
    for i in range(3, int(math.sqrt(n)) + 1, 2):&lt;br /&gt;
        while n % i == 0:&lt;br /&gt;
            factors.append(i)&lt;br /&gt;
            n //= i&lt;br /&gt;
    if n &amp;gt; 2:&lt;br /&gt;
        factors.append(n)&lt;br /&gt;
    return factors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# function for finding the maximum value of k&lt;br /&gt;
def find_k(a):&lt;br /&gt;
    factors = factorize(a)&lt;br /&gt;
    max_k = 1&lt;br /&gt;
    for p in set(factors):&lt;br /&gt;
        k = factors.count(p)&lt;br /&gt;
        while a % (p ** k) == 0:&lt;br /&gt;
            k += 1&lt;br /&gt;
        max_k = max(max_k, k - 1)&lt;br /&gt;
    return max_k&lt;br /&gt;
def validate_input(t: int, a: int) -&amp;gt; bool:&lt;br /&gt;
    if not (1 &amp;lt;= t &amp;lt;= 500):&lt;br /&gt;
        print(&amp;quot;Numărul de teste nu respectă restricțiile impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= a &amp;lt;= 2000000000):&lt;br /&gt;
        print(&amp;quot;Numărul a nu respectă restricțiile impuse.&amp;quot;)&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;
    t = int(input(&amp;quot;t:&amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;a:&amp;quot;))&lt;br /&gt;
    if validate_input(t, a):&lt;br /&gt;
        for i in range(t):&lt;br /&gt;
            k = find_k(a)&lt;br /&gt;
            print(k)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Importul &amp;quot;math&amp;quot; este o bibliotecă standard în Python, care oferă o serie de funcții matematice. În acest cod, este utilizată funcția &amp;quot;sqrt&amp;quot; pentru a găsi rădăcina pătrată a unui număr în funcția &amp;quot;factorize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;factorize&amp;quot; primește un număr &amp;quot;n&amp;quot; și returnează o listă cu factorii primi ai numărului. Algoritmul utilizat este metoda divizării repetate a numerelor la 2 și apoi testarea divizorilor impari de la 3 la radicalul pătrat al numărului &amp;quot;n&amp;quot;. Pentru fiecare divizor găsit, se adaugă la lista &amp;quot;factors&amp;quot; și se împarte numărul &amp;quot;n&amp;quot; la acel divizor, până când acesta nu mai poate fi împărțit.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;find_k&amp;quot; primește un număr &amp;quot;a&amp;quot; și calculează cel mai mare exponent &amp;quot;k&amp;quot;, astfel încât numărul să poată fi scris ca un produs de numere prime ridicate la puterea &amp;quot;k&amp;quot;. Pentru fiecare factor prim al numărului &amp;quot;a&amp;quot;, se calculează câte apariții are în lista de factori ai lui &amp;quot;a&amp;quot;. Apoi, se caută cel mai mare &amp;quot;k&amp;quot; astfel încât &amp;quot;a&amp;quot; să fie divizibil cu puterea a &amp;quot;p&amp;quot; la &amp;quot;k&amp;quot;. Valoarea maximă a &amp;quot;k&amp;quot; este returnată.&lt;br /&gt;
&lt;br /&gt;
La sfârșitul programului, utilizând condiția &amp;quot;if name == &#039;main&#039;&amp;quot;, se verifică dacă codul este rulat direct sau importat ca modul într-un alt program. În cazul în care programul este rulat direct, se citește numărul de cazuri de testare și se verifică dacă se încadrează în intervalul specificat, precum și pentru fiecare valoare a lui &amp;quot;a&amp;quot;. Dacă nu se îndeplinesc restricțiile, se afișează un mesaj de eroare și programul se termină. În caz contrar, se rezolvă fiecare caz de testare și se afișează răspunsul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5357</id>
		<title>1910 - Numar Minim 0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5357"/>
		<updated>2023-04-29T09:37:37Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana a mai primit o problemă de la doamna profesor. Se dau &#039;&#039;&#039;n&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;primul_nr, al_doilea_nr, rest,&#039;&#039;&#039; iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu &#039;&#039;&#039;primul_nr&#039;&#039;&#039; , care împărţit la &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&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.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran, pe &#039;&#039;&#039;linii separate&#039;&#039;&#039;, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere cerute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează care este cel mai mic număr natural format cu n_cifre , care împărţit la m_cifre dă restul rest. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;primul_nr&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti numarul de triplete:&lt;br /&gt;
: 3&lt;br /&gt;
: Introduceti tripletul {} de forma: primul_nr, al_doilea_nr si restul&lt;br /&gt;
: 2 3 1&lt;br /&gt;
: 3 5 4&lt;br /&gt;
: 4 6 0&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 10&lt;br /&gt;
: 104&lt;br /&gt;
: 1002&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1910&lt;br /&gt;
def gaseste_numar(m_cifre, n_cifre, rest):&lt;br /&gt;
    for j in range(10**(m_cifre-1), 10**m_cifre):&lt;br /&gt;
        if j % n_cifre == rest:&lt;br /&gt;
            return j&lt;br /&gt;
&lt;br /&gt;
def validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
    if not (1 &amp;lt;= m_cifre &amp;lt;= 100000) or not (2 &amp;lt;= n_cifre &amp;lt;= 10) or not (0 &amp;lt;= rest &amp;lt; n_cifre):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de triplete: &amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        m_cifre, n_cifre, rest = map(int, input(&amp;quot;Introduceti tripletul {} de forma m_cifre n_cifre rest: &amp;quot;.format(i+1)).split())&lt;br /&gt;
        if not validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            print(gaseste_numar(m_cifre, n_cifre, rest))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse. &lt;br /&gt;
&lt;br /&gt;
Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare. &lt;br /&gt;
&lt;br /&gt;
Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran. &lt;br /&gt;
&lt;br /&gt;
Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5356</id>
		<title>1910 - Numar Minim 0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5356"/>
		<updated>2023-04-29T09:37:11Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana a mai primit o problemă de la doamna profesor. Se dau &#039;&#039;&#039;n&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;primul_nr, al_doilea_nr, rest,&#039;&#039;&#039; iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu &#039;&#039;&#039;primul_nr&#039;&#039;&#039; , care împărţit la &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&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.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran, pe &#039;&#039;&#039;linii separate&#039;&#039;&#039;, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere cerute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează care este cel mai mic număr natural format cu n_cifre , care împărţit la m_cifre dă restul rest. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;primul_nr&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti numarul de triplete:&lt;br /&gt;
: 3&lt;br /&gt;
: Introduceti tripletul {} de forma primul_nr, al_doilea_nr si restul:&lt;br /&gt;
: 2 3 1&lt;br /&gt;
: 3 5 4&lt;br /&gt;
: 4 6 0&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 10&lt;br /&gt;
: 104&lt;br /&gt;
: 1002&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1910&lt;br /&gt;
def gaseste_numar(m_cifre, n_cifre, rest):&lt;br /&gt;
    for j in range(10**(m_cifre-1), 10**m_cifre):&lt;br /&gt;
        if j % n_cifre == rest:&lt;br /&gt;
            return j&lt;br /&gt;
&lt;br /&gt;
def validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
    if not (1 &amp;lt;= m_cifre &amp;lt;= 100000) or not (2 &amp;lt;= n_cifre &amp;lt;= 10) or not (0 &amp;lt;= rest &amp;lt; n_cifre):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de triplete: &amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        m_cifre, n_cifre, rest = map(int, input(&amp;quot;Introduceti tripletul {} de forma m_cifre n_cifre rest: &amp;quot;.format(i+1)).split())&lt;br /&gt;
        if not validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            print(gaseste_numar(m_cifre, n_cifre, rest))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse. &lt;br /&gt;
&lt;br /&gt;
Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare. &lt;br /&gt;
&lt;br /&gt;
Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran. &lt;br /&gt;
&lt;br /&gt;
Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5355</id>
		<title>1910 - Numar Minim 0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5355"/>
		<updated>2023-04-29T09:35:51Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Restricţii şi precizări */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana a mai primit o problemă de la doamna profesor. Se dau &#039;&#039;&#039;n&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;primul_nr, al_doilea_nr, rest,&#039;&#039;&#039; iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu &#039;&#039;&#039;primul_nr&#039;&#039;&#039; , care împărţit la &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&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.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran, pe &#039;&#039;&#039;linii separate&#039;&#039;&#039;, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere cerute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează care este cel mai mic număr natural format cu n_cifre , care împărţit la m_cifre dă restul rest. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;primul_nr&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti numarul de triplete:&lt;br /&gt;
: 3&lt;br /&gt;
: Introduceti tripletul {} de forma n_cifre m_cifre rest: &amp;quot;&lt;br /&gt;
: 2 3 1&lt;br /&gt;
: 3 5 4&lt;br /&gt;
: 4 6 0&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 10&lt;br /&gt;
: 104&lt;br /&gt;
: 1002&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1910&lt;br /&gt;
def gaseste_numar(m_cifre, n_cifre, rest):&lt;br /&gt;
    for j in range(10**(m_cifre-1), 10**m_cifre):&lt;br /&gt;
        if j % n_cifre == rest:&lt;br /&gt;
            return j&lt;br /&gt;
&lt;br /&gt;
def validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
    if not (1 &amp;lt;= m_cifre &amp;lt;= 100000) or not (2 &amp;lt;= n_cifre &amp;lt;= 10) or not (0 &amp;lt;= rest &amp;lt; n_cifre):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de triplete: &amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        m_cifre, n_cifre, rest = map(int, input(&amp;quot;Introduceti tripletul {} de forma m_cifre n_cifre rest: &amp;quot;.format(i+1)).split())&lt;br /&gt;
        if not validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            print(gaseste_numar(m_cifre, n_cifre, rest))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse. &lt;br /&gt;
&lt;br /&gt;
Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare. &lt;br /&gt;
&lt;br /&gt;
Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran. &lt;br /&gt;
&lt;br /&gt;
Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5354</id>
		<title>1910 - Numar Minim 0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1910_-_Numar_Minim_0&amp;diff=5354"/>
		<updated>2023-04-29T09:35:11Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Cerinţa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Georgiana a mai primit o problemă de la doamna profesor. Se dau &#039;&#039;&#039;n&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;primul_nr, al_doilea_nr, rest,&#039;&#039;&#039; iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu &#039;&#039;&#039;primul_nr&#039;&#039;&#039; , care împărţit la &#039;&#039;&#039;al_doilea_nr&#039;&#039;&#039; dă restul &#039;&#039;&#039;rest&#039;&#039;&#039;.&lt;br /&gt;
&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.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran, pe &#039;&#039;&#039;linii separate&#039;&#039;&#039;, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere cerute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează care este cel mai mic număr natural format cu n_cifre , care împărţit la m_cifre dă restul rest. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n_cifre&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;m_cifre&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;rest&#039;&#039;&#039; &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti numarul de triplete:&lt;br /&gt;
: 3&lt;br /&gt;
: Introduceti tripletul {} de forma n_cifre m_cifre rest: &amp;quot;&lt;br /&gt;
: 2 3 1&lt;br /&gt;
: 3 5 4&lt;br /&gt;
: 4 6 0&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 10&lt;br /&gt;
: 104&lt;br /&gt;
: 1002&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1910&lt;br /&gt;
def gaseste_numar(m_cifre, n_cifre, rest):&lt;br /&gt;
    for j in range(10**(m_cifre-1), 10**m_cifre):&lt;br /&gt;
        if j % n_cifre == rest:&lt;br /&gt;
            return j&lt;br /&gt;
&lt;br /&gt;
def validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
    if not (1 &amp;lt;= m_cifre &amp;lt;= 100000) or not (2 &amp;lt;= n_cifre &amp;lt;= 10) or not (0 &amp;lt;= rest &amp;lt; n_cifre):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de triplete: &amp;quot;))&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        m_cifre, n_cifre, rest = map(int, input(&amp;quot;Introduceti tripletul {} de forma m_cifre n_cifre rest: &amp;quot;.format(i+1)).split())&lt;br /&gt;
        if not validate_input(m_cifre, n_cifre, rest):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
            print(gaseste_numar(m_cifre, n_cifre, rest))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse. &lt;br /&gt;
&lt;br /&gt;
Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare. &lt;br /&gt;
&lt;br /&gt;
Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran. &lt;br /&gt;
&lt;br /&gt;
Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5353</id>
		<title>3166 - Vas 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5353"/>
		<updated>2023-04-29T09:33:03Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Într-un vas sunt &#039;&#039;&#039;apa_initiala&#039;&#039;&#039; litri de apă &#039;&#039;&#039;(apa_initiala&amp;gt;0)&#039;&#039;&#039;. După fiecare &#039;&#039;&#039;t&#039;&#039;&#039; minute, &#039;&#039;&#039;apa_initiala\rata_evaporare&#039;&#039;&#039; din cantitatea de apă rămasă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură patru numere naturale &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima,rata_evaporare&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul de minute necesare astfel încât in vas sa rămână cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apa.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
 &lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;rata_evaporare&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Apa initiala este:&lt;br /&gt;
: 100 &lt;br /&gt;
:Timpul de evaporare este:&lt;br /&gt;
:15&lt;br /&gt;
:Apa minima este: &lt;br /&gt;
:20&lt;br /&gt;
:Rata de evaporare este:&lt;br /&gt;
:5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Dupa 120 minute vor ramane in vas cel mult 20 litri de apa.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3166&lt;br /&gt;
def calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
    remaining_water = apa_initiala&lt;br /&gt;
    elapsed_time = 0&lt;br /&gt;
    while remaining_water&amp;gt;rata_evaporare:&lt;br /&gt;
        evaporated_water = remaining_water / rata_evaporare&lt;br /&gt;
        remaining_water -= evaporated_water&lt;br /&gt;
        elapsed_time += timp_evaporare&lt;br /&gt;
    return elapsed_time&lt;br /&gt;
&lt;br /&gt;
def validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
    if not (1 &amp;lt;= apa_initiala &amp;lt;= 1000000000 and 1 &amp;lt;= timp_evaporare &amp;lt;= 1000000000 and 1 &amp;lt;= apa_minima &amp;lt;= 1000000000 and 2 &amp;lt;= rata_evaporare &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    apa_initiala, timp_evaporare, apa_minima, rata_evaporare = map(int, input(&amp;quot;Introduceti X T Y I, separate prin spatiu: &amp;quot;).split())&lt;br /&gt;
    if not validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        elapsed_time = calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Dupa&amp;quot;, elapsed_time, &amp;quot;minute, vor ramane in vas cel mult&amp;quot;, apa_minima, &amp;quot;litri de apa&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod are rolul de a calcula timpul necesar pentru ca cantitatea de apa dintr-un vas sa ajunga la o cantitate minima dupa evaporare, pe baza datelor de intrare: cantitatea initiala de apa din vas, timpul de evaporare pentru fiecare unitate de apa, cantitatea minima de apa pe care dorim sa o lasam in vas si rata de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_remaining_water_time primește ca parametri cantitatea inițială de apă, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Ea calculează timpul necesar pentru ca cantitatea de apă din vas să ajungă la cantitatea minimă prin scăderea continuă a cantității de apă evaporată de rata de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția validate_input primește ca parametri datele de intrare și returnează True dacă acestea respectă restricțiile impuse (cantitățile de apă trebuie să fie între 1 și 1.000.000.000, timpul de evaporare între 1 și 1.000.000.000, cantitatea minimă de apă între 1 și 1.000.000.000 și rata de evaporare între 2 și 100), altfel returnează False.&lt;br /&gt;
&lt;br /&gt;
În secțiunea principală, se cere utilizatorului să introducă cantitatea inițială de apă din vas, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Se validează datele de intrare cu ajutorul funcției validate_input, iar dacă acestea sunt valide, se calculează timpul necesar pentru evaporare cu ajutorul funcției calculate_remaining_water_time și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5352</id>
		<title>3166 - Vas 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5352"/>
		<updated>2023-04-29T09:31:57Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Într-un vas sunt &#039;&#039;&#039;apa_initiala&#039;&#039;&#039; litri de apă &#039;&#039;&#039;(apa_initiala&amp;gt;0)&#039;&#039;&#039;. După fiecare &#039;&#039;&#039;t&#039;&#039;&#039; minute, &#039;&#039;&#039;apa_initiala\rata_evaporare&#039;&#039;&#039; din cantitatea de apă rămasă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură patru numere naturale &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima,rata_evaporare&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul de minute necesare astfel încât in vas sa rămână cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apa.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
 &lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;rata_evaporare&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Apa initiala este:&lt;br /&gt;
: 100 &lt;br /&gt;
:Timpul de evaporare este:&lt;br /&gt;
:15&lt;br /&gt;
:Apa minima este: &lt;br /&gt;
:20&lt;br /&gt;
:Rata de evaporare este:&lt;br /&gt;
:5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Dupa 120 minute vor ramane in vas cel mult 20 litri de apa.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3166&lt;br /&gt;
def calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
    remaining_water = apa_initiala&lt;br /&gt;
    elapsed_time = 0&lt;br /&gt;
    while remaining_water&amp;gt;rata_evaporare:&lt;br /&gt;
        evaporated_water = remaining_water / rata_evaporare&lt;br /&gt;
        remaining_water -= evaporated_water&lt;br /&gt;
        elapsed_time += timp_evaporare&lt;br /&gt;
    return elapsed_time&lt;br /&gt;
&lt;br /&gt;
def validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
    if not (1 &amp;lt;= apa_initiala &amp;lt;= 1000000000 and 1 &amp;lt;= timp_evaporare &amp;lt;= 1000000000 and 1 &amp;lt;= apa_minima &amp;lt;= 1000000000 and 2 &amp;lt;= rata_evaporare &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    apa_initiala, timp_evaporare, apa_minima, rata_evaporare = map(int, input(&amp;quot;Introduceti X T Y I, separate prin spatiu: &amp;quot;).split())&lt;br /&gt;
    if not validate_input(apa_initiala, timp_evaporare, apa_minima, rata_evaporare):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        elapsed_time = calculate_remaining_water_time(apa_initiala, timp_evaporare, apa_minima, rata_evaporare)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Dupa&amp;quot;, elapsed_time, &amp;quot;minute, vor ramane in vas cel mult&amp;quot;, apa_minima, &amp;quot;liapa_initiala&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod are rolul de a calcula timpul necesar pentru ca cantitatea de apa dintr-un vas sa ajunga la o cantitate minima dupa evaporare, pe baza datelor de intrare: cantitatea initiala de apa din vas, timpul de evaporare pentru fiecare unitate de apa, cantitatea minima de apa pe care dorim sa o lasam in vas si rata de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_remaining_water_time primește ca parametri cantitatea inițială de apă, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Ea calculează timpul necesar pentru ca cantitatea de apă din vas să ajungă la cantitatea minimă prin scăderea continuă a cantității de apă evaporată de rata de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția validate_input primește ca parametri datele de intrare și returnează True dacă acestea respectă restricțiile impuse (cantitățile de apă trebuie să fie între 1 și 1.000.000.000, timpul de evaporare între 1 și 1.000.000.000, cantitatea minimă de apă între 1 și 1.000.000.000 și rata de evaporare între 2 și 100), altfel returnează False.&lt;br /&gt;
&lt;br /&gt;
În secțiunea principală, se cere utilizatorului să introducă cantitatea inițială de apă din vas, timpul de evaporare pentru fiecare unitate de apă, cantitatea minimă de apă pe care dorim să o lăsăm în vas și rata de evaporare. Se validează datele de intrare cu ajutorul funcției validate_input, iar dacă acestea sunt valide, se calculează timpul necesar pentru evaporare cu ajutorul funcției calculate_remaining_water_time și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5351</id>
		<title>3166 - Vas 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5351"/>
		<updated>2023-04-29T09:27:52Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Restricţii şi precizări */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Într-un vas sunt &#039;&#039;&#039;apa_initiala&#039;&#039;&#039; litri de apă &#039;&#039;&#039;(apa_initiala&amp;gt;0)&#039;&#039;&#039;. După fiecare &#039;&#039;&#039;t&#039;&#039;&#039; minute, &#039;&#039;&#039;apa_initiala\rata_evaporare&#039;&#039;&#039; din cantitatea de apă rămasă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură patru numere naturale &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima,rata_evaporare&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul de minute necesare astfel încât in vas sa rămână cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apa.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
 &lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;rata_evaporare&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Apa initiala este:&lt;br /&gt;
: 100 &lt;br /&gt;
:Timpul de evaporare este:&lt;br /&gt;
:15&lt;br /&gt;
:Apa minima este: &lt;br /&gt;
:20&lt;br /&gt;
:Rata de evaporare este:&lt;br /&gt;
:5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Dupa 120 minute vor ramane in vas cel mult 20 litri de apa.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3166&lt;br /&gt;
def calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate):&lt;br /&gt;
    remaining_water = initial_water&lt;br /&gt;
    elapsed_time = 0&lt;br /&gt;
    while remaining_water &amp;gt; minimum_water:&lt;br /&gt;
        evaporated_water = remaining_water / evaporation_rate&lt;br /&gt;
        remaining_water -= evaporated_water&lt;br /&gt;
        elapsed_time += evaporation_time&lt;br /&gt;
    return elapsed_time&lt;br /&gt;
&lt;br /&gt;
def validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):&lt;br /&gt;
    if not (1 &amp;lt;= initial_water &amp;lt;= 1000000000 and 1 &amp;lt;= evaporation_time &amp;lt;= 1000000000 and 1 &amp;lt;= minimum_water &amp;lt;= 1000000000 and 2 &amp;lt;= evaporation_rate &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    initial_water, evaporation_time, minimum_water, evaporation_rate = map(int, input(&amp;quot;Introduceti X T Y I, separate prin spatiu: &amp;quot;).split())&lt;br /&gt;
    if not validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu sunt valide.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        elapsed_time = calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate)&lt;br /&gt;
        print(&amp;quot;Datele introduse sunt valide.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Dupa&amp;quot;, elapsed_time, &amp;quot;minute, vor ramane in vas cel mult&amp;quot;, minimum_water, &amp;quot;litri de apa.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este un program Python care calculează timpul rămas până când va rămâne o anumită cantitate minimă de apă într-un vas, ținând cont de timpul de evaporare și de rata de evaporare a apei din vas.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_remaining_water_time() primește patru argumente: initial_water (cantitatea inițială de apă din vas), evaporation_time (timpul necesar evaporării unei unități de apă), minimum_water (cantitatea minimă de apă care trebuie să rămână în vas) și evaporation_rate (rata de evaporare a apei din vas).&lt;br /&gt;
&lt;br /&gt;
Funcția utilizează o buclă while pentru a calcula timpul rămas până când cantitatea de apă din vas ajunge la valoarea minimă specificată. În fiecare iterație a buclei, se calculează cantitatea de apă care s-a evaporat într-un interval de timp și se actualizează cantitatea rămasă în vas. Variabila elapsed_time este folosită pentru a calcula timpul total de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția validate_input() este utilizată pentru a verifica dacă argumentele primite de calculate_remaining_water_time() sunt valide. Dacă nu sunt valide, funcția returnează False, altfel returnează True.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &#039;__main__&#039;: este folosit pentru a verifica dacă acest script este rulat direct sau importat ca modul într-un alt script Python. Dacă este rulat direct, utilizatorul va fi rugat să introducă valorile pentru initial_water, evaporation_time, minimum_water și evaporation_rate. Aceste valori sunt separate prin spațiu și sunt convertite la integer folosind funcția map(). Dacă valorile introduse sunt invalide, este afișat un mesaj corespunzător. Altfel, timpul rămas până când va rămâne cantitatea minimă de apă este calculat folosind funcția calculate_remaining_water_time(), iar rezultatul este afișat.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5350</id>
		<title>3166 - Vas 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3166_-_Vas_1&amp;diff=5350"/>
		<updated>2023-04-29T09:27:43Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Date de intrare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Într-un vas sunt &#039;&#039;&#039;apa_initiala&#039;&#039;&#039; litri de apă &#039;&#039;&#039;(apa_initiala&amp;gt;0)&#039;&#039;&#039;. După fiecare &#039;&#039;&#039;t&#039;&#039;&#039; minute, &#039;&#039;&#039;apa_initiala\rata_evaporare&#039;&#039;&#039; din cantitatea de apă rămasă se evaporă. Să se determine după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură patru numere naturale &#039;&#039;&#039;apa_initiala,timp_evaporare,apa_minima,rata_evaporare&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul de minute necesare astfel încât in vas sa rămână cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apa.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează după câte minute vor rămâne în vas cel mult &#039;&#039;&#039;apa_minima&#039;&#039;&#039; litri de apă.&lt;br /&gt;
 &lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;apa_initiala,timpul_evaporare,apa_minima&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
2 ≤ &#039;&#039;&#039;rata_evaporare&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Apa initiala este:&lt;br /&gt;
: 100 &lt;br /&gt;
:Timpul de evaporare este:&lt;br /&gt;
:15&lt;br /&gt;
:Apa minima este: &lt;br /&gt;
:20&lt;br /&gt;
:Rata de evaporare este:&lt;br /&gt;
:5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Dupa 120 minute vor ramane in vas cel mult 20 litri de apa.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3166&lt;br /&gt;
def calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate):&lt;br /&gt;
    remaining_water = initial_water&lt;br /&gt;
    elapsed_time = 0&lt;br /&gt;
    while remaining_water &amp;gt; minimum_water:&lt;br /&gt;
        evaporated_water = remaining_water / evaporation_rate&lt;br /&gt;
        remaining_water -= evaporated_water&lt;br /&gt;
        elapsed_time += evaporation_time&lt;br /&gt;
    return elapsed_time&lt;br /&gt;
&lt;br /&gt;
def validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):&lt;br /&gt;
    if not (1 &amp;lt;= initial_water &amp;lt;= 1000000000 and 1 &amp;lt;= evaporation_time &amp;lt;= 1000000000 and 1 &amp;lt;= minimum_water &amp;lt;= 1000000000 and 2 &amp;lt;= evaporation_rate &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    initial_water, evaporation_time, minimum_water, evaporation_rate = map(int, input(&amp;quot;Introduceti X T Y I, separate prin spatiu: &amp;quot;).split())&lt;br /&gt;
    if not validate_input(initial_water, evaporation_time, minimum_water, evaporation_rate):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu sunt valide.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        elapsed_time = calculate_remaining_water_time(initial_water, evaporation_time, minimum_water, evaporation_rate)&lt;br /&gt;
        print(&amp;quot;Datele introduse sunt valide.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Dupa&amp;quot;, elapsed_time, &amp;quot;minute, vor ramane in vas cel mult&amp;quot;, minimum_water, &amp;quot;litri de apa.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este un program Python care calculează timpul rămas până când va rămâne o anumită cantitate minimă de apă într-un vas, ținând cont de timpul de evaporare și de rata de evaporare a apei din vas.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_remaining_water_time() primește patru argumente: initial_water (cantitatea inițială de apă din vas), evaporation_time (timpul necesar evaporării unei unități de apă), minimum_water (cantitatea minimă de apă care trebuie să rămână în vas) și evaporation_rate (rata de evaporare a apei din vas).&lt;br /&gt;
&lt;br /&gt;
Funcția utilizează o buclă while pentru a calcula timpul rămas până când cantitatea de apă din vas ajunge la valoarea minimă specificată. În fiecare iterație a buclei, se calculează cantitatea de apă care s-a evaporat într-un interval de timp și se actualizează cantitatea rămasă în vas. Variabila elapsed_time este folosită pentru a calcula timpul total de evaporare.&lt;br /&gt;
&lt;br /&gt;
Funcția validate_input() este utilizată pentru a verifica dacă argumentele primite de calculate_remaining_water_time() sunt valide. Dacă nu sunt valide, funcția returnează False, altfel returnează True.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &#039;__main__&#039;: este folosit pentru a verifica dacă acest script este rulat direct sau importat ca modul într-un alt script Python. Dacă este rulat direct, utilizatorul va fi rugat să introducă valorile pentru initial_water, evaporation_time, minimum_water și evaporation_rate. Aceste valori sunt separate prin spațiu și sunt convertite la integer folosind funcția map(). Dacă valorile introduse sunt invalide, este afișat un mesaj corespunzător. Altfel, timpul rămas până când va rămâne cantitatea minimă de apă este calculat folosind funcția calculate_remaining_water_time(), iar rezultatul este afișat.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1565_-_N_Zero&amp;diff=5349</id>
		<title>1565 - N Zero</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1565_-_N_Zero&amp;diff=5349"/>
		<updated>2023-04-29T09:25:35Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un număr &#039;&#039;&#039;n&#039;&#039;&#039;. Afișați numărul &#039;&#039;&#039;n * 10a&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, apoi numărul &#039;&#039;&#039;a&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;p&#039;&#039;&#039;, acesta fiind &#039;&#039;&#039;n * 10a&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul n * 10a.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1000&lt;br /&gt;
&lt;br /&gt;
0 ≤ &#039;&#039;&#039;a&#039;&#039;&#039; ≤ 5&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti n:&lt;br /&gt;
: 5&lt;br /&gt;
:Introduceti a:&lt;br /&gt;
: 4&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 50000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1565&lt;br /&gt;
def validate_input(n, a):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 1000 and 0 &amp;lt;= a &amp;lt;= 5:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def calculate_p(n, a):&lt;br /&gt;
    return n * (10 ** a)&lt;br /&gt;
&lt;br /&gt;
def display_result(p):&lt;br /&gt;
    if p is not None:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(p)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti n: &amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;Introduceti a: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, a):&lt;br /&gt;
        p = calculate_p(n, a)&lt;br /&gt;
        display_result(p)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod implementează o funcție care primește un număr întreg `n` și un număr întreg `a` și calculează și afișează un număr întreg `p` dat de produsul dintre `n` și 10 ridicat la puterea `a`. &lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input(n, a)` verifică dacă `n` este între 1 și 1000 și dacă `a` este între 0 și 5 și returnează `True` dacă aceste condiții sunt îndeplinite, în caz contrar, returnează `False`.&lt;br /&gt;
&lt;br /&gt;
Funcția `calculate_p(n, a)` primește două argumente `n` și `a` și returnează produsul dintre `n` și 10 ridicat la puterea `a`.&lt;br /&gt;
&lt;br /&gt;
Funcția `display_result(p)` afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; urmat de valoarea `p` dacă `p` este diferit de `None`. Dacă `p` este `None`, funcția afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
În funcția principală (`main`), se citesc valorile `n` și `a` de la utilizator, se validează aceste date folosind funcția `validate_input` și, dacă datele sunt corecte, se calculează `p` folosind funcția `calculate_p` și se afișează rezultatul utilizând funcția `display_result`. Dacă datele nu sunt corecte, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Acest cod pare să fie simplu și nu implică nicio logică complexă sau operații costisitoare.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0350_-_Produs_Cartezian&amp;diff=5348</id>
		<title>0350 - Produs Cartezian</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0350_-_Produs_Cartezian&amp;diff=5348"/>
		<updated>2023-04-29T09:24:33Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau două numere naturale nenule &#039;&#039;&#039;n și m&#039;&#039;&#039;. Pentru mulțimile &#039;&#039;&#039;A={1,2,..,n} și B={1,2,...,m}&#039;&#039;&#039;, să se afișeze mulțimea &#039;&#039;&#039;A×B={(a,b) | a∈A, b∈B}&#039;&#039;&#039; – &#039;&#039;&#039;produsul cartezian&#039;&#039;&#039; al mulțimilor &#039;&#039;&#039;A și B&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n și m&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul afișează pe ecran mulțimea cerută astfel:&lt;br /&gt;
&lt;br /&gt;
elementele mulțimii vor fi scrise între acolade și separate prin virgule fiecare element este o pereche de numere, care va fi scrisă între paranteze rotunde, numerele din pereche fiind separate prin virgulă mai întâi se vor scrie perechile &#039;&#039;&#039;(a,b)&#039;&#039;&#039; pentru care &#039;&#039;&#039;a=1&#039;&#039;&#039;, cu b în ordine crescătoare, apoi perechile pentru care &#039;&#039;&#039;a=2&#039;&#039;&#039; cu &#039;&#039;&#039;b&#039;&#039;&#039; în ordine crescătoare, etc, ca în exemplu.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează mulțimea A×B={(a,b) | a∈A, b∈B} – produsul cartezian al mulțimilor A și B.  &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n,m&#039;&#039;&#039; ≤ 10&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti numarul n:&lt;br /&gt;
: 3&lt;br /&gt;
:Introduceti numarul m:&lt;br /&gt;
: 2&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: {(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0350&lt;br /&gt;
def build_cartesian_product(n, m):&lt;br /&gt;
    produs_cartezian = &amp;quot;{&amp;quot;&lt;br /&gt;
    for a in range(1, n+1):&lt;br /&gt;
        for b in range(1, m+1):&lt;br /&gt;
            produs_cartezian += f&amp;quot;({a},{b}),&amp;quot;&lt;br /&gt;
    produs_cartezian = produs_cartezian[:-1] + &amp;quot;}&amp;quot;&lt;br /&gt;
    return produs_cartezian&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, m):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10 and 1 &amp;lt;= m &amp;lt;= 10):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul n: &amp;quot;))&lt;br /&gt;
    m = int(input(&amp;quot;Introduceti numarul m: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, m):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        produs_cartezian = build_cartesian_product(n, m)&lt;br /&gt;
        print(produs_cartezian)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod definește o funcție care construiește produsul cartezian dintre două seturi de numere, și o funcție care validează datele de intrare. &lt;br /&gt;
&lt;br /&gt;
Funcția `build_cartesian_product(n, m)` primește două numere `n` și `m` și construiește produsul cartezian dintre seturile `{1,2,3,...,n}` și `{1,2,3,...,m}`. Produsul cartezian este o mulțime de perechi ordonate formate din elemente din fiecare set. În acest caz, perechile sunt construite astfel: `({1,2,...,n},{1,2,...,m})`. Produsul cartezian este returnat sub forma unui șir de caractere care conține toate perechile ordonate separate prin virgulă și încadrate între acolade: `{(1,1),(1,2),...,(n,m)}`.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input(n, m)` primește două numere întregi și validează dacă acestea respectă restricțiile impuse. În cazul de față, acestea trebuie să fie între 1 și 10 inclusiv. Funcția returnează `False` dacă datele de intrare nu sunt valide și `True` în caz contrar.&lt;br /&gt;
&lt;br /&gt;
În secțiunea `if __name__ == &#039;__main__&#039;:`, utilizatorul este întrebat să introducă două numere întregi `n` și `m`. Dacă acestea nu respectă restricțiile, se va afișa un mesaj corespunzător și programul se va încheia. În caz contrar, se va afișa un mesaj de confirmare și se va apela funcția `build_cartesian_product(n, m)` pentru a construi produsul cartezian, care va fi apoi afișat pe ecran.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0339_-_Numere&amp;diff=5347</id>
		<title>0339 - Numere</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0339_-_Numere&amp;diff=5347"/>
		<updated>2023-04-29T09:23:06Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Determinaţi primul număr par dintre cele &#039;&#039;&#039;n&#039;&#039;&#039; numere.&lt;br /&gt;
&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; numere naturale, separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;P&#039;&#039;&#039;, reprezentând primul număr par dintre cele &#039;&#039;&#039;n&#039;&#039;&#039; numere.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează primul număr par dintre cele n numere.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
cele n numere citite vor avea cel mult 9 cifre&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: N este:&lt;br /&gt;
: 5&lt;br /&gt;
:Numerele n sunt:&lt;br /&gt;
: 7 4 2 5 8&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0339&lt;br /&gt;
def validate_input(n, numere):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    for nr in numere:&lt;br /&gt;
        if len(nr) &amp;gt; 9:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gaseste_primul_numar_par(numere):&lt;br /&gt;
    for nr in numere:&lt;br /&gt;
        if int(nr) % 2 == 0:&lt;br /&gt;
            return nr&lt;br /&gt;
    return &amp;quot;IMPOSIBIL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;N este:&amp;quot;))&lt;br /&gt;
    numere = input(&amp;quot;Numerele n sunt:&amp;quot;).split()&lt;br /&gt;
    if not validate_input(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(gaseste_primul_numar_par(numere))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod primește un număr `n` și o listă de `n` numere și verifică dacă datele de intrare sunt valide, adică `n` trebuie să fie între 1 și 100 și fiecare număr din lista `numere` trebuie să aibă cel mult 9 cifre.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input(n, numere)` primește doi parametri, `n` și `numere`, și începe prin a verifica dacă `n` se află în intervalul permis, adică între 1 și 100, utilizând expresia booleană `1 &amp;lt;= n &amp;lt;= 100`. Dacă această condiție nu este îndeplinită, funcția returnează `False`, indicând faptul că datele de intrare nu sunt valide.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, pentru fiecare număr din lista `numere`, funcția verifică dacă numărul are cel mult 9 cifre, utilizând expresia booleană `len(nr) &amp;gt; 9`. Dacă un număr depășește această limită, funcția returnează `False`, indicând din nou faptul că datele de intrare nu sunt valide.&lt;br /&gt;
&lt;br /&gt;
În cele din urmă, dacă toate verificările sunt trecute cu succes, funcția returnează `True`, indicând că datele de intrare sunt valide.&lt;br /&gt;
&lt;br /&gt;
Funcția `gaseste_primul_numar_par(numere)` primește lista `numere` și caută primul număr par din listă. Pentru fiecare număr din listă, funcția verifică dacă numărul este par sau nu, utilizând expresia booleană `int(nr) % 2 == 0`. Dacă numărul este par, funcția returnează numărul respectiv. Dacă nu există niciun număr par în listă, funcția returnează string-ul &amp;quot;IMPOSIBIL&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
În funcția `main()`, întâi se solicită utilizatorului să introducă `n` și `numere`. Dacă datele de intrare nu sunt valide, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; În caz contrar, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot;, iar funcția `gaseste_primul_numar_par(numere)` este apelată cu argumentul `numere`. Rezultatul este afișat apoi în consolă.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5346</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5346"/>
		<updated>2023-04-29T09:20:43Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;nr_cartonas_stanga și nr_cartonas_dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 1&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 2&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 3&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def validate_input(n, cards):&lt;br /&gt;
    if n != len(cards):&lt;br /&gt;
        return False&lt;br /&gt;
    for card in cards:&lt;br /&gt;
        if len(card) != 2:&lt;br /&gt;
            return False&lt;br /&gt;
        if not all(1 &amp;lt;= x &amp;lt;= 10000 for x in card):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_matching_pairs(cards):&lt;br /&gt;
    matching_pairs = 0&lt;br /&gt;
    max_sequence = 1&lt;br /&gt;
    current_sequence = 1&lt;br /&gt;
    for i in range(len(cards) - 1):&lt;br /&gt;
        if cards[i][1] == cards[i + 1][0]:&lt;br /&gt;
            matching_pairs += 1&lt;br /&gt;
            current_sequence += 1&lt;br /&gt;
            max_sequence = max(max_sequence, current_sequence)&lt;br /&gt;
        else:&lt;br /&gt;
            current_sequence = 1&lt;br /&gt;
    return (matching_pairs, max_sequence)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_max_sequences(cards):&lt;br /&gt;
    max_sequence_length = 1&lt;br /&gt;
    sequence_lengths = {}&lt;br /&gt;
    current_sequence_length = 1&lt;br /&gt;
    for i in range(len(cards) - 1):&lt;br /&gt;
        if cards[i][1] == cards[i + 1][0]:&lt;br /&gt;
            current_sequence_length += 1&lt;br /&gt;
        else:&lt;br /&gt;
            if current_sequence_length in sequence_lengths:&lt;br /&gt;
                sequence_lengths[current_sequence_length] += 1&lt;br /&gt;
            else:&lt;br /&gt;
                sequence_lengths[current_sequence_length] = 1&lt;br /&gt;
            max_sequence_length = max(max_sequence_length, current_sequence_length)&lt;br /&gt;
            current_sequence_length = 1&lt;br /&gt;
    if current_sequence_length in sequence_lengths:&lt;br /&gt;
        sequence_lengths[current_sequence_length] += 1&lt;br /&gt;
    else:&lt;br /&gt;
        sequence_lengths[current_sequence_length] = 1&lt;br /&gt;
    max_sequence_count = sequence_lengths[max_sequence_length]&lt;br /&gt;
    return max_sequence_count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    c = int(input(&amp;quot;Introduceti cerinta (1, 2 sau 3): &amp;quot;))&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de cartonase: &amp;quot;))&lt;br /&gt;
    cards = [list(map(int, input(&amp;quot;Introduceti cartonasul stanga si cartonasul dreapta:&amp;quot;).split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, cards):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        if c == 1:&lt;br /&gt;
            matching_pairs, max_sequence = find_matching_pairs(cards)&lt;br /&gt;
            print(matching_pairs + 1)&lt;br /&gt;
        elif c == 2:&lt;br /&gt;
            matching_pairs, max_sequence = find_matching_pairs(cards)&lt;br /&gt;
            print(max_sequence)&lt;br /&gt;
        elif c == 3:&lt;br /&gt;
            max_sequence_count = find_max_sequences(cards)&lt;br /&gt;
            print(max_sequence_count)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod reprezintă o soluție pentru o problemă care are trei cerințe diferite. &lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input` verifică dacă datele introduse corespund unor anumite restricții. Mai precis, verifică dacă numărul de cartonașe introduse corespunde valorii `n` și dacă fiecare cartonaș este format din două numere întregi cuprinse între 1 și 10000.&lt;br /&gt;
&lt;br /&gt;
Funcția `find_matching_pairs` primește o listă de cartonașe și calculează numărul de perechi de cartonașe care se potrivesc și lungimea cea mai mare a unei secvențe de cartonașe consecutive care se potrivesc.&lt;br /&gt;
&lt;br /&gt;
Funcția `find_max_sequences` primește o listă de cartonașe și calculează numărul de secvențe maximale de cartonașe consecutive care se potrivesc.&lt;br /&gt;
&lt;br /&gt;
În `main`, utilizatorul trebuie să introducă numărul cerinței (`c`) și numărul de cartonașe (`n`) și apoi cartonașele propriu-zise. Dacă datele introduse sunt valide, se apelează funcția corespunzătoare cerinței și se afișează rezultatul. Pentru cerința 1, se afișează numărul de perechi de cartonașe care se potrivesc plus 1. Pentru cerința 2, se afișează lungimea cea mai mare a unei secvențe de cartonașe consecutive care se potrivesc. Pentru cerința 3, se afișează numărul de secvențe maximale de cartonașe consecutive care se potrivesc.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5345</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5345"/>
		<updated>2023-04-29T09:19:51Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;nr_cartonas_stanga și nr_cartonas_dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 1&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 2&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 3&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5344</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5344"/>
		<updated>2023-04-29T09:19:08Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;nr_cartonas_stanga și nr_cartonas_dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 1&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 2&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 3&lt;br /&gt;
: N este:&lt;br /&gt;
: 6&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 8&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 6 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5343</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5343"/>
		<updated>2023-04-29T09:15:41Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;nr_cartonas_stanga și nr_cartonas_dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
:Introduceti cerinta (1, 2 sau 3): 1&lt;br /&gt;
:Introduceti numarul de cartonase: 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 5&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:10 2&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:2 10&lt;br /&gt;
:Introduceti cartonasul stanga si cartonasul dreapta:37 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 2&lt;br /&gt;
:N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 5 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 3&lt;br /&gt;
: N este:&lt;br /&gt;
: 6&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 8&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 6 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5342</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5342"/>
		<updated>2023-04-29T09:08:23Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Restricţii şi precizări */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;nr_cartonas_stanga și nr_cartonas_dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 1&lt;br /&gt;
: N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 2&lt;br /&gt;
:N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 5 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 3&lt;br /&gt;
: N este:&lt;br /&gt;
: 6&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 8&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 6 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5341</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5341"/>
		<updated>2023-04-29T09:07:57Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Date de intrare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;nr_cartonas_stanga și nr_cartonas_dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 1&lt;br /&gt;
: N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 2&lt;br /&gt;
:N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 5 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 3&lt;br /&gt;
: N este:&lt;br /&gt;
: 6&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 8&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 6 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5340</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5340"/>
		<updated>2023-04-29T09:07:22Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Cerinţa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;nr_cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;nr_cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;stanga și dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 1&lt;br /&gt;
: N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 2&lt;br /&gt;
:N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 5 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 3&lt;br /&gt;
: N este:&lt;br /&gt;
: 6&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 8&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 6 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5339</id>
		<title>3431 - Cartonase 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3431_-_Cartonase_3&amp;diff=5339"/>
		<updated>2023-04-29T09:06:53Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Cerinţa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ionel are &#039;&#039;&#039;N&#039;&#039;&#039; cartonașe. Fiecare cartonaș are înscrise două numere (un număr, &#039;&#039;&#039;cartonas_stanga&#039;&#039;&#039;, în partea stângă, și celălalt număr, &#039;&#039;&#039;cartonas_dreapta&#039;&#039;&#039;, în partea dreaptă). El a așezat cartonașele într-un șir, lipite unul de celălalt, astfel încât numărul din partea dreaptă a primului cartonaș este lipit de numărul din partea stângă a celui de-al doilea cartonaș, numărul din partea dreaptă a celui de al doilea cartonaș este lipit de numărul din partea stângă a celui de-al treilea cartonaș etc. Spunem că două cartonașe alăturate “se potrivesc” dacă numărul din dreapta al primului cartonaș este egal cu numărul din stânga al celui de al doilea cartonaș.&lt;br /&gt;
&lt;br /&gt;
Ionel observă că sunt perechi de cartonașe alăturate care “se potrivesc” și chiar secvențe de mai multe cartonașe alăturate, în care primul “se potrivește” cu al doilea, al doilea “se potrivește” cu al treilea etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care să citească numărul &#039;&#039;&#039;N&#039;&#039;&#039; de cartonașe, numerele înscrise pe fiecare cartonaș și determină:&lt;br /&gt;
&lt;br /&gt;
1) Numărul de perechi de cartonașe care “se potrivesc”.&lt;br /&gt;
2) Numărul de cartonașe din cea mai lungă secvență în care fiecare două cartonașe alăturate “se potrivesc”.&lt;br /&gt;
3) Numărul de secvențe cu număr maxim de cartonașe care “se potrivesc”.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține doar numere naturale nenule:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se găsește numărul &#039;&#039;&#039;C&#039;&#039;&#039; care poate avea doar valorile &#039;&#039;&#039;1, 2 sau 3&#039;&#039;&#039; și reprezintă cerința&lt;br /&gt;
care urmează a fi rezolvată. Pe a doua linie a programului se găsește numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
pe fiecare dintre următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află, în acestă ordine, câte două numere naturale &#039;&#039;&#039;stanga și dreapta&#039;&#039;&#039;, separate printr-un spațiu, cu semnificația din enunț pentru un cartonaș. Perechile de numere sunt date în ordinea în care cartonașele corespunzătoare lor apar în șirul lui Ionel.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie un număr natural reprezentând răspunsul la cerința specificată.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 500; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;stanga&#039;&#039;&#039; ≤ 10.000; &lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;dreapta&#039;&#039;&#039; ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
În concurs, pentru rezolvarea fiecărei cerințe se obțin câte 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 1&lt;br /&gt;
: N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 2&lt;br /&gt;
:N este:&lt;br /&gt;
: 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 5 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: C este:&lt;br /&gt;
: 3&lt;br /&gt;
: N este:&lt;br /&gt;
: 6&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 10 5&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 8&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 6 2&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 2 10&lt;br /&gt;
:STANGA,DREAPTA  sunt:&lt;br /&gt;
: 37 5&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3431&lt;br /&gt;
def num_pairs(cards):&lt;br /&gt;
    num_pairs = 0&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            num_pairs += 1&lt;br /&gt;
    return num_pairs&lt;br /&gt;
&lt;br /&gt;
def longest_sequence(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
        else:&lt;br /&gt;
            curr_len = 1&lt;br /&gt;
    return max_len&lt;br /&gt;
&lt;br /&gt;
def num_max_sequences(cards):&lt;br /&gt;
    max_len = 1&lt;br /&gt;
    curr_len = 1&lt;br /&gt;
    num_max_len = 1&lt;br /&gt;
    for i in range(len(cards)-1):&lt;br /&gt;
        if cards[i][1] == cards[i+1][0]:&lt;br /&gt;
            curr_len += 1&lt;br /&gt;
            if curr_len &amp;gt; max_len:&lt;br /&gt;
                max_len = curr_len&lt;br /&gt;
                num_max_len = 1&lt;br /&gt;
            elif curr_len == max_len:&lt;br /&gt;
                num_max_len += 1&lt;br /&gt;
    return num_max_len&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    C = int(input())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    cards = []&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        stanga, dreapta = map(int, input().split())&lt;br /&gt;
        if not (1 &amp;lt;= s &amp;lt;= 10000 and 1 &amp;lt;= d &amp;lt;= 10000):&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        cards.append((stanga, dreapta))&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_pairs(cards))&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(longest_sequence(cards))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(num_max_sequences(cards))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod este o soluție la o problemă matematică care presupune determinarea unor perechi de cărți într-un șir de cărți, în funcție de o regulă. Scopul este să se scrie un program care primește ca input o valoare C (1, 2 sau 3), un număr N (numărul de cărți din șir), și N perechi de numere s și d, reprezentând cărțile. Dacă C este 1, programul trebuie să afișeze numărul de perechi de cărți în care valoarea de pe cartea dreaptă a primei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 2, programul trebuie să afișeze lungimea celei mai lungi secvențe de cărți în care valoarea de pe cartea dreaptă a unei cărți este egală cu valoarea de pe cartea stângă a celei de-a doua cărți. Dacă C este 3, programul trebuie să afișeze numărul de secvențe de cărți de lungime maximă care respectă regula dată.&lt;br /&gt;
&lt;br /&gt;
Funcțiile num_pairs, longest_sequence și num_max_sequences implementează cele trei cerințe ale problemei. Ele iau ca argument șirul de cărți și returnează valoarea corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
În blocul if name == &#039;main&#039;: se face validarea datelor de intrare. Se primește valoarea C și N, iar apoi se creează o listă de perechi de cărți folosind funcția map(). Dacă N nu este între 1 și 500, se afișează un mesaj de eroare și programul se termină. În plus, dacă oricare dintre valorile s sau d este mai mică decât 1 sau mai mare decât 10000, programul va afișa un alt mesaj de eroare și se va termina. În cele din urmă, se apelează funcțiile corespunzătoare în funcție de valoarea C și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2950_-_Adun&amp;diff=5338</id>
		<title>2950 - Adun</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2950_-_Adun&amp;diff=5338"/>
		<updated>2023-04-29T09:03:32Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
&lt;br /&gt;
Ionel a primit la ora de matematica o problema interesantă. El are doua numere naturale &#039;&#039;&#039;X&#039;&#039;&#039; și &#039;&#039;&#039;Y&#039;&#039;&#039; și trebuie să determine un număr natural &#039;&#039;&#039;K&#039;&#039;&#039; astfel încât cel mai mic multiplu comun al numerelor &#039;&#039;&#039;X + K&#039;&#039;&#039; și &#039;&#039;&#039;Y + K&#039;&#039;&#039; să fie minim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Determinați valoarea lui &#039;&#039;&#039;K&#039;&#039;&#039; astfel încât cel mai mic multiplu comun al numerelor &#039;&#039;&#039;X + K&#039;&#039;&#039; și &#039;&#039;&#039;Y + K&#039;&#039;&#039; să fie minim.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele naturale &#039;&#039;&#039;X și Y&#039;&#039;&#039; separate cu un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran valoarea &#039;&#039;&#039;K&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează valoarea lui K astfel încât cel mai mic multiplu comun al numerelor X + K și Y + K să fie minim. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&#039;&#039;&#039;X și Y&#039;&#039;&#039; sunt numere naturale mai mici decât 1.000.000.001.&lt;br /&gt;
&lt;br /&gt;
Dacă sunt mai multe valori K pentru care cel mai mic multiplu comun al numerelor &#039;&#039;&#039;X + K și Y + K&#039;&#039;&#039; este minim, se va afișa valoarea &#039;&#039;&#039;K minimă&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti cele doua numere:&lt;br /&gt;
: 6 14&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2950&lt;br /&gt;
def validate_input(x, y):&lt;br /&gt;
    if x &amp;lt; 1 or x &amp;gt;= 1000000001:&lt;br /&gt;
        return False&lt;br /&gt;
    if y &amp;lt; 1 or y &amp;gt;= 1000000001:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gcd(a, b):&lt;br /&gt;
    while b:&lt;br /&gt;
        a, b = b, a % b&lt;br /&gt;
    return a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(x, y):&lt;br /&gt;
    gcd_xy = gcd(x, y)&lt;br /&gt;
    lcm_xy = x * y // gcd_xy&lt;br /&gt;
&lt;br /&gt;
    # iteram prin toate numerele intre 1 si gcd(X, Y)&lt;br /&gt;
    min_lcm = lcm_xy&lt;br /&gt;
    min_k = 0&lt;br /&gt;
&lt;br /&gt;
    for k in range(1, gcd_xy + 1):&lt;br /&gt;
        lcm_k = (x + k) * (y + k) // gcd(x + k, y + k)&lt;br /&gt;
        if lcm_k &amp;lt; min_lcm:&lt;br /&gt;
            min_lcm = lcm_k&lt;br /&gt;
            min_k = k&lt;br /&gt;
&lt;br /&gt;
    # afisam valoarea lui K&lt;br /&gt;
    print(min_k)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    x, y = map(int, input(&amp;quot;Introduceti cele doua numere:&amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(x, y):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        solve(x, y)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Această implementare calculează cel mai mic multiplu comun al două numere naturale x și y, în care sunt adăugate valori constante diferite k la fiecare număr și se determină valoarea minimă a lui k astfel încât LCM(x+k, y+k) să fie minim.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input(x, y)` verifică dacă cele două numere introduse sunt numere naturale și se încadrează în intervalul [1, 1000000000]. Dacă una dintre condiții nu este îndeplinită, funcția returnează `False`.&lt;br /&gt;
&lt;br /&gt;
Funcția `gcd(a, b)` calculează cel mai mare divizor comun al două numere a și b folosind algoritmul lui Euclid.&lt;br /&gt;
&lt;br /&gt;
Funcția `solve(x, y)` calculează cel mai mic multiplu comun al lui x și y folosind gcd și apoi calculează pentru fiecare valoare k între 1 și gcd(x, y) valoarea LCM(x+k, y+k) și determină valoarea minimă a lui k astfel încât LCM(x+k, y+k) să fie minim. Valoarea minimă a lui k și LCM(x+k, y+k) sunt stocate în variabilele `min_k` și `min_lcm`. La sfârșit, funcția afișează valoarea lui `min_k`.&lt;br /&gt;
&lt;br /&gt;
În `main()`, se citește cele două numere de la tastatură folosind `map()` și apoi se verifică dacă datele de intrare sunt corecte folosind funcția `validate_input(x, y)`. Dacă datele de intrare sunt incorecte, se afișează un mesaj corespunzător. În caz contrar, se afișează un mesaj de confirmare și se apelează funcția `solve(x, y)`.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2308_-_Fractzii&amp;diff=5337</id>
		<title>2308 - Fractzii</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2308_-_Fractzii&amp;diff=5337"/>
		<updated>2023-04-29T08:59:04Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
O proprietate interesanta a fracțiilor ireductibile este ca orice fracție se poate obține după următoarele reguli:&lt;br /&gt;
- pe primul nivel se afla fracția 1/1;&lt;br /&gt;
- pe al doilea nivel, în stânga fracției 1/1 de pe primul nivel, plasam fracția 1/2 iar în dreapta ei fracția 2/1;&lt;br /&gt;
&lt;br /&gt;
nivelul 1:            1/1&lt;br /&gt;
nivelul 2:      1/2        2/1&lt;br /&gt;
&lt;br /&gt;
- pe fiecare nivel k se plasează sub fiecare fracție i / j de pe nivelul de deasupra, fracția i / (i + j) în stânga, iar fracția (i + j) / j în dreapta.&lt;br /&gt;
&lt;br /&gt;
nivelul 1:              1/1&lt;br /&gt;
nivelul 2:      1/2               2/1&lt;br /&gt;
nivelul 3:  1/3     3/2       2/3     3/1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dându-se o fracție oarecare prin numărătorul și numitorul său, determinați numărul nivelului pe care se află fracția sau o fracție echivalentă (având aceeași valoare) cu aceasta.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie două numere naturale nenule &#039;&#039;&#039;N M&#039;&#039;&#039;, separate printr-un spațiu, reprezentând &#039;&#039;&#039;numărătorul și respectiv numitorul&#039;&#039;&#039; unei fracții.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conţine o ingură linie, pe care va fi scris număr natural nenul, reprezentând numărul nivelului care corespunde fracţiei.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul nivelului pe care se află fracția sau o fracție echivalentă (având aceeași valoare) cu aceasta. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N, M&#039;&#039;&#039; ≤ 2 000 000 000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti doua numere naturale:&lt;br /&gt;
: 13 8&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 6&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2308&lt;br /&gt;
def nivel_fracție(n, m):&lt;br /&gt;
    nivel = 1&lt;br /&gt;
    fracții = [[1, 1]]&lt;br /&gt;
&lt;br /&gt;
    while True:&lt;br /&gt;
        fracții_nivel = []&lt;br /&gt;
        for fracție in fracții:&lt;br /&gt;
            fracții_nivel.append([fracție[0], fracție[0] + fracție[1]])&lt;br /&gt;
            fracții_nivel.append([fracție[0] + fracție[1], fracție[1]])&lt;br /&gt;
&lt;br /&gt;
        if [n, m] in fracții_nivel:&lt;br /&gt;
            return nivel + 1&lt;br /&gt;
        elif nivel == 100:  # pentru a evita o buclă infinită&lt;br /&gt;
            return -1&lt;br /&gt;
&lt;br /&gt;
        fracții = fracții_nivel&lt;br /&gt;
        nivel += 1&lt;br /&gt;
def validare_input(n, m):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă datele de intrare sunt valide.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 2000000000 or m &amp;lt; 1 or m &amp;gt; 2000000000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n, m = map(int, input(&amp;quot;Introduceti doua numere naturale: &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    if n &amp;gt;= 1 and n &amp;lt;= 2000000000 and m &amp;gt;= 1 and m &amp;lt;= 2000000000:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(nivel_fracție(n, m))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Codul dat începe cu o funcție nivel_fracție care primește două numere întregi pozitive n și m. Scopul funcției este de a determina nivelul la care fracția n/m apare în șirul de fracții în ordine crescătoare generat astfel:&lt;br /&gt;
&lt;br /&gt;
nivelul 1: 1/1&lt;br /&gt;
&lt;br /&gt;
nivelul 2: 1/2, 2/1&lt;br /&gt;
&lt;br /&gt;
nivelul 3: 1/3, 2/3, 3/2, 3/1&lt;br /&gt;
&lt;br /&gt;
nivelul 4: 1/4, 2/4, 3/4, 4/3, 4/2, 4/1&lt;br /&gt;
și așa mai departe.&lt;br /&gt;
&lt;br /&gt;
Pentru a face acest lucru, se pornește de la fracția 1/1 și se generează toate fracțiile posibile la nivelul curent, folosindu-se de fracțiile de la nivelul anterior. De exemplu, pentru a genera fracțiile nivelului 2, se iau fracțiile de la nivelul 1 și se adaugă la ele fracțiile de forma k/1 și 1/k, unde k este un număr întreg pozitiv mai mare decât 1. În cazul de față, se folosește o listă fracții pentru a ține evidența fracțiilor de la nivelul anterior, iar la fiecare iterație se creează o listă nouă fracții_nivel care conține toate fracțiile la nivelul curent, generându-se astfel toate fracțiile pentru nivelurile următoare.&lt;br /&gt;
&lt;br /&gt;
Funcția se oprește când fracția n/m apare la un anumit nivel nivel și returnează nivel + 1, adică nivelul la care apare această fracție. Dacă fracția nu apare în primele 100 de niveluri, se consideră că nu apare deloc și se returnează -1.&lt;br /&gt;
&lt;br /&gt;
Funcția validare_input este o funcție auxiliară care verifică dacă datele de intrare sunt valide, adică dacă n și m sunt numere întregi pozitive între 1 și 2 miliarde.&lt;br /&gt;
&lt;br /&gt;
În blocul principal, se citește de la tastatură două numere întregi pozitive n și m. Se verifică dacă datele de intrare sunt valide, apelându-se funcția validare_input, și se afișează un mesaj corespunzător. Dacă datele de intrare sunt valide, se apelează funcția nivel_fracție și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2308_-_Fractzii&amp;diff=5336</id>
		<title>2308 - Fractzii</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2308_-_Fractzii&amp;diff=5336"/>
		<updated>2023-04-29T08:58:38Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
O proprietate interesanta a fracțiilor ireductibile este ca orice fracție se poate obține după următoarele reguli:&lt;br /&gt;
- pe primul nivel se afla fracția 1/1;&lt;br /&gt;
- pe al doilea nivel, în stânga fracției 1/1 de pe primul nivel, plasam fracția 1/2 iar în dreapta ei fracția 2/1;&lt;br /&gt;
&lt;br /&gt;
nivelul 1:            1/1&lt;br /&gt;
nivelul 2:      1/2        2/1&lt;br /&gt;
&lt;br /&gt;
- pe fiecare nivel k se plasează sub fiecare fracție i / j de pe nivelul de deasupra, fracția i / (i + j) în stânga, iar fracția (i + j) / j în dreapta.&lt;br /&gt;
&lt;br /&gt;
nivelul 1:              1/1&lt;br /&gt;
nivelul 2:      1/2               2/1&lt;br /&gt;
nivelul 3:  1/3     3/2       2/3     3/1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dându-se o fracție oarecare prin numărătorul și numitorul său, determinați numărul nivelului pe care se află fracția sau o fracție echivalentă (având aceeași valoare) cu aceasta.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie două numere naturale nenule &#039;&#039;&#039;N M&#039;&#039;&#039;, separate printr-un spațiu, reprezentând &#039;&#039;&#039;numărătorul și respectiv numitorul&#039;&#039;&#039; unei fracții.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conţine o ingură linie, pe care va fi scris număr natural nenul, reprezentând numărul nivelului care corespunde fracţiei.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul nivelului pe care se află fracția sau o fracție echivalentă (având aceeași valoare) cu aceasta. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N, M&#039;&#039;&#039; ≤ 2 000 000 000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: Introduceti doua numere naturale:&lt;br /&gt;
: 13 8&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 6&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2308&lt;br /&gt;
def nivel_fracție(n, m):&lt;br /&gt;
    nivel = 1&lt;br /&gt;
    fracții = [[1, 1]]&lt;br /&gt;
&lt;br /&gt;
    while True:&lt;br /&gt;
        fracții_nivel = []&lt;br /&gt;
        for fracție in fracții:&lt;br /&gt;
            fracții_nivel.append([fracție[0], fracție[0] + fracție[1]])&lt;br /&gt;
            fracții_nivel.append([fracție[0] + fracție[1], fracție[1]])&lt;br /&gt;
&lt;br /&gt;
        if [n, m] in fracții_nivel:&lt;br /&gt;
            return nivel + 1&lt;br /&gt;
        elif nivel == 100:  # pentru a evita o buclă infinită&lt;br /&gt;
            return -1&lt;br /&gt;
&lt;br /&gt;
        fracții = fracții_nivel&lt;br /&gt;
        nivel += 1&lt;br /&gt;
def validare_input(n, m):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă datele de intrare sunt valide.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 2000000000 or m &amp;lt; 1 or m &amp;gt; 2000000000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n, m = map(int, input(&amp;quot;Introduceti doua numere naturale: &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    if n &amp;gt;= 1 and n &amp;lt;= 2000000000 and m &amp;gt;= 1 and m &amp;lt;= 2000000000:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(nivel_fracție(n, m))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Codul dat începe cu o funcție nivel_fracție care primește două numere întregi pozitive n și m. Scopul funcției este de a determina nivelul la care fracția n/m apare în șirul de fracții în ordine crescătoare generat astfel:&lt;br /&gt;
&lt;br /&gt;
nivelul 1: 1/1&lt;br /&gt;
nivelul 2: 1/2, 2/1&lt;br /&gt;
nivelul 3: 1/3, 2/3, 3/2, 3/1&lt;br /&gt;
nivelul 4: 1/4, 2/4, 3/4, 4/3, 4/2, 4/1&lt;br /&gt;
și așa mai departe.&lt;br /&gt;
Pentru a face acest lucru, se pornește de la fracția 1/1 și se generează toate fracțiile posibile la nivelul curent, folosindu-se de fracțiile de la nivelul anterior. De exemplu, pentru a genera fracțiile nivelului 2, se iau fracțiile de la nivelul 1 și se adaugă la ele fracțiile de forma k/1 și 1/k, unde k este un număr întreg pozitiv mai mare decât 1. În cazul de față, se folosește o listă fracții pentru a ține evidența fracțiilor de la nivelul anterior, iar la fiecare iterație se creează o listă nouă fracții_nivel care conține toate fracțiile la nivelul curent, generându-se astfel toate fracțiile pentru nivelurile următoare.&lt;br /&gt;
&lt;br /&gt;
Funcția se oprește când fracția n/m apare la un anumit nivel nivel și returnează nivel + 1, adică nivelul la care apare această fracție. Dacă fracția nu apare în primele 100 de niveluri, se consideră că nu apare deloc și se returnează -1.&lt;br /&gt;
&lt;br /&gt;
Funcția validare_input este o funcție auxiliară care verifică dacă datele de intrare sunt valide, adică dacă n și m sunt numere întregi pozitive între 1 și 2 miliarde.&lt;br /&gt;
&lt;br /&gt;
În blocul principal, se citește de la tastatură două numere întregi pozitive n și m. Se verifică dacă datele de intrare sunt valide, apelându-se funcția validare_input, și se afișează un mesaj corespunzător. Dacă datele de intrare sunt valide, se apelează funcția nivel_fracție și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1529_-_Pesti&amp;diff=5335</id>
		<title>1529 - Pesti</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1529_-_Pesti&amp;diff=5335"/>
		<updated>2023-04-29T08:54:59Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Andrei îşi doreşte un acvariu cu peşti. Găseşte în oraş un singur magazin ZOO unde se vând doar peştişori ciudaţi. Fiecare peştişor se îngraşă în fiecare zi cu câte un număr de grame. Cu fiecare săptămâna ce trece, peştişorii vor lua în greutate acelaşi număr de grame ca şi săptămâna precedentă, la care se adaugă greutatea pe care o luau în prima săptămână. Nu toţi peştişorii sunt de acelaşi tip, deci nu au neapărat aceeaşi greutate şi nici nu se îngraşă neapărat cu acelaşi număr de grame.&lt;br /&gt;
&lt;br /&gt;
Andrei se hotărăşte totuşi să cumpere n peştişori, pe care-i numeşte A,B,C,D,… în ordinea în care îi pune în acvariu. Vrând să ştie în permanenţă ce greutate are fiecare, îşi notează câţi peşti a pus în acvariu, litera atribuită fiecărui peşte, câte grame are fiecare peşte când a fost pus în acvariu şi cu câte grame se îngraşă în ziua în care este pus în acvariu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care afişează, în ordine alfabetică, toţi peştii care au cel puțin greutatea &#039;&#039;&#039;greutate_peste&#039;&#039;&#039;, dată în grame, după ce au trecut &#039;&#039;&#039;nr_zile&#039;&#039;&#039; zile. Pentru fiecare peşte se va afişa greutatea în grame şi litera ce i-a fost atribuită.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conţine pe prima linie, separate prin spațiu, valorile &#039;&#039;&#039;n, greutate_peste şi nr_zile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Urmează &#039;&#039;&#039;n&#039;&#039;&#039; linii, pe fiecare linie fiind scrise separate prin spaţiu: o literă mare, greutatea peştelui în grame şi numărul de grame cu care se îngraşă în ziua în care este pus în acvariu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran,  mesajul &amp;quot;Datele introduse corespund cerințelor&amp;quot; și pe o linie nouă numărul &#039;&#039;&#039;P&#039;&#039;&#039; , reprezentând produsul primelor &#039;&#039;&#039;n&#039;&#039;&#039; pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul &amp;quot;Datele introduse nu corespund cerintelor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează, în ordine alfabetică, toţi peştii care au cel puțin greutatea G, dată în grame, după ce au trecut z zile. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&#039;&#039;&#039;0&amp;lt;n&amp;lt;27&#039;&#039;&#039;; &#039;&#039;&#039;G – număr natural;&#039;&#039;&#039; &#039;&#039;&#039;0&amp;lt;z&amp;lt;365&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pentru fiecare peşte: greutatea iniţială în grame şi numărul de grame cu care se îngraşă &#039;&#039;&#039;nu depăşesc valoarea 10.&#039;&#039;&#039;&lt;br /&gt;
Andrei codifică peştii în ordine, cu litere mari consecutive.&lt;br /&gt;
&lt;br /&gt;
La scrierea programul Andrei respectă ordinea alfabetică.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: 2 500 25&lt;br /&gt;
: A 5 2&lt;br /&gt;
: B 4 3 &lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1529&lt;br /&gt;
def validare_input(n, greutate_peste, nr_zile, fish_list):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă datele de intrare sunt valide.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not (0 &amp;lt; n &amp;lt; 27 and 0 &amp;lt; greutate_peste &amp;lt; 100000 and 0 &amp;lt; nr_zile &amp;lt; 365):&lt;br /&gt;
        return False&lt;br /&gt;
    for fish in fish_list:&lt;br /&gt;
        if fish[1] &amp;gt; 10 or fish[2] &amp;gt; 10:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def compute_weight(fish, nr_zile):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Calculează greutatea unui peste în funcție de coeficientul z.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return fish[1] + fish[2] * nr_zile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(n, greutate_peste, nr_zile, fish_list):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Rezolvă problema și returnează o listă de tuple de forma (greutate, denumire) pentru fiecare peste care&lt;br /&gt;
    are greutatea suficientă, sau o listă goală dacă niciun peste nu are greutatea necesară.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    valid = validare_input(n, greutate_peste, nr_zile, fish_list)&lt;br /&gt;
    if not valid:&lt;br /&gt;
        return None&lt;br /&gt;
    results = []&lt;br /&gt;
    for fish in fish_list:&lt;br /&gt;
        weight = compute_weight(fish, nr_zile)&lt;br /&gt;
        if weight &amp;gt;= greutate_peste:&lt;br /&gt;
            results.append((weight, fish[0]))&lt;br /&gt;
    return results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def print_results(results):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Afiseaza greutatea si denumirea pestilor cu greutatea suficienta,&lt;br /&gt;
    sau mesajul &amp;quot;0&amp;quot; daca niciun peste nu are greutatea necesara.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if results:&lt;br /&gt;
        for weight, name in sorted(results):&lt;br /&gt;
            print(weight, name)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, greutate_peste, nr_zile = map(int, input().split())&lt;br /&gt;
    fish_list = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        letter, weight, gain = input().split()&lt;br /&gt;
        fish_list.append([letter, int(weight), int(gain)])&lt;br /&gt;
    results = solve(n, greutate_peste, nr_zile, fish_list)&lt;br /&gt;
    if results is None:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print_results(results)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explcatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod rezolvă o problemă referitoare la calcularea greutății unor pești în funcție de coeficientul lor z, numărul de zile, și verifică dacă greutatea obținută este suficient de mare. În detaliu, codul include următoarele funcții:&lt;br /&gt;
&lt;br /&gt;
- `validare_input(n, greutate_peste, nr_zile, fish_list)`: verifică dacă datele de intrare sunt valide și returnează True dacă sunt valide, False în caz contrar.&lt;br /&gt;
- `compute_weight(fish, nr_zile)`: calculează greutatea unui peste în funcție de coeficientul z și numărul de zile.&lt;br /&gt;
&lt;br /&gt;
- `solve(n, greutate_peste, nr_zile, fish_list)`: rezolvă problema și returnează o listă de tuple de forma (greutate, denumire) pentru fiecare peste care are greutatea suficientă, sau o listă goală dacă niciun peste nu are greutatea necesară.&lt;br /&gt;
&lt;br /&gt;
- `print_results(results)`: afișează greutatea și denumirea pestilor cu greutatea suficienta sau mesajul &amp;quot;0&amp;quot; daca niciun peste nu are greutatea necesara.&lt;br /&gt;
&lt;br /&gt;
- `main()`: primește datele de intrare, apelează funcția `solve()` pentru a rezolva problema și afișează rezultatele apelând funcția `print_results()`.&lt;br /&gt;
&lt;br /&gt;
În general, codul începe prin a verifica datele de intrare utilizând funcția `validare_input()`. Dacă datele sunt valide, funcția `solve()` calculează greutatea fiecărui pește și adaugă într-o listă tuple de forma (greutate, denumire) pentru fiecare peste care are greutatea suficientă. &lt;br /&gt;
&lt;br /&gt;
Apoi, funcția `print_results()` afișează greutatea și denumirea pestilor cu greutatea suficienta, sau mesajul &amp;quot;0&amp;quot; dacă niciun peste nu are greutatea necesara.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1529_-_Pesti&amp;diff=5334</id>
		<title>1529 - Pesti</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1529_-_Pesti&amp;diff=5334"/>
		<updated>2023-04-29T08:53:43Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Andrei îşi doreşte un acvariu cu peşti. Găseşte în oraş un singur magazin ZOO unde se vând doar peştişori ciudaţi. Fiecare peştişor se îngraşă în fiecare zi cu câte un număr de grame. Cu fiecare săptămâna ce trece, peştişorii vor lua în greutate acelaşi număr de grame ca şi săptămâna precedentă, la care se adaugă greutatea pe care o luau în prima săptămână. Nu toţi peştişorii sunt de acelaşi tip, deci nu au neapărat aceeaşi greutate şi nici nu se îngraşă neapărat cu acelaşi număr de grame.&lt;br /&gt;
&lt;br /&gt;
Andrei se hotărăşte totuşi să cumpere n peştişori, pe care-i numeşte A,B,C,D,… în ordinea în care îi pune în acvariu. Vrând să ştie în permanenţă ce greutate are fiecare, îşi notează câţi peşti a pus în acvariu, litera atribuită fiecărui peşte, câte grame are fiecare peşte când a fost pus în acvariu şi cu câte grame se îngraşă în ziua în care este pus în acvariu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care afişează, în ordine alfabetică, toţi peştii care au cel puțin greutatea &#039;&#039;&#039;greutate_peste&#039;&#039;&#039;, dată în grame, după ce au trecut &#039;&#039;&#039;nr_zile&#039;&#039;&#039; zile. Pentru fiecare peşte se va afişa greutatea în grame şi litera ce i-a fost atribuită.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conţine pe prima linie, separate prin spațiu, valorile &#039;&#039;&#039;n, greutate_peste şi nr_zile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Urmează &#039;&#039;&#039;n&#039;&#039;&#039; linii, pe fiecare linie fiind scrise separate prin spaţiu: o literă mare, greutatea peştelui în grame şi numărul de grame cu care se îngraşă în ziua în care este pus în acvariu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran,  mesajul &amp;quot;Datele introduse corespund cerințelor&amp;quot; și pe o linie nouă numărul &#039;&#039;&#039;P&#039;&#039;&#039; , reprezentând produsul primelor &#039;&#039;&#039;n&#039;&#039;&#039; pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul &amp;quot;Datele introduse nu corespund cerintelor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează, în ordine alfabetică, toţi peştii care au cel puțin greutatea G, dată în grame, după ce au trecut z zile. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&#039;&#039;&#039;0&amp;lt;n&amp;lt;27&#039;&#039;&#039;; &#039;&#039;&#039;G – număr natural;&#039;&#039;&#039; &#039;&#039;&#039;0&amp;lt;z&amp;lt;365&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pentru fiecare peşte: greutatea iniţială în grame şi numărul de grame cu care se îngraşă &#039;&#039;&#039;nu depăşesc valoarea 10.&#039;&#039;&#039;&lt;br /&gt;
Andrei codifică peştii în ordine, cu litere mari consecutive.&lt;br /&gt;
&lt;br /&gt;
La scrierea programul Andrei respectă ordinea alfabetică.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: 2 500 25&lt;br /&gt;
: A 5 2&lt;br /&gt;
: B 4 3 &lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1529&lt;br /&gt;
def validare_input(n, greutate_peste, nr_zile, fish_list):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă datele de intrare sunt valide.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not (0 &amp;lt; n &amp;lt; 27 and 0 &amp;lt; greutate_peste &amp;lt; 100000 and 0 &amp;lt; nr_zile &amp;lt; 365):&lt;br /&gt;
        return False&lt;br /&gt;
    for fish in fish_list:&lt;br /&gt;
        if fish[1] &amp;gt; 10 or fish[2] &amp;gt; 10:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def compute_weight(fish, nr_zile):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Calculează greutatea unui peste în funcție de coeficientul z.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return fish[1] + fish[2] * nr_zile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(n, greutate_peste, nr_zile, fish_list):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Rezolvă problema și returnează o listă de tuple de forma (greutate, denumire) pentru fiecare peste care&lt;br /&gt;
    are greutatea suficientă, sau o listă goală dacă niciun peste nu are greutatea necesară.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    valid = validare_input(n, greutate_peste, nr_zile, fish_list)&lt;br /&gt;
    if not valid:&lt;br /&gt;
        return None&lt;br /&gt;
    results = []&lt;br /&gt;
    for fish in fish_list:&lt;br /&gt;
        weight = compute_weight(fish, nr_zile)&lt;br /&gt;
        if weight &amp;gt;= greutate_peste:&lt;br /&gt;
            results.append((weight, fish[0]))&lt;br /&gt;
    return results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def print_results(results):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Afiseaza greutatea si denumirea pestilor cu greutatea suficienta,&lt;br /&gt;
    sau mesajul &amp;quot;0&amp;quot; daca niciun peste nu are greutatea necesara.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if results:&lt;br /&gt;
        for weight, name in sorted(results):&lt;br /&gt;
            print(weight, name)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, greutate_peste, nr_zile = map(int, input().split())&lt;br /&gt;
    fish_list = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        letter, weight, gain = input().split()&lt;br /&gt;
        fish_list.append([letter, int(weight), int(gain)])&lt;br /&gt;
    results = solve(n, greutate_peste, nr_zile, fish_list)&lt;br /&gt;
    if results is None:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print_results(results)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explcatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod rezolvă o problemă referitoare la calcularea greutății unor pești în funcție de coeficientul lor z, numărul de zile, și verifică dacă greutatea obținută este suficient de mare. În detaliu, codul include următoarele funcții:&lt;br /&gt;
&lt;br /&gt;
- `validare_input(n, greutate_peste, nr_zile, fish_list)`: verifică dacă datele de intrare sunt valide și returnează True dacă sunt valide, False în caz contrar.&lt;br /&gt;
- `compute_weight(fish, nr_zile)`: calculează greutatea unui peste în funcție de coeficientul z și numărul de zile.&lt;br /&gt;
- `solve(n, greutate_peste, nr_zile, fish_list)`: rezolvă problema și returnează o listă de tuple de forma (greutate, denumire) pentru fiecare peste care are greutatea suficientă, sau o listă goală dacă niciun peste nu are greutatea necesară.&lt;br /&gt;
- `print_results(results)`: afișează greutatea și denumirea pestilor cu greutatea suficienta sau mesajul &amp;quot;0&amp;quot; daca niciun peste nu are greutatea necesara.&lt;br /&gt;
- `main()`: primește datele de intrare, apelează funcția `solve()` pentru a rezolva problema și afișează rezultatele apelând funcția `print_results()`.&lt;br /&gt;
&lt;br /&gt;
În general, codul începe prin a verifica datele de intrare utilizând funcția `validare_input()`. Dacă datele sunt valide, funcția `solve()` calculează greutatea fiecărui pește și adaugă într-o listă tuple de forma (greutate, denumire) pentru fiecare peste care are greutatea suficientă. Apoi, funcția `print_results()` afișează greutatea și denumirea pestilor cu greutatea suficienta, sau mesajul &amp;quot;0&amp;quot; dacă niciun peste nu are greutatea necesara.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1529_-_Pesti&amp;diff=5333</id>
		<title>1529 - Pesti</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1529_-_Pesti&amp;diff=5333"/>
		<updated>2023-04-29T08:52:02Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Andrei îşi doreşte un acvariu cu peşti. Găseşte în oraş un singur magazin ZOO unde se vând doar peştişori ciudaţi. Fiecare peştişor se îngraşă în fiecare zi cu câte un număr de grame. Cu fiecare săptămâna ce trece, peştişorii vor lua în greutate acelaşi număr de grame ca şi săptămâna precedentă, la care se adaugă greutatea pe care o luau în prima săptămână. Nu toţi peştişorii sunt de acelaşi tip, deci nu au neapărat aceeaşi greutate şi nici nu se îngraşă neapărat cu acelaşi număr de grame.&lt;br /&gt;
&lt;br /&gt;
Andrei se hotărăşte totuşi să cumpere n peştişori, pe care-i numeşte A,B,C,D,… în ordinea în care îi pune în acvariu. Vrând să ştie în permanenţă ce greutate are fiecare, îşi notează câţi peşti a pus în acvariu, litera atribuită fiecărui peşte, câte grame are fiecare peşte când a fost pus în acvariu şi cu câte grame se îngraşă în ziua în care este pus în acvariu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care afişează, în ordine alfabetică, toţi peştii care au cel puțin greutatea &#039;&#039;&#039;greutate_peste&#039;&#039;&#039;, dată în grame, după ce au trecut &#039;&#039;&#039;nr_zile&#039;&#039;&#039; zile. Pentru fiecare peşte se va afişa greutatea în grame şi litera ce i-a fost atribuită.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conţine pe prima linie, separate prin spațiu, valorile &#039;&#039;&#039;n, greutate_peste şi nr_zile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Urmează &#039;&#039;&#039;n&#039;&#039;&#039; linii, pe fiecare linie fiind scrise separate prin spaţiu: o literă mare, greutatea peştelui în grame şi numărul de grame cu care se îngraşă în ziua în care este pus în acvariu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran,  mesajul &amp;quot;Datele introduse corespund cerințelor&amp;quot; și pe o linie nouă numărul &#039;&#039;&#039;P&#039;&#039;&#039; , reprezentând produsul primelor &#039;&#039;&#039;n&#039;&#039;&#039; pătrate perfecte nenule, în caz contrar programul va afișa pe o linie noua mesajul &amp;quot;Datele introduse nu corespund cerintelor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează, în ordine alfabetică, toţi peştii care au cel puțin greutatea G, dată în grame, după ce au trecut z zile. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&#039;&#039;&#039;0&amp;lt;n&amp;lt;27&#039;&#039;&#039;; &#039;&#039;&#039;G – număr natural;&#039;&#039;&#039; &#039;&#039;&#039;0&amp;lt;z&amp;lt;365&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pentru fiecare peşte: greutatea iniţială în grame şi numărul de grame cu care se îngraşă &#039;&#039;&#039;nu depăşesc valoarea 10.&#039;&#039;&#039;&lt;br /&gt;
Andrei codifică peştii în ordine, cu litere mari consecutive.&lt;br /&gt;
&lt;br /&gt;
La scrierea programul Andrei respectă ordinea alfabetică.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: 2 500 25&lt;br /&gt;
: A 5 2&lt;br /&gt;
: B 4 3 &lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1529&lt;br /&gt;
def validare_input(n, greutate_peste, nr_zile, fish_list):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă datele de intrare sunt valide.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not (0 &amp;lt; n &amp;lt; 27 and 0 &amp;lt; greutate_peste &amp;lt; 100000 and 0 &amp;lt; nr_zile &amp;lt; 365):&lt;br /&gt;
        return False&lt;br /&gt;
    for fish in fish_list:&lt;br /&gt;
        if fish[1] &amp;gt; 10 or fish[2] &amp;gt; 10:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def compute_weight(fish, nr_zile):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Calculează greutatea unui peste în funcție de coeficientul z.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return fish[1] + fish[2] * nr_zile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(n, greutate_peste, nr_zile, fish_list):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Rezolvă problema și returnează o listă de tuple de forma (greutate, denumire) pentru fiecare peste care&lt;br /&gt;
    are greutatea suficientă, sau o listă goală dacă niciun peste nu are greutatea necesară.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    valid = validare_input(n, greutate_peste, nr_zile, fish_list)&lt;br /&gt;
    if not valid:&lt;br /&gt;
        return None&lt;br /&gt;
    results = []&lt;br /&gt;
    for fish in fish_list:&lt;br /&gt;
        weight = compute_weight(fish, nr_zile)&lt;br /&gt;
        if weight &amp;gt;= greutate_peste:&lt;br /&gt;
            results.append((weight, fish[0]))&lt;br /&gt;
    return results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def print_results(results):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Afiseaza greutatea si denumirea pestilor cu greutatea suficienta,&lt;br /&gt;
    sau mesajul &amp;quot;0&amp;quot; daca niciun peste nu are greutatea necesara.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if results:&lt;br /&gt;
        for weight, name in sorted(results):&lt;br /&gt;
            print(weight, name)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, greutate_peste, nr_zile = map(int, input().split())&lt;br /&gt;
    fish_list = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        letter, weight, gain = input().split()&lt;br /&gt;
        fish_list.append([letter, int(weight), int(gain)])&lt;br /&gt;
    results = solve(n, greutate_peste, nr_zile, fish_list)&lt;br /&gt;
    if results is None:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print_results(results)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explcatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Funcția read_input() citește valorile n, G, z și lista de n pești, formată din tripletele litera, greutate și crestere. Aceste valori sunt returnate ca tuplu.&lt;br /&gt;
&lt;br /&gt;
Funcția compute_weight(fish, z) primește un peste sub formă de tripletă și coeficientul z, și calculează greutatea acestuia adăugând la greutatea inițială produsul dintre coeficientul z și rata de creștere a peștelui. Funcția returnează greutatea calculată.&lt;br /&gt;
&lt;br /&gt;
Funcția print_results(fish_list, G) primește lista de pești și greutatea minimă G și afișează greutatea și denumirea tuturor peștilor care au greutatea minimă sau mai mare. Peștii sunt sortați în ordine alfabetică înainte de a fi procesați. Dacă niciun peste nu îndeplinește condiția, funcția afișează mesajul &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
În funcția principală se apelează funcția read_input() pentru a obține datele de intrare și se stochează fiecare valoare într-o variabilă separată. Apoi, se apelează funcția print_results(fish_list, G) cu lista de pești și greutatea minimă G.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1528_-_Operatii_Matematice&amp;diff=5332</id>
		<title>1528 - Operatii Matematice</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1528_-_Operatii_Matematice&amp;diff=5332"/>
		<updated>2023-04-29T08:51:19Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Maria, Cristi şi Alex au găsit o modalitate de a-şi îmbunătăţi viteza de efectuare a operaţiilor matematice printr-un joc care să corespundă nivelului de vârsta al fiecăruia. Maria ştie doar operaţiile de adunare şi scădere, Cristi a învăţat înmulţirile iar Alex fiind în clasa a 5-a studiază divizibilitatea numerelor.&lt;br /&gt;
&lt;br /&gt;
Jocul se desfăşoară în felul următor: Maria alege o cifra – cifra de start (întotdeauna este nenulă). Cristi o înmulţeşte cu 3. La numărul obţinut de Cristi, Maria adaugă o nouă cifră şi îi spune lui Cristi suma obţinută. Cristi caută cel mai mare multiplu a lui 7 mai mic decât numărul obţinut de Maria şi îl spune Mariei. Aceasta scade din numărul ei multiplul spus de Cristi şi obţine un număr nou. Din acest moment jocul se reia, Cristi înmulţeşte cu 3, Maria alege o cifră şi o adaugă la numărul obţinut de Cristi s.a.m.d…&lt;br /&gt;
&lt;br /&gt;
Între timp Alex este atent la cifrele pe care Maria le-a introdus în joc şi caută să vadă dacă numărul format din aceste cifre este divizibil cu &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Aflaţi care este numărul obţinut de Maria după adăugarea ultimei cifre.&lt;br /&gt;
&lt;br /&gt;
2) Ajutaţi-l pe Alex să verifice dacă numărul format din cifrele alese de Maria este divizibil cu &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va contine pe prima linie numărul de cifre alese de Maria iar pe următoarea linie separate prin spaţiu cifrele în ordinea alegerii acestora.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie numărul obţinut la cerința 1 şi pe a doua linie răspunsul &#039;&#039;&#039;DA&#039;&#039;&#039; în cazul în care răspunsul lui Alex &#039;&#039;&#039;trebuie să fie afirmativ&#039;&#039;&#039;, &#039;&#039;&#039;respectiv NU în caz contrar&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus.&lt;br /&gt;
 &lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
Numărul de cifre alese de Maria este maxim 100.&lt;br /&gt;
&lt;br /&gt;
Pentru rezolvarea corectă a primei cerinţe se obţine 50% din punctajul unui test.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introduceti numarul de cifre:&lt;br /&gt;
: 4&lt;br /&gt;
: Introduceti cifrele:&lt;br /&gt;
:2 3 4 5&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Numarul obtinut de Maria este: 14&lt;br /&gt;
: DA, este divizibil cu 7.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1528&lt;br /&gt;
def play_game(cifre):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Returneaza numarul obtinut de Maria dupa joc.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    cristi_nr = cifre[0] * 3&lt;br /&gt;
    maria_suma = cifre[0]&lt;br /&gt;
    for cifra in cifre[1:]:&lt;br /&gt;
        cristi_nr = cristi_nr * 3&lt;br /&gt;
        maria_suma = maria_suma + cifra&lt;br /&gt;
        maxim_7 = (maria_suma // 7) * 7&lt;br /&gt;
        maria_nr_nou = maria_suma - maxim_7&lt;br /&gt;
        cristi_nr = cristi_nr + maria_nr_nou&lt;br /&gt;
    return maria_suma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def print_result(maria_suma):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Afiseaza numarul obtinut de Maria si daca acesta este divizibil cu 7.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    print(&amp;quot;Datele sunt corecte.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Numarul obtinut de Maria este:&amp;quot;, maria_suma)&lt;br /&gt;
    if maria_suma % 7 == 0:&lt;br /&gt;
        print(&amp;quot;DA, este divizibil cu 7.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;NU, nu este divizibil cu 7.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de cifre: &amp;quot;))&lt;br /&gt;
    cifre = list(map(int, input(&amp;quot;Introduceti cifrele: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    if n &amp;lt;= 0 or n &amp;gt; 100:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    elif len(cifre) != n:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        maria_suma = play_game(cifre)&lt;br /&gt;
        print_result(maria_suma)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Funcția play_game primește ca argument o listă de cifre și returnează numărul obținut de Maria după jocul descris în enunțul problemei.&lt;br /&gt;
&lt;br /&gt;
În prima linie, se inițializează variabila cristi_nr cu valoarea primei cifre din listă, înmulțită cu 3. Aceasta reprezintă numărul obținut de Cristi la prima etapă a jocului. Variabila maria_suma este inițializată cu aceeași valoare, reprezentând suma cifrelor alese de Maria la primele două etape ale jocului.&lt;br /&gt;
&lt;br /&gt;
Apoi, pentru fiecare cifră din lista de cifre, se efectuează următoarele operații:&lt;br /&gt;
&lt;br /&gt;
se înmulțește numărul lui Cristi cu 3&lt;br /&gt;
se adună cifra curentă la suma cifrelor alese de Maria&lt;br /&gt;
se determină cel mai mare multiplu de 7 care este mai mic sau egal cu suma cifrelor alese de Maria&lt;br /&gt;
se calculează o nouă valoare pentru suma cifrelor alese de Maria, scăzând din suma curentă cel mai mare multiplu de 7 găsit la pasul anterior&lt;br /&gt;
se adaugă noua valoare calculată pentru suma cifrelor alese de Maria la numărul lui Cristi&lt;br /&gt;
La final, funcția returnează valoarea finală a sumei cifrelor alese de Maria.&lt;br /&gt;
&lt;br /&gt;
Funcția print_result primește ca argument valoarea returnată de funcția play_game și afișează numărul obținut de Maria, precum și faptul că acesta este sau nu divizibil cu 7.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &#039;__main__&#039;:, se citește numărul de cifre și lista de cifre de la tastatură. Dacă numărul de cifre nu respectă restricțiile impuse în enunțul problemei, se afișează un mesaj corespunzător. Dacă lungimea listei de cifre nu corespunde cu numărul de cifre specificat, se afișează de asemenea un mesaj corespunzător. În caz contrar, se apelează funcția play_game cu lista de cifre și se afișează rezultatul apelului funcției print_result.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1060_-_Porumb&amp;diff=5330</id>
		<title>1060 - Porumb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1060_-_Porumb&amp;diff=5330"/>
		<updated>2023-04-29T08:46:55Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Locuitorii planetei Agria, numiţi agri, au hotărât ca în celebrul an 2012 să le explice pământenilor cum trebuie cules „eficient” un rând cu &#039;&#039;&#039;n&#039;&#039;&#039; porumbi, numerotaţi, în ordine, cu &#039;&#039;&#039;1, 2, 3,..., n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Cei &#039;&#039;&#039;n&#039;&#039;&#039; porumbi sunt culeşi de mai mulţi agri. Primul agri merge de-a lungul rândului, plecând de la primul porumb şi culege primul porumb întâlnit, al treilea, al cincilea şi aşa mai departe până la capătul rândului.&lt;br /&gt;
&lt;br /&gt;
Atunci când ajunge la capătul rândului, porneşte al doilea agri şi culege porumbi respectând aceeaşi regulă ca şi primul agri.&lt;br /&gt;
&lt;br /&gt;
Metoda se repetă până când toţi porumbii sunt culeşi.&lt;br /&gt;
&lt;br /&gt;
Pământeanul Ionel încearcă să descopere ce ascunde această metodă şi se gândeşte câţi porumbi culege primul agri, câţi agri culeg un rând cu &#039;&#039;&#039;n&#039;&#039;&#039; porumbi, la a câta trecere este cules porumbul cu numărul &#039;&#039;&#039;x&#039;&#039;&#039; şi care este numărul ultimului porumb cules.&lt;br /&gt;
&lt;br /&gt;
Exemplu: Dacă pe un rând sunt n=14 porumbi atunci sunt 4 agri care culeg porumbii:&lt;br /&gt;
primul agri culege porumbii 1,3,5,7,9,11,13;&lt;br /&gt;
al doilea agri culege porumbii 2,6,10,14;&lt;br /&gt;
al treilea agri culege porumbii 4 şi 12;&lt;br /&gt;
ultimul agri culege porumbul 8.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pentru a-l ajuta pe Ionel să descopere secretul acestei metode, scrieţi un program care citeşte cele două numere naturale &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;x&#039;&#039;&#039; şi care determină:&lt;br /&gt;
&lt;br /&gt;
a) numărul de porumbi culeşi de primul agri;&lt;br /&gt;
b) numărul de agri care culeg şirul de n porumbi;&lt;br /&gt;
c) numărul trecerii la care este cules porumbul cu numărul x;&lt;br /&gt;
d) numărul ultimului porumb cules.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie, separate printr-un spaţiu, cele două numere naturale &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;x&#039;&#039;&#039; cu semnificația din enunţ.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține patru linii:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se va scrie un număr natural reprezentând numărul de porumbi culeşi de primul agri;&lt;br /&gt;
&lt;br /&gt;
pe a doua linie se va scrie un număr natural reprezentând numărul de agri care culeg cei n porumbi;&lt;br /&gt;
&lt;br /&gt;
pe a treia linie se va scrie un număr natural, reprezentând numărul trecerii la care este cules porumbul x;&lt;br /&gt;
&lt;br /&gt;
pe a patra linie se va scrie un număr natural, reprezentând numărul ultimului porumb cules.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează  cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;x&#039;&#039;&#039; ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
Trecerile se numerotează în ordine, începând cu valoarea &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Pentru rezolvarea corectă a cerinţei a) se acordă &#039;&#039;&#039;10%&#039;&#039;&#039; din punctaj.&lt;br /&gt;
&lt;br /&gt;
Pentru rezolvarea corectă a cerinţelor a) şi b) se acordă &#039;&#039;&#039;40%&#039;&#039;&#039; din punctaj.&lt;br /&gt;
&lt;br /&gt;
Pentru rezolvarea corectă a cerinţelor a), b) şi c) se acordă &#039;&#039;&#039;70%&#039;&#039;&#039; din punctaj.&lt;br /&gt;
&lt;br /&gt;
Pentru rezolvarea corectă a celor patru cerinţe se acordă &#039;&#039;&#039;100%&#039;&#039;&#039; din punctaj.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introduceti numarul de porumbi:&lt;br /&gt;
:14  &lt;br /&gt;
: Introduceti numarul porumbului cautat:&lt;br /&gt;
: 4&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Numarul de porumbi culesi de primul agri:&lt;br /&gt;
: 7&lt;br /&gt;
: Numarul de agri care culeg sirul de n porumbi:&lt;br /&gt;
: 7&lt;br /&gt;
: Porumbul cu numarul  4 este cules la trecerea &lt;br /&gt;
: 1&lt;br /&gt;
: Numarul ultimului porumb cules:  2&lt;br /&gt;
: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1060&lt;br /&gt;
def porumbi_primul_agricultor(n):&lt;br /&gt;
    return (n + 1) // 2&lt;br /&gt;
&lt;br /&gt;
def numar_agricultori(n):&lt;br /&gt;
    return (n + 1) // 2&lt;br /&gt;
&lt;br /&gt;
def trecere_porumb_cautat(n, x):&lt;br /&gt;
    agri = numar_agricultori(n)&lt;br /&gt;
    pozitie_x = (x - 1) % n + 1&lt;br /&gt;
    trecere_x = (pozitie_x - 1) // agri + 1&lt;br /&gt;
    return trecere_x&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, x):&lt;br /&gt;
    if not isinstance(n, int) or not isinstance(x, int):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif n &amp;lt; x:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif n &amp;lt; 1 or n &amp;gt; 1000000000 or x &amp;lt; 1 or x &amp;gt; 1000000000:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de porumbi: &amp;quot;))&lt;br /&gt;
    x = int(input(&amp;quot;Introduceti numarul porumbului cautat: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, x):&lt;br /&gt;
        primul_agri = porumbi_primul_agricultor(n)&lt;br /&gt;
        agri = numar_agricultori(n)&lt;br /&gt;
        ultimul_porumb = n - (n // agri) * (agri - 1)&lt;br /&gt;
        trecere_x = trecere_porumb_cautat(n, x)&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Numarul de porumbi culesi de primul agri: &amp;quot;, primul_agri)&lt;br /&gt;
        print(&amp;quot;Numarul de agri care culeg sirul de n porumbi: &amp;quot;, agri)&lt;br /&gt;
        print(&amp;quot;Porumbul cu numarul &amp;quot;, x, &amp;quot;este cules la trecerea &amp;quot;, trecere_x)&lt;br /&gt;
        print(&amp;quot;Numarul ultimului porumb cules: &amp;quot;, ultimul_porumb)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicația codului:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acesta este un program care calculează informații despre culegerea porumbului de către agricultori, date fiind numărul total de porumbi și poziția porumbului căutat. &lt;br /&gt;
&lt;br /&gt;
Funcția `porumbi_primul_agricultor(n)` returnează numărul de porumbi culeși de primul agricultor, calculat prin împărțirea numărului total de porumbi la doi și apoi rotunjit în sus cu ajutorul operatorului de divizare întreagă `//`.&lt;br /&gt;
&lt;br /&gt;
Funcția `numar_agricultori(n)` returnează numărul de agricultori care culeg porumbul, calculat în același mod ca mai sus.&lt;br /&gt;
&lt;br /&gt;
Funcția `trecere_porumb_cautat(n, x)` calculează numărul de treceri ale șirului de agricultori necesare pentru a ajunge la poziția porumbului căutat. Variabila `agri` este numărul de agricultori calculat anterior, iar variabila `pozitie_x` reprezintă poziția porumbului căutat pe șirul circular de porumbi. Variabila `trecere_x` reprezintă numărul de treceri necesare pentru ca porumbul cu numărul `x` să fie cules de unul dintre agricultori.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input(n, x)` verifică dacă numerele introduse de utilizator sunt întregi și îndeplinesc alte restricții impuse. În caz contrar, afișează un mesaj de eroare și returnează `False`. Dacă numerele sunt valide, afișează un mesaj de confirmare și returnează `True`.&lt;br /&gt;
&lt;br /&gt;
În funcția principală `main`, utilizatorul este întâi invitat să introducă numărul total de porumbi și poziția porumbului căutat. Apoi se verifică dacă acestea sunt valori valide cu ajutorul funcției `validate_input`. Dacă valorile sunt valide, se calculează informațiile cerute și se afișează.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1073_-_Numerus&amp;diff=5329</id>
		<title>1073 - Numerus</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1073_-_Numerus&amp;diff=5329"/>
		<updated>2023-04-29T08:45:44Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
La ora de matematică distractivă, domnul profesor Numerus propune elevilor săi să completeze cu numere naturale o grilă cu 6 coloane numerotate cu literele A, B, C, D, E şi F şi cu un număr infinit de linii. Grila va fi completată cu numere naturale, începând cu numărul 1. Pe liniile impare completarea se va face de la stânga la dreapta, iar pe cele pare de la dreapta la stânga. Ultimul număr de pe o linie va fi identic cu penultimul număr (în sensul completării) de pe aceeaşi linie.&lt;br /&gt;
Deoarece pe tablă sau pe o foaie de hârtie numărul de linii este limitat, deci grila poate fi efectiv completată doar pentru un număr mic de linii, domnul profesor Numerus doreşte ca elevii săi să determine, cu ajutorul calculatorului, imaginea unei anumite linii a grilei şi locul sau locurile pe care se poate afla un număr natural dat.&lt;br /&gt;
&lt;br /&gt;
Deduceţi regula după care se completează linia &#039;&#039;&#039;k&#039;&#039;&#039; a grilei şi scrieţi un program care să citească numerele naturale &#039;&#039;&#039;k&#039;&#039;&#039; şi &#039;&#039;&#039;n&#039;&#039;&#039; şi care să determine:&lt;br /&gt;
&lt;br /&gt;
a) numerele naturale de pe linia &#039;&#039;&#039;k&#039;&#039;&#039;, vizualizate de la stânga la dreapta;&lt;br /&gt;
b) linia pe care se află în grilă numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;;&lt;br /&gt;
c) coloana sau coloanele pe care se află în grilă numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține o singură linie pe care sunt scrise două numere naturale &#039;&#039;&#039;k&#039;&#039;&#039; şi &#039;&#039;&#039;n&#039;&#039;&#039;, separate printr-un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține 3 linii:&lt;br /&gt;
a) pe prima linie, se vor scrie numerele de pe linia &#039;&#039;&#039;k&#039;&#039;&#039; a grilei;&lt;br /&gt;
b) pe a doua linie, se va scrie un număr natural reprezentând linia pe care se află în grilă numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;;&lt;br /&gt;
c) pe a treia linie, se va scrie litera sau literele care reprezintă coloana, respectiv coloanele pe care se află în grilă numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;; în situaţia în care avem de afişat două litere acestea se vor afişa cu un spaţiu între ele.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
Numerele &#039;&#039;&#039;k&#039;&#039;&#039; şi &#039;&#039;&#039;n&#039;&#039;&#039;sunt naturale nenule&lt;br /&gt;
&lt;br /&gt;
5 ≤ &#039;&#039;&#039;k&#039;&#039;&#039; &amp;lt; 200000000&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 999999999&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introduceti numerele naturale:&lt;br /&gt;
: 10 40&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 50 50 49 48 47 46&lt;br /&gt;
:8&lt;br /&gt;
:A B&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1073&lt;br /&gt;
def completare_linie(k):&lt;br /&gt;
    if k % 2 == 1:  # linie impară&lt;br /&gt;
        start = (k - 1) * 5 + 1&lt;br /&gt;
        return list(range(start, start + 5)) + [start + 4]&lt;br /&gt;
    else:  # linie pară&lt;br /&gt;
        start = k * 5&lt;br /&gt;
        return [start] + list(range(start - 1, start - 6, -1))&lt;br /&gt;
&lt;br /&gt;
def determina_linia_si_coloanele(n):&lt;br /&gt;
    for k in range(1, n + 1):&lt;br /&gt;
        linie = completare_linie(k)&lt;br /&gt;
        if n in linie:&lt;br /&gt;
            linia = k&lt;br /&gt;
            coloane = [chr(ord(&#039;A&#039;) + linie.index(n))]&lt;br /&gt;
            if linie[-1] == linie[-2]:  # numărul de pe linie este duplicat&lt;br /&gt;
                coloane.append(chr(ord(&#039;A&#039;) + linie.index(n, 0, -1)))&lt;br /&gt;
            return linia, &#039; &#039;.join(coloane)&lt;br /&gt;
&lt;br /&gt;
def validate_input(k, n):&lt;br /&gt;
    if not isinstance(k, int) or not isinstance(n, int):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif k &amp;lt;= 0 or n &amp;lt;= 0:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect&amp;quot;)&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    k, n = map(int, input(&amp;quot;Introduceti numerele naturale:&amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(k, n):&lt;br /&gt;
        quit()&lt;br /&gt;
&lt;br /&gt;
    # a) completarea liniei k&lt;br /&gt;
    linie_k = completare_linie(k)&lt;br /&gt;
    print(*linie_k)&lt;br /&gt;
&lt;br /&gt;
    # b) determinarea liniei și coloanei/coloanelor pe care se află n&lt;br /&gt;
    linia_n, coloane_n = determina_linia_si_coloanele(n)&lt;br /&gt;
    print(linia_n)&lt;br /&gt;
    print(coloane_n)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod are urmatoarele functii:&lt;br /&gt;
&lt;br /&gt;
1. `completare_linie(k)`: Aceasta functie primeste un numar natural `k` ca argument si returneaza o lista cu primele cinci numere naturale aflate pe linia `k` si numarul de pe coloana a cincea a acelei linii, daca `k` este impar, sau o lista cu numarul de pe prima coloana a liniei `k` si celelalte patru numere naturale de pe acea linie, daca `k` este par.&lt;br /&gt;
&lt;br /&gt;
2. `determina_linia_si_coloanele(n)`: Aceasta functie primeste un numar natural `n` ca argument si determina linia si coloana/coloanele pe care se afla acel numar in matricea formata prin unirea liniilor calculate de functia `completare_linie()`. Daca numarul de pe linia respectiva are o singura aparitie, functia returneaza numarul liniei si litera corespunzatoare coloanei respective. Daca numarul de pe linie este duplicat, functia returneaza numarul liniei si literele corespunzatoare ambelor aparitii ale numarului respectiv.&lt;br /&gt;
&lt;br /&gt;
3. `validate_input(k, n)`: Aceasta functie primeste doua numere naturale `k` si `n` ca argument si verifica daca acestea sunt indeplinesc restrictiile impuse: trebuie sa fie numere naturale pozitive. Daca acestea nu sunt valide, functia afiseaza un mesaj de eroare si returneaza `False`, altfel afiseaza un mesaj de confirmare si returneaza `True`.&lt;br /&gt;
&lt;br /&gt;
La final, se citesc doua numere naturale `k` si `n` de la tastatura, se valideaza input-ul, apoi se apeleaza cele trei functii definite mai sus in urmatoarea ordine:&lt;br /&gt;
&lt;br /&gt;
1. Se afiseaza completarea liniei `k`.&lt;br /&gt;
2. Se determina linia si coloana/coloanele pe care se afla `n` si se afiseaza aceste valori.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1723_-_Culegere_1&amp;diff=5328</id>
		<title>1723 - Culegere 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1723_-_Culegere_1&amp;diff=5328"/>
		<updated>2023-04-29T08:44:31Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
&lt;br /&gt;
O culegere de probleme are &#039;&#039;&#039;P&#039;&#039;&#039; pagini, numerotate de la &#039;&#039;&#039;1 la P&#039;&#039;&#039;. Problemele din culegere sunt numerotate cu 1,2,3,...,etc, în ordinea apariţiei lor în culegere. Pe prima pagină a culegerii este scrisă o singură problemă (cea cu numărul 1). Pe a doua pagină sunt scrise exact două probleme (cele cu numerele 2 şi 3, în această ordine). Pe cea de-a treia pagină sunt scrise exact trei probleme (cele cu numerele 4, 5 şi 6, în această ordine),…, pe cea de a P-a pagină sunt scrise exact &#039;&#039;&#039;P&#039;&#039;&#039; probleme.&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care citeşte numerele naturale &#039;&#039;&#039;P şi N&#039;&#039;&#039; şi determină valorile:&lt;br /&gt;
a) &#039;&#039;&#039;T&#039;&#039;&#039;, numărul total de cifre care au fost utilizate în numerotarea tuturor problemelor din culegere;&lt;br /&gt;
b) &#039;&#039;&#039;M&#039;&#039;&#039;, numărul minim de pagini pe care ar trebui să le aibă culegerea, astfel încât aceasta să conţină şi problema numerotată cu &#039;&#039;&#039;N&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conţine pe prima linie cele două numere naturale &#039;&#039;&#039;P şi N&#039;&#039;&#039;, separate printr-un spaţiu, cu semnificaţia din enunţ.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul conţine:&lt;br /&gt;
pe prima linie numărul natural &#039;&#039;&#039;T&#039;&#039;&#039;, cu semnificaţia din enunţ;&lt;br /&gt;
pe a doua linie numărul natural &#039;&#039;&#039;M&#039;&#039;&#039;, cu semnificaţia din enunţ.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cerintele de mai sus.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: &#039;&#039;&#039; &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;P&#039;&#039;&#039; ≤ 16000&lt;br /&gt;
1 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 2112600000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: 5 9&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 21&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1723&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def validate_input(p, n):&lt;br /&gt;
    if not 1 &amp;lt;= p &amp;lt;= 16000 or not 1 &amp;lt;= n &amp;lt;= 2112600000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def solve(p, n):&lt;br /&gt;
    # calculate the total number of problems in the first P pages&lt;br /&gt;
    total_problems = sum(range(1, p+1))&lt;br /&gt;
&lt;br /&gt;
    # calculate the number of pages needed to include problem N&lt;br /&gt;
    n_page = ((3 + 8 * (n - 1)) ** 0.5 - 1) // 2 + 1&lt;br /&gt;
&lt;br /&gt;
    # calculate the total number of digits used to number all the problems in the collection&lt;br /&gt;
    total_digits = sum(len(str(i)) for i in range(1, total_problems + 1))&lt;br /&gt;
&lt;br /&gt;
    # print the values of T and M&lt;br /&gt;
    print(total_digits)&lt;br /&gt;
    print(int(n_page))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # read input values&lt;br /&gt;
    p, n = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    # validate input values&lt;br /&gt;
    if not validate_input(p, n):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        solve(p, n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod implementează un algoritm care calculează numărul total de cifre folosite pentru a numerota toate problemele dintr-o carte de probleme și numărul de pagini necesare pentru a include o problemă dată, în funcție de numărul de probleme pe pagină și numărul problemei. Inputul constă din două numere întregi p și n, unde p reprezintă numărul de probleme pe pagină și n este numărul problemei căutate.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input` verifică dacă valorile p și n îndeplinesc restricțiile impuse. Dacă acestea nu sunt îndeplinite, se va returna `False`. Dacă valorile sunt corecte, se va returna `True`.&lt;br /&gt;
&lt;br /&gt;
Funcția `solve` primește valorile validate și calculează numărul total de probleme în primele p pagini, numărul de pagini necesare pentru a include problema n și numărul total de cifre folosite pentru a numerota toate problemele din carte. Apoi, afișează numărul total de cifre și numărul de pagini necesare.&lt;br /&gt;
&lt;br /&gt;
În secțiunea `__name__ == &#039;__main__&#039;`, se vor citi valorile de la intrare, apoi se vor valida și, dacă valorile sunt corecte, se va apela `solve` pentru a rezolva problema și a afișa rezultatele. Dacă valorile nu sunt corecte, se va afișa mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2427_-_Sir_10&amp;diff=5327</id>
		<title>2427 - Sir 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2427_-_Sir_10&amp;diff=5327"/>
		<updated>2023-04-29T08:43:02Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Gigel se distrează construind şiruri crescătoare de numere din mulţimea &#039;&#039;&#039;{1,2,…,n}&#039;&#039;&#039;. La un moment dat observă că unele şiruri, de cel puţin k &#039;&#039;&#039;nr_termeni&#039;&#039;&#039; &#039;&#039;&#039;(k ≥ 3)&#039;&#039;&#039;, au o proprietate mai aparte: diferența dintre doi termeni consecutivi este constantă. Iată câteva exemple de astfel de şiruri pentru &#039;&#039;&#039;n ≥ 22&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
2, 3, 4&lt;br /&gt;
&lt;br /&gt;
1, 5, 9, 13&lt;br /&gt;
&lt;br /&gt;
7, 10, 13, 16, 19, 22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dându-se numărul natural &#039;&#039;&#039;n&#039;&#039;&#039; ajutați-l pe Gigel să numere câte astfel de șiruri poate să construiască.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie numărul cerut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează câte astfel de șiruri poate să construiască poate să construiască Gigel.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
3 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 20000&lt;br /&gt;
&lt;br /&gt;
3 ≤ &#039;&#039;&#039;nr_termeni&#039;&#039;&#039; ≤ n&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: N este:&lt;br /&gt;
: 3&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: N este:&lt;br /&gt;
: 4&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Datele de intrare&lt;br /&gt;
: N este:&lt;br /&gt;
: 5&lt;br /&gt;
; Datele de ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 7&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2427&lt;br /&gt;
def has_valid_input(n, nr_termeni):&lt;br /&gt;
    if not (3 &amp;lt;= n &amp;lt;= 20000):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (3 &amp;lt;= nr_termeni &amp;lt;= n):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def has_property(sir):&lt;br /&gt;
    d = sir[1] - sir[0]&lt;br /&gt;
    for i in range(2, len(sir)):&lt;br /&gt;
        if sir[i] - sir[i - 1] != d:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def backtracking(sir, pozitie):&lt;br /&gt;
    global nr_siruri&lt;br /&gt;
    if len(sir) &amp;gt;= nr_termeni:&lt;br /&gt;
        if has_property(sir):&lt;br /&gt;
            nr_siruri += 1&lt;br /&gt;
    for i in range(pozitie + 1, n + 1):&lt;br /&gt;
        sir.append(i)&lt;br /&gt;
        backtracking(sir, i)&lt;br /&gt;
        sir.pop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;N este:&amp;quot;))&lt;br /&gt;
    nr_termeni = 3&lt;br /&gt;
    nr_siruri = 0&lt;br /&gt;
&lt;br /&gt;
    if not has_valid_input(n, nr_termeni):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    backtracking([], 0)&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    print(nr_siruri)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest program calculează numărul de șiruri aritmetice de lungime fixă și dimensiune n, care încep cu un element oarecare și au cel puțin trei elemente și diferența constantă între oricare două elemente consecutive. Programul utilizează un algoritm de backtracking pentru a genera toate șirurile posibile, verificând dacă acestea au proprietatea cerută.&lt;br /&gt;
&lt;br /&gt;
Funcția has_valid_input(n, nr_termeni) verifică dacă inputul dat este valid, adică dacă n și nr_termeni se încadrează într-un interval specificat. În caz contrar, se afișează un mesaj de eroare și se returnează False.&lt;br /&gt;
&lt;br /&gt;
Funcția has_property(sir) verifică dacă un șir dat are proprietatea cerută (adică diferența dintre oricare două elemente consecutive este constantă). Dacă această proprietate este îndeplinită, funcția returnează True. Dacă nu, funcția returnează False.&lt;br /&gt;
&lt;br /&gt;
Funcția backtracking(sir, pozitie) utilizează un algoritm de backtracking pentru a genera toate șirurile posibile care îndeplinesc cerințele. Aceasta primește ca argumente sir, care reprezintă șirul curent, și pozitie, care reprezintă poziția curentă în șirul n. Dacă șirul sir are cel puțin nr_termeni elemente și îndeplinește proprietatea cerută, se incrementează nr_siruri. Altfel, se explorează toate combinațiile posibile ale elementelor următoare în șirul n cu ajutorul unei bucle for. În continuare, se adaugă elementul curent în sir, se apelează recursiv funcția backtracking() pentru a explora toate posibilitățile ulterioare, se scoate ultimul element adăugat din sir și se continuă cu următoarea iterație a buclei.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &#039;__main__&#039;: se citesc datele de intrare n și se inițializează variabilele nr_termeni și nr_siruri. Apoi, se verifică dacă datele introduse sunt valide, utilizând funcția has_valid_input(). Dacă inputul este valid, se apelează funcția backtracking() pentru a calcula numărul de șiruri cerute și se afișează rezultatul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0359_-_Gard&amp;diff=5326</id>
		<title>0359 - Gard</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0359_-_Gard&amp;diff=5326"/>
		<updated>2023-04-29T08:39:36Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Parcul orașului este înconjurat cu un gard format din &#039;&#039;&#039;n&#039;&#039;&#039; stâlpi formați din blocuri de piatră suprapuse. La început, toți stâlpii aveau aceeași înălțime, dar în timp s-au deteriorat, pierzându-se de la unii stâlpi unele blocuri de piatră.&lt;br /&gt;
&lt;br /&gt;
Primarul orașului dorește să renoveze gardul. Pentru aceasta, s-a determinat înălțimea curentă a fiecărui stâlp și se vor completa cu blocuri de piatră noi stâlpii deteriorați, astfel încât toți stâlpii să aibă aceeași înălțime.&lt;br /&gt;
&lt;br /&gt;
Determinați numărul de blocuri de piatră necesare pentru renovarea gardului.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul de stâlpi &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spaţii, reprezentând înălțimea curentă a fiecărui stâlp.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;T&#039;&#039;&#039;, reprezentând numărul de blocuri de piatră noi necesare pentru renovarea gardului.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul de blocuri de piatră necesare pentru renovarea gardului. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1000&lt;br /&gt;
&lt;br /&gt;
fiecare stâlp va avea înălțimea între 0 și 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Date de intrare:&lt;br /&gt;
: Introdu numarul de stalpi:&lt;br /&gt;
: 5&lt;br /&gt;
: 7 5 6 8 2&lt;br /&gt;
; Date de ieșire:&lt;br /&gt;
:Datele sunt introduse corect.&lt;br /&gt;
: 12&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0359&lt;br /&gt;
def validate(n, heights):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000:&lt;br /&gt;
        raise ValueError(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    if len(heights) != n:&lt;br /&gt;
        raise ValueError(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    for h in heights:&lt;br /&gt;
        if h &amp;lt; 0 or h &amp;gt; 100:&lt;br /&gt;
            raise ValueError(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def calculate_needed_blocks(heights):&lt;br /&gt;
    max_height = max(heights)&lt;br /&gt;
    return sum(max_height - h for h in heights)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introdu numărul de stâlpi: &amp;quot;))&lt;br /&gt;
    heights = list(map(int, input(&amp;quot;Introdu înălțimile stâlpilor, separate prin spații: &amp;quot;).split()))&lt;br /&gt;
    try:&lt;br /&gt;
        validate(n, heights)&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(e)&lt;br /&gt;
        exit()&lt;br /&gt;
    needed_blocks = calculate_needed_blocks(heights)&lt;br /&gt;
    print(&amp;quot;Numărul de blocuri necesare este:&amp;quot;, needed_blocks)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod implementează o funcție de validare a datelor de intrare, care primește un număr întreg n și o listă de întregi heights. Dacă n nu se află în intervalul [1, 1000] sau lungimea listei heights nu este egală cu n, sau oricare dintre valorile din heights se află în afara intervalului [0, 100], funcția aruncă o excepție ValueError cu un mesaj corespunzător. Dacă datele de intrare sunt validate cu succes, funcția afișează un mesaj de confirmare.&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_needed_blocks primește lista heights și calculează numărul total de blocuri necesare pentru a egala înălțimea stâlpilor. Se determină înălțimea maximă a stâlpilor și se scade înălțimea fiecărui stâlp din această valoare maximă. Rezultatul reprezintă numărul de blocuri necesare.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &#039;__main__&#039;:, se citesc datele de intrare utilizând funcția input(), apoi se încearcă validarea lor folosind funcția validate. Dacă datele sunt validate cu succes, se calculează numărul de blocuri necesare utilizând funcția calculate_needed_blocks, apoi se afișează rezultatul. Dacă se aruncă o excepție ValueError în timpul validării, se afișează mesajul de eroare corespunzător și se oprește programul.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0482_-_Auto&amp;diff=5323</id>
		<title>0482 - Auto</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0482_-_Auto&amp;diff=5323"/>
		<updated>2023-04-29T08:31:47Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Gigel se plimbă cu mașina. El parcurge &#039;&#039;&#039;n&#039;&#039;&#039; etape, despre fiecare etapă cunoscându-se durata și viteza constantă de deplasare. Să se determine distanța totală parcursă și viteza medie de deplasare.&lt;br /&gt;
&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 numere naturale &#039;&#039;&#039;t v&#039;&#039;&#039;, reprezentând durata și viteza pentru fiecare etapă.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul afișează pe ecran numerele &#039;&#039;&#039;D VM&#039;&#039;&#039;, reprezentând distanța totală parcursă și viteza medie de deplasare.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează  distanța totală parcursă și viteza medie de deplasare . &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
pentru fiecare etapă, durata și viteza sunt numere naturale mai mici sau egale cu 100&lt;br /&gt;
&lt;br /&gt;
durata se exprimă în ore, distanța în kilometri, iar viteza în km/h&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introdu numărul de măsurători de viteză:&lt;br /&gt;
: 3&lt;br /&gt;
: 2 65&lt;br /&gt;
: 3 70&lt;br /&gt;
: 1 55&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 395 65.83&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0482&lt;br /&gt;
def read_number():&lt;br /&gt;
    while True:&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(input(&amp;quot;Introdu numărul de măsurători de viteză: &amp;quot;))&lt;br /&gt;
            if n &amp;lt; 1 or n &amp;gt; 100:&lt;br /&gt;
                print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                return n&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Introduceti un număr valid.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def validate_input(t, v):&lt;br /&gt;
    if t &amp;lt; 1 or t &amp;gt; 100 or v &amp;lt; 1 or v &amp;gt; 100:&lt;br /&gt;
        raise ValueError(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
def calc_total_distance_and_time(n):&lt;br /&gt;
    distance = 0&lt;br /&gt;
    time = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        t, v = map(int, input().split())&lt;br /&gt;
        if not validate_input(t, v):&lt;br /&gt;
            exit()&lt;br /&gt;
        distance += t * v&lt;br /&gt;
        time += t&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    return distance, time&lt;br /&gt;
&lt;br /&gt;
def calc_avg_speed(distance, time):&lt;br /&gt;
    return distance / time&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = read_number()&lt;br /&gt;
    distance, time = calc_total_distance_and_time(n)&lt;br /&gt;
    avg_speed = calc_avg_speed(distance, time)&lt;br /&gt;
    print(distance, avg_speed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
Acest cod are rolul de a calcula distanta totala parcursa si viteza medie a unui vehicul in functie de numarul de masuratori de viteza efectuate.&lt;br /&gt;
&lt;br /&gt;
Functia `read_number()` citeste de la tastatura numarul de masuratori de viteza si il returneaza. In timp ce utilizatorul introduce un numar nevalid (mai mic de 1 sau mai mare de 100), functia va afisa un mesaj de eroare.&lt;br /&gt;
&lt;br /&gt;
Functia `validate_input(t, v)` primeste ca argumente doua variabile `t` si `v` reprezentand timpul si viteza pentru o masuratoare. Aceasta verifica daca timpul si viteza sunt valide (mai mici de 1 sau mai mari de 100), iar daca nu sunt, arunca o exceptie. In caz contrar, functia returneaza `True`.&lt;br /&gt;
&lt;br /&gt;
Functia `calc_total_distance_and_time(n)` primeste ca argument numarul de masuratori de viteza si calculeaza distanta totala parcursa si timpul total de parcurs. In timp ce se citesc valorile pentru fiecare masuratoare, functia verifica daca valorile citite sunt valide prin apelarea functiei `validate_input(t, v)`. Daca una dintre valorile nu este valida, functia se opreste prin apelarea functiei `exit()`. Dupa ce s-au citit toate masuratorile, functia afiseaza un mesaj de confirmare a introducerii datelor si returneaza distanta totala si timpul total.&lt;br /&gt;
&lt;br /&gt;
Functia `calc_avg_speed(distance, time)` calculeaza viteza medie prin impartirea distantei totale la timpul total.&lt;br /&gt;
&lt;br /&gt;
In blocul `if __name__ == &#039;__main__&#039;:`, programul citeste numarul de masuratori de viteza prin apelarea functiei `read_number()`. Apoi, functia `calc_total_distance_and_time(n)` este apelata pentru a calcula distanta totala si timpul total, care sunt stocate in variabilele `distance` si `time`. In cele din urma, viteza medie este calculata prin apelarea functiei `calc_avg_speed(distance, time)` si afisata impreuna cu distanta totala.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1284_-_Carte_1&amp;diff=5322</id>
		<title>1284 - Carte 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1284_-_Carte_1&amp;diff=5322"/>
		<updated>2023-04-29T08:29:39Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Pentru a se numerota paginile unei cărți s-au folosit &#039;&#039;&#039;n&#039;&#039;&#039; cifre. Câte pagini are cartea?&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Programul afișează pe ecran numărul &#039;&#039;&#039;p&#039;&#039;&#039;, reprezentând numărul de pagini ale carții.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cate pagini are cartea. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1.000.000&lt;br /&gt;
&lt;br /&gt;
pentru fiecare test exista soluție.&lt;br /&gt;
&lt;br /&gt;
numerotarea paginilor se face de la 1.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introduceti numarul de cifre folosite pentru numerotarea paginilor: &lt;br /&gt;
: 1791&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: Numarul de pagini al cartii este:&lt;br /&gt;
: 633&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1284&lt;br /&gt;
def validate_input(n):&lt;br /&gt;
    if not isinstance(n, int):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif n &amp;lt; 1:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_pages(n):&lt;br /&gt;
    pagini = 0&lt;br /&gt;
    cifre = 0&lt;br /&gt;
&lt;br /&gt;
    while cifre &amp;lt;= n:&lt;br /&gt;
        pagini += 1&lt;br /&gt;
        cifre += len(str(pagini))&lt;br /&gt;
&lt;br /&gt;
    return pagini-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def display_pages(total_pages):&lt;br /&gt;
    print(&amp;quot;Numarul de pagini al cartii este:&amp;quot;, total_pages)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    while True:&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(input(&amp;quot;Introduceti numarul de cifre folosite pentru numerotarea paginilor: &amp;quot;))&lt;br /&gt;
            if n &amp;lt; 1:&lt;br /&gt;
                print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                if not validate_input(n):&lt;br /&gt;
                    exit()&lt;br /&gt;
&lt;br /&gt;
                total_pages = calculate_pages(n)&lt;br /&gt;
                if total_pages &amp;lt; 1:&lt;br /&gt;
                    print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
                else:&lt;br /&gt;
                    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
                    display_pages(total_pages)&lt;br /&gt;
&lt;br /&gt;
                break&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod implementează un program care calculează numărul total de pagini al unei cărți, în funcție de numărul de cifre folosite pentru numerotarea paginilor. &lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input(n)` verifică dacă datele de intrare sunt valide, respectiv dacă numărul introdus este un întreg și este mai mare decât zero. Dacă datele nu sunt valide, se afișează un mesaj de eroare și se returnează `False`, altfel se returnează `True`.&lt;br /&gt;
&lt;br /&gt;
Funcția `calculate_pages(n)` calculează numărul total de pagini al cărții în funcție de numărul de cifre folosite pentru numerotarea paginilor. Algoritmul folosit este să se calculeze numărul de cifre necesare pentru a numerota fiecare pagină până la ultima pagină, astfel încât atunci când numărul de cifre necesare depășește numărul de cifre date, se știe că s-au numerotat toate paginile.&lt;br /&gt;
&lt;br /&gt;
Funcția `display_pages(total_pages)` afișează numărul total de pagini al cărții.&lt;br /&gt;
&lt;br /&gt;
În `if __name__ == &#039;__main__&#039;:` se pornește programul. Programul citeste numărul de cifre folosite pentru numerotarea paginilor și verifică dacă datele sunt valide folosind funcția `validate_input(n)`. Dacă datele sunt valide, se calculează numărul total de pagini folosind funcția `calculate_pages(n)`. Dacă numărul total de pagini este mai mic decât 1, se afișează un mesaj de eroare, altfel se afișează un mesaj de confirmare și numărul total de pagini al cărții folosind funcția `display_pages(total_pages)`.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1255_-_Lipsa&amp;diff=5321</id>
		<title>1255 - Lipsa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1255_-_Lipsa&amp;diff=5321"/>
		<updated>2023-04-29T08:11:03Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n - 1&#039;&#039;&#039; numere naturale distincte de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Să se gaseasca numărul lipsă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n - 1&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie numărul căutat.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul lipsă . &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
2 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introdu un nr. N urmat de N numere:&lt;br /&gt;
: 5&lt;br /&gt;
:Numelere N sunt:&lt;br /&gt;
: 5 3 1 2&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1255&lt;br /&gt;
def calculate_missing_number(n, nums):&lt;br /&gt;
    sum_given = sum(nums)&lt;br /&gt;
    sum_n = (n * (n+1)) // 2&lt;br /&gt;
    missing_num = sum_n - sum_given&lt;br /&gt;
    return missing_num&lt;br /&gt;
&lt;br /&gt;
def display_missing_number(missing_num):&lt;br /&gt;
    print(missing_num)&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, nums):&lt;br /&gt;
    if not isinstance(n, int):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif len(nums) != n-1:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif any(num &amp;lt; 1 or num &amp;gt; n for num in nums):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif len(set(nums)) != n-1:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introdu un nr. N urmat de N numere:&amp;quot;))&lt;br /&gt;
    nums = list(map(int, input(&amp;quot;Numerele N sunt:&amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, nums):&lt;br /&gt;
        missing_num = calculate_missing_number(n, nums)&lt;br /&gt;
        display_missing_number(missing_num)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Această cod rezolvă problema de găsire a unui număr lipsă într-o secvență de numere de la 1 la N.&lt;br /&gt;
&lt;br /&gt;
Funcția `calculate_missing_number` primește două argumente: `n` și `nums`. `n` reprezintă lungimea secvenței, iar `nums` este o listă de numere întregi care reprezintă secvența. Funcția calculează suma secvenței prin apelarea funcției `sum(nums)` și calculează suma secvenței de la 1 la `n` prin utilizarea formulei `(n * (n+1)) // 2`. Numărul lipsă este apoi calculat prin scăderea sumei secvenței date de la suma secvenței de la 1 la `n`. Numărul lipsă este returnat de funcție.&lt;br /&gt;
&lt;br /&gt;
Funcția `display_missing_number` primește un argument, `missing_num`, care este numărul lipsă calculat de funcția `calculate_missing_number`. Funcția afișează numărul lipsă.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input` primește două argumente, `n` și `nums`, și verifică dacă intrarea este validă. Funcția returnează `False` dacă intrarea nu respectă constrângerile necesare și returnează `True` altfel. Constrângerile sunt că `n` trebuie să fie un număr întreg, `nums` trebuie să fie o listă de lungime `n-1`, toate numerele din listă trebuie să fie între 1 și `n`, iar toate numerele din listă trebuie să fie distincte.&lt;br /&gt;
&lt;br /&gt;
În blocul principal, utilizatorul introduce `n` și `nums`. Intrarea este validată apelând funcția `validate_input`. Dacă intrarea este validă, numărul lipsă este calculat prin apelarea funcției `calculate_missing_number` și afișat prin apelarea funcției `display_missing_number`. Dacă intrarea nu este validă, este afișat un mesaj de eroare. Dacă intrarea este validă, este afișat un mesaj de succes.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1255_-_Lipsa&amp;diff=5320</id>
		<title>1255 - Lipsa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1255_-_Lipsa&amp;diff=5320"/>
		<updated>2023-04-29T08:09:02Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n - 1&#039;&#039;&#039; numere naturale distincte de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Să se gaseasca numărul lipsă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n - 1&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie numărul căutat.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul lipsă . &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
2 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introdu un nr. N urmat de N numere:&lt;br /&gt;
: 5&lt;br /&gt;
:Numelere N sunt:&lt;br /&gt;
: 5 3 1 2&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1255&lt;br /&gt;
def calculate_missing_number(n, nums):&lt;br /&gt;
    sum_given = sum(nums)&lt;br /&gt;
    sum_n = (n * (n+1)) // 2&lt;br /&gt;
    missing_num = sum_n - sum_given&lt;br /&gt;
    return missing_num&lt;br /&gt;
&lt;br /&gt;
def display_missing_number(missing_num):&lt;br /&gt;
    print(missing_num)&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, nums):&lt;br /&gt;
    if not isinstance(n, int):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif len(nums) != n:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif any(num &amp;lt; 1 or num &amp;gt; n for num in nums):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introdu un nr. N urmat de N numere:&amp;quot;))&lt;br /&gt;
    nums = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, nums):&lt;br /&gt;
        missing_num = calculate_missing_number(n, nums)&lt;br /&gt;
        display_missing_number(missing_num)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod rezolvă problema găsirii unui număr lipsă într-o secvență de numere de la 1 la N.&lt;br /&gt;
&lt;br /&gt;
Funcția `calculate_missing_number` primește două argumente, `n` și `nums`, unde `n` este un întreg care reprezintă lungimea secvenței și `nums` este o listă de întregi care reprezintă secvența. Funcția calculează suma secvenței apelând `sum(nums)` și calculează suma secvenței de la 1 la `n` utilizând formula `(n * (n+1)) // 2`. Numărul lipsă este apoi calculat prin scăderea sumei secvenței date din suma secvenței de la 1 la `n`. Numărul lipsă este returnat de funcție.&lt;br /&gt;
&lt;br /&gt;
Funcția `display_missing_number` primește un singur argument, `missing_num`, care reprezintă numărul lipsă calculat de funcția `calculate_missing_number`. Funcția afișează numărul lipsă.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input` primește doi argumente, `n` și `nums`, și verifică dacă introducerea este validă. Funcția returnează `False` dacă introducerea nu respectă restricțiile necesare și returnează `True` în caz contrar. Restricțiile sunt că `n` trebuie să fie un întreg, `nums` trebuie să fie o listă de lungime `n`, iar toate numerele din listă trebuie să fie între 1 și `n`.&lt;br /&gt;
&lt;br /&gt;
În blocul principal, utilizatorul este invitat să introducă `n` și `nums`. Introducerea este validată apelând funcția `validate_input`. Dacă introducerea este validă, numărul lipsă este calculat prin apelarea funcției `calculate_missing_number` și afișat prin apelarea funcției `display_missing_number`. Dacă introducerea este invalidă, se afișează un mesaj de eroare. Dacă introducerea este validă, se afișează un mesaj de succes.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1255_-_Lipsa&amp;diff=5319</id>
		<title>1255 - Lipsa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1255_-_Lipsa&amp;diff=5319"/>
		<updated>2023-04-29T08:02:27Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n - 1&#039;&#039;&#039; numere naturale distincte de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Să se gaseasca numărul lipsă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n - 1&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va conține pe prima linie numărul căutat.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează numărul lipsă . &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
2 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introdu un nr. N urmat de N numere:&lt;br /&gt;
: 5&lt;br /&gt;
: 5 3 1 2&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1255&lt;br /&gt;
def calculate_missing_number(n, nums):&lt;br /&gt;
    sum_given = sum(nums)&lt;br /&gt;
    sum_n = (n * (n+1)) // 2&lt;br /&gt;
    missing_num = sum_n - sum_given&lt;br /&gt;
    return missing_num&lt;br /&gt;
&lt;br /&gt;
def display_missing_number(missing_num):&lt;br /&gt;
    print(missing_num)&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, nums):&lt;br /&gt;
    if not isinstance(n, int):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif len(nums) != n:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    elif any(num &amp;lt; 1 or num &amp;gt; n for num in nums):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introdu un nr. N urmat de N numere:&amp;quot;))&lt;br /&gt;
    nums = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, nums):&lt;br /&gt;
        missing_num = calculate_missing_number(n, nums)&lt;br /&gt;
        display_missing_number(missing_num)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod rezolvă problema găsirii unui număr lipsă într-o secvență de numere de la 1 la N.&lt;br /&gt;
&lt;br /&gt;
Funcția `calculate_missing_number` primește două argumente, `n` și `nums`, unde `n` este un întreg care reprezintă lungimea secvenței și `nums` este o listă de întregi care reprezintă secvența. Funcția calculează suma secvenței apelând `sum(nums)` și calculează suma secvenței de la 1 la `n` utilizând formula `(n * (n+1)) // 2`. Numărul lipsă este apoi calculat prin scăderea sumei secvenței date din suma secvenței de la 1 la `n`. Numărul lipsă este returnat de funcție.&lt;br /&gt;
&lt;br /&gt;
Funcția `display_missing_number` primește un singur argument, `missing_num`, care reprezintă numărul lipsă calculat de funcția `calculate_missing_number`. Funcția afișează numărul lipsă.&lt;br /&gt;
&lt;br /&gt;
Funcția `validate_input` primește doi argumente, `n` și `nums`, și verifică dacă introducerea este validă. Funcția returnează `False` dacă introducerea nu respectă restricțiile necesare și returnează `True` în caz contrar. Restricțiile sunt că `n` trebuie să fie un întreg, `nums` trebuie să fie o listă de lungime `n`, iar toate numerele din listă trebuie să fie între 1 și `n`.&lt;br /&gt;
&lt;br /&gt;
În blocul principal, utilizatorul este invitat să introducă `n` și `nums`. Introducerea este validată apelând funcția `validate_input`. Dacă introducerea este validă, numărul lipsă este calculat prin apelarea funcției `calculate_missing_number` și afișat prin apelarea funcției `display_missing_number`. Dacă introducerea este invalidă, se afișează un mesaj de eroare. Dacă introducerea este validă, se afișează un mesaj de succes.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1581_-_Max_Suma&amp;diff=5317</id>
		<title>1581 - Max Suma</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1581_-_Max_Suma&amp;diff=5317"/>
		<updated>2023-04-29T07:38:51Z</updated>

		<summary type="html">&lt;p&gt;Sinn Erich: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; şiruri, fiecare şir fiind format din &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale &#039;&#039;&#039;mai mici decat 500&#039;&#039;&#039;. Să se determine cel mai mare număr din fiecare şir. Să se determine &#039;&#039;&#039;suma&#039;&#039;&#039; numerelor fiecărui şir.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul  citeste pe rând &#039;&#039;&#039;n, m şi restul numerelor&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Se vor scrie pe fiecare rând pentru fiecare şir &#039;&#039;&#039;cel mai mare număr&#039;&#039;&#039; din şir şi &#039;&#039;&#039;suma&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &amp;quot;Datele sunt introduse corect.&amp;quot;, apoi pe un rând nou afișează cel mai mare număr din fiecare şir. Să se determine suma numerelor fiecărui şir. &lt;br /&gt;
&lt;br /&gt;
În caz contrar, se va afișa pe ecran: &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
1 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 100&lt;br /&gt;
&lt;br /&gt;
1 ≤ &#039;&#039;&#039;m&#039;&#039;&#039; ≤ 50&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Datele de intrare:&lt;br /&gt;
: Introduceti numarul de siruri:&lt;br /&gt;
: 3 &lt;br /&gt;
: Introduceti numarul maxim de numere dintr-un sir:&lt;br /&gt;
: 5&lt;br /&gt;
: Introduceti sirul de numere separate prin spatiu:&lt;br /&gt;
:15 25 44 66 87&lt;br /&gt;
: Introduceti sirul de numere separate prin spatiu:&lt;br /&gt;
:25 11 44 78 32&lt;br /&gt;
: Introduceti sirul de numere separate prin spatiu:&lt;br /&gt;
:20 59 87 45 99&lt;br /&gt;
; Datele de ieșire:&lt;br /&gt;
:Datele sunt introduse corect.&lt;br /&gt;
:Sirul 0:&lt;br /&gt;
:Cel mai mare numar: 87&lt;br /&gt;
:Suma numerelor: 237&lt;br /&gt;
:Sirul 1:&lt;br /&gt;
:Cel mai mare numar: 78&lt;br /&gt;
:Suma numerelor: 190&lt;br /&gt;
:Sirul 2:&lt;br /&gt;
:Cel mai mare numar: 99&lt;br /&gt;
:Suma numerelor: 310&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1581&lt;br /&gt;
def validate_input(n, m):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifica daca valorile introduse pentru n si m respecta&lt;br /&gt;
    restricțiile impuse.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 50):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def max_and_sum(sir):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Gaseste cel mai mare numar din sir si suma tuturor numerelor.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    max_numar = max(sir)&lt;br /&gt;
    suma = sum(sir)&lt;br /&gt;
    return max_numar, suma&lt;br /&gt;
&lt;br /&gt;
def print_result(max_numar, suma, i):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Afiseaza rezultatele pentru sirul cu indicele i.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    print(f&amp;quot;Sirul {i}:&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Cel mai mare numar: {max_numar}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Suma numerelor: {suma}&amp;quot;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def solution_function(n, m, siruri_numere):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Functia de rezolvare a problemei.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i, sir in enumerate(siruri_numere):&lt;br /&gt;
        max_numar, suma = max_and_sum(sir)&lt;br /&gt;
        print_result(max_numar, suma, i)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti numarul de siruri: &amp;quot;))&lt;br /&gt;
    m = int(input(&amp;quot;Introduceti numarul maxim de numere dintr-un sir: &amp;quot;))&lt;br /&gt;
    print(&amp;quot;Datele sunt corecte.&amp;quot;)&lt;br /&gt;
    if not validate_input(n, m):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    siruri_numere = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        sir = input(&amp;quot;Introduceti sirul de numere separate prin spatiu: &amp;quot;)&lt;br /&gt;
        numere = sir.split()&lt;br /&gt;
        numere_int = [int(x) for x in numere]&lt;br /&gt;
        if len(numere_int) &amp;gt; m:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
        siruri_numere.append(numere_int)&lt;br /&gt;
&lt;br /&gt;
    solution_function(n, m, siruri_numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explicatie cod:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Acest cod citeste n siruri de numere separate prin spatiu, apoi pentru fiecare sir de numere calculeaza cel mai mare numar si suma tuturor numerelor din sir.&lt;br /&gt;
&lt;br /&gt;
Functia read_input() citeste numarul de siruri de numere, iar apoi citeste fiecare sir de numere, il transforma intr-o lista de intregi si adauga lista la o lista generala siruri_numere. Aceasta lista este returnata la final.&lt;br /&gt;
&lt;br /&gt;
Functia max_and_sum(sir) primeste un sir de numere si calculeaza cel mai mare numar din sir si suma tuturor numerelor din sir. Pentru aceasta, initializeaza max_numar cu 0 si suma cu 0, apoi parcurge fiecare numar din sir, actualizand valorile max_numar si suma corespunzator. La final, functia returneaza cele doua valori.&lt;br /&gt;
&lt;br /&gt;
Functia print_result(max_numar, suma, index) primeste cel mai mare numar si suma numerelor dintr-un sir, impreuna cu numarul sirului, si le afiseaza.&lt;br /&gt;
&lt;br /&gt;
In main, se citesc sirurile de numere folosind read_input(), apoi se parcurg sirurile folosind enumerate(siruri_numere) pentru a retine si indexul fiecarui sir. Pentru fiecare sir, se calculeaza cel mai mare numar si suma numerelor folosind max_and_sum(sir), iar apoi se afiseaza aceste valori folosind print_result(max_numar, suma, i), unde i este indexul sirului.&lt;/div&gt;</summary>
		<author><name>Sinn Erich</name></author>
	</entry>
</feed>