<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0851_-_Email</id>
	<title>0851 - Email - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0851_-_Email"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0851_-_Email&amp;action=history"/>
	<updated>2026-05-01T07:40:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0851_-_Email&amp;diff=8876&amp;oldid=prev</id>
		<title>Codrut Borcutean: Pagină nouă: O adresă de email este alcătuită din &#039;&#039;&#039;numele de utilizator&#039;&#039;&#039; și &#039;&#039;&#039;numele de domeniu&#039;&#039;&#039;, separate prin simbolul &#039;&#039;&#039;@&#039;&#039;&#039;. De exemplu, &#039;&#039;&#039;gigel@pbinfo.ro&#039;&#039;&#039; este o adresă de email corectă ca structură, chiar dacă inexistentă. == Cerinţa == Se dă o listă de adrese de email corecte ca structură. Să se determine câte adrese de email sunt asociate cu fiecare nume de domeniu == Date de intrare == Fișierul de intrare &#039;&#039;&#039;emailin.txt&#039;&#039;&#039; conține mai multe adrese de e...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0851_-_Email&amp;diff=8876&amp;oldid=prev"/>
		<updated>2024-01-03T15:52:11Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: O adresă de email este alcătuită din &amp;#039;&amp;#039;&amp;#039;numele de utilizator&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;numele de domeniu&amp;#039;&amp;#039;&amp;#039;, separate prin simbolul &amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;. De exemplu, &amp;#039;&amp;#039;&amp;#039;gigel@pbinfo.ro&amp;#039;&amp;#039;&amp;#039; este o adresă de email corectă ca structură, chiar dacă inexistentă. == Cerinţa == Se dă o listă de adrese de email corecte ca structură. Să se determine câte adrese de email sunt asociate cu fiecare nume de domeniu == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;emailin.txt&amp;#039;&amp;#039;&amp;#039; conține mai multe adrese de e...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;O adresă de email este alcătuită din &amp;#039;&amp;#039;&amp;#039;numele de utilizator&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;numele de domeniu&amp;#039;&amp;#039;&amp;#039;, separate prin simbolul &amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;. De exemplu, &amp;#039;&amp;#039;&amp;#039;gigel@pbinfo.ro&amp;#039;&amp;#039;&amp;#039; este o adresă de email corectă ca structură, chiar dacă inexistentă.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă o listă de adrese de email corecte ca structură. Să se determine câte adrese de email sunt asociate cu fiecare nume de domeniu&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;emailin.txt&amp;#039;&amp;#039;&amp;#039; conține mai multe adrese de email, câte una pe o linie.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;emailout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; de nume de domenii diferite. Următoarele &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; linii conțin câte un nume de domeniu, urmat de un spațiu și de numărul de adrese date asociate cu acel domeniu. Numele de domeniu se vor afișa în ordine descrescătoare a numărului de adrese asociate. Dacă există mai multe nume de domenii cu același număr de adrese asociate, se vor afișa în ordine lexicografică.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* fișierul de intrare va conține cel mult &amp;#039;&amp;#039;&amp;#039;1000&amp;#039;&amp;#039;&amp;#039; de adrese distincte, cu cel mult &amp;#039;&amp;#039;&amp;#039;200&amp;#039;&amp;#039;&amp;#039; de domenii distincte;&lt;br /&gt;
* lungimea maximă a unei adrese de email este de &amp;#039;&amp;#039;&amp;#039;50&amp;#039;&amp;#039;&amp;#039; de caractere;&lt;br /&gt;
* numele de domeniu începe după simbolul &amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039; și se termină la sfârșitul adresei;&lt;br /&gt;
* adresa de email nu conține spații sau alte caractere albe.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; emailin.txt&lt;br /&gt;
 gigel@pbinfo.ro&lt;br /&gt;
 gigel@yahoo.com&lt;br /&gt;
 ionel.c@gmail.com&lt;br /&gt;
 gigi@pbinfo.ro&lt;br /&gt;
 vasile@yahoo.com&lt;br /&gt;
 jr@gmail.com&lt;br /&gt;
 qwerty@yahoo.com&lt;br /&gt;
; emailout.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 3&lt;br /&gt;
 yahoo.com 3&lt;br /&gt;
 gmail.com 2&lt;br /&gt;
 pbinfo.ro 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; emailin.txt&lt;br /&gt;
 012345678901234567890123456789012345678901234567891@pbinfo.ro&lt;br /&gt;
 gigel@yahoo.com&lt;br /&gt;
 ionel.c@gmail.com&lt;br /&gt;
 gigi@pbinfo.ro&lt;br /&gt;
 vasile@yahoo.com&lt;br /&gt;
 jr@gmail.com&lt;br /&gt;
 qwerty@yahoo.com&lt;br /&gt;
; emailout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from collections import Counter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def count_domains(emails):&lt;br /&gt;
    # Funcția numără câte adrese de email sunt asociate cu fiecare nume de domeniu.&lt;br /&gt;
&lt;br /&gt;
    # Extragem numele de domeniu din fiecare adresă de email și le numărăm&lt;br /&gt;
    domains = [email.split(&amp;#039;@&amp;#039;)[1] for email in emails]&lt;br /&gt;
    return Counter(domains)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;#039;emailin.txt&amp;#039;, &amp;#039;r&amp;#039;) as fin, open(&amp;#039;emailout.txt&amp;#039;, &amp;#039;w&amp;#039;) as fout:&lt;br /&gt;
        emails = [line.strip() for line in fin]&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă adresele de email respectă restricțiile&lt;br /&gt;
        if len(emails) &amp;gt; 1000 or any(len(email) &amp;gt; 50 for email in emails):&lt;br /&gt;
            fout.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        fout.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Numărăm câte adrese de email sunt asociate cu fiecare nume de domeniu&lt;br /&gt;
        domain_counts = count_domains(emails)&lt;br /&gt;
&lt;br /&gt;
        # Sortăm numele de domeniu în ordine descrescătoare a numărului de adrese asociate&lt;br /&gt;
        sorted_domains = sorted(domain_counts.items(), key=lambda x: (-x[1], x[0]))&lt;br /&gt;
&lt;br /&gt;
        # Scriem numărul de nume de domenii diferite și numărul de adrese asociate cu fiecare domeniu&lt;br /&gt;
        fout.write(str(len(sorted_domains)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
        for domain, count in sorted_domains:&lt;br /&gt;
            fout.write(f&amp;#039;{domain} {count}\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Codrut Borcutean</name></author>
	</entry>
</feed>