<?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=1811_-_Aritma</id>
	<title>1811 - Aritma - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1811_-_Aritma"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1811_-_Aritma&amp;action=history"/>
	<updated>2026-05-01T07:46:35Z</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=1811_-_Aritma&amp;diff=10022&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Cerinţa == Shaka, regele zuluşilor, a dat ordin să se realizeze un sistem de comunicaţii bazat pe tobe (tamtam)care să acopere întreaga ţară. Pentru aceasta el a dispus instruirea celor ce vor urma să transmită mesajele. Problema intervenită este aceea că o parte din cursanţi nu pot face distincţie între sunete şi nu pot reda cu fidelitate succesiunea de sunete pe hârtie. S-a făcut următoarea convenţie de notare: un sunet lung va fi reprezentat prin +,...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1811_-_Aritma&amp;diff=10022&amp;oldid=prev"/>
		<updated>2024-06-03T17:03:34Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Shaka, regele zuluşilor, a dat ordin să se realizeze un sistem de comunicaţii bazat pe tobe (tamtam)care să acopere întreaga ţară. Pentru aceasta el a dispus instruirea celor ce vor urma să transmită mesajele. Problema intervenită este aceea că o parte din cursanţi nu pot face distincţie între sunete şi nu pot reda cu fidelitate succesiunea de sunete pe hârtie. S-a făcut următoarea convenţie de notare: un sunet lung va fi reprezentat prin +,...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Shaka, regele zuluşilor, a dat ordin să se realizeze un sistem de comunicaţii bazat pe tobe (tamtam)care să acopere întreaga ţară. Pentru aceasta el a dispus instruirea celor ce vor urma să transmită mesajele. Problema intervenită este aceea că o parte din cursanţi nu pot face distincţie între sunete şi nu pot reda cu fidelitate succesiunea de sunete pe hârtie. S-a făcut următoarea convenţie de notare: un sunet lung va fi reprezentat prin +, unul scurt prin -, iar unul nedecis (receptorul nu e sigur de lungimea sunetului) prin *.&lt;br /&gt;
&lt;br /&gt;
Spre finalul stagiului Shaka a mers să verifice nivelul de pregătire al cursanţilor. Pentru aceasta el a adunat n cursanţi pe care i-a pus să recepţioneze şi să noteze un mesaj format din m sunete. După transmiterea mesajului s-a constatat că mulţi dintre cursanţi au scris şiruri foarte diferite, ceea ce ducea la o alterare semnificativă a mesajului original, chiar dacă nici cel mai slab pregătit cursant nu a fost indecis la mai mult de jumătate din sunete. Supărat Shaka l-a chemat pe instructorul şef şi, ca să-l pedepsească, i-a cerut ca să determine câte mesaje distincte se pot forma din şirurile scrise de cursanţi.&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care determină numărul de mesaje distincte rezultate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul aritma.in conţine pe prima sa linie numerele n şi m separate prin spaţiu, iar pe următoarele n linii şiruri de caractere de lungime m formate numai din simbolurile +, - sau *.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Pe prima linie a fişierului aritma.out se va scrie numărul de mesaje distincte.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;lt; n &amp;lt; 25&lt;br /&gt;
* 1 &amp;lt; m &amp;lt; 19&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; aritma.in&lt;br /&gt;
 3 3&lt;br /&gt;
 +-*&lt;br /&gt;
 +*+&lt;br /&gt;
 -*+&lt;br /&gt;
; aritma.out&lt;br /&gt;
 5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Mesajele rezultate sunt: +--, +-+, +++, +-+, --+, -++. Primele două mesaje sunt rezultate din prima identificare, următoarele două sunt din a doua identificare şi ultimele două din ultimul şir; numai cinci sunt distincte.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def distinct_messages(strings):&lt;br /&gt;
    def backtrack(index):&lt;br /&gt;
        if index == len(strings[0]):&lt;br /&gt;
            messages.add(&amp;quot;&amp;quot;.join(message))&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        # Dacă sunetul este cunoscut, îl adăugăm în mesaj&lt;br /&gt;
        if all(s[index] != &amp;#039;*&amp;#039; for s in strings):&lt;br /&gt;
            message.append(strings[0][index])&lt;br /&gt;
            backtrack(index + 1)&lt;br /&gt;
            message.pop()&lt;br /&gt;
&lt;br /&gt;
        # Dacă sunetul este incert, încercăm toate posibilitățile&lt;br /&gt;
        elif any(s[index] == &amp;#039;*&amp;#039; for s in strings):&lt;br /&gt;
            for sound in [&amp;#039;+&amp;#039;, &amp;#039;-&amp;#039;, &amp;#039;*&amp;#039;]:&lt;br /&gt;
                message.append(sound)&lt;br /&gt;
                backtrack(index + 1)&lt;br /&gt;
                message.pop()&lt;br /&gt;
&lt;br /&gt;
    messages = set()&lt;br /&gt;
    message = []&lt;br /&gt;
    backtrack(0)&lt;br /&gt;
    return len(messages)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citim datele de intrare&lt;br /&gt;
    with open(&amp;quot;aritma.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n, m = map(int, fin.readline().split())&lt;br /&gt;
        strings = [fin.readline().strip() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    # Determinăm numărul de mesaje distincte&lt;br /&gt;
    result = distinct_messages(strings)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;aritma.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AjM</name></author>
	</entry>
</feed>