<?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=1383_-_Avioane</id>
	<title>1383 - Avioane - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1383_-_Avioane"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1383_-_Avioane&amp;action=history"/>
	<updated>2026-06-17T05:58:33Z</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=1383_-_Avioane&amp;diff=10206&amp;oldid=prev</id>
		<title>RaulOtet: Pagină nouă: “Avioane pe hârtie” este un joc ce se joacă în doi, fiecare jucător având la dispoziţie o foaie de hârtie (de matematică) şi ceva de scris.  Pe foaia ta de matematică, ai desenat un caroiaj cu &lt;code&gt;N&lt;/code&gt; linii şi &lt;code&gt;N&lt;/code&gt; coloane. La un moment al jocului, în acest caroiaj sunt deja plasate &lt;code&gt;M&lt;/code&gt; avioane, numerotate de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;M&lt;/code&gt;. Fiecare avion e format din exact &lt;code&gt;10&lt;/code&gt; celule (o celulă cabina, apoi &lt;code&gt;5&lt;...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1383_-_Avioane&amp;diff=10206&amp;oldid=prev"/>
		<updated>2024-07-31T12:48:04Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: “Avioane pe hârtie” este un joc ce se joacă în doi, fiecare jucător având la dispoziţie o foaie de hârtie (de matematică) şi ceva de scris.  Pe foaia ta de matematică, ai desenat un caroiaj cu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii şi &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; coloane. La un moment al jocului, în acest caroiaj sunt deja plasate &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; avioane, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;. Fiecare avion e format din exact &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; celule (o celulă cabina, apoi &amp;lt;code&amp;gt;5&amp;lt;...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;“Avioane pe hârtie” este un joc ce se joacă în doi, fiecare jucător având la dispoziţie o foaie de hârtie (de matematică) şi ceva de scris.&lt;br /&gt;
&lt;br /&gt;
Pe foaia ta de matematică, ai desenat un caroiaj cu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii şi &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; coloane. La un moment al jocului, în acest caroiaj sunt deja plasate &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; avioane, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;. Fiecare avion e format din exact &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; celule (o celulă cabina, apoi &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; celule aripa mare, o celulă culoar şi &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; celule aripa mică). Avioanele desenate nu se suprapun şi în funcţie de modul în care sunt amplasate pot fi de &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; tipuri:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – cabina orientată spre nord;&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; – cabina orientată spre est.&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; – cabina orientată spre sud;&lt;br /&gt;
* &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; – cabina orientată spre vest.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea identifica un avion pe foaie, toate celulele acoperite de avion sunt marcate cu numărul de ordine al avionului. Poziţiile neacoperite de avioane au valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Adversarul, fără a vedea foaia ta, lansează &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; lovituri. Fiecare lovitură afectează o singură celulă a caroiajului. Dacă loviturile afectează cel puţin una dintre celulele acoperite de un avion, se consideră că avionul a fost avariat. Un avion avariat este considerat avion doborât dacă a fost lovită cabina sa sau cel puțin &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; celule dintre cele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; ale sale.&lt;br /&gt;
&lt;br /&gt;
Dată fiind configuraţia caroiajului şi poziţiile loviturilor lansate de adversar, să se determine:&lt;br /&gt;
&lt;br /&gt;
a. numărul total de avioane desenate în caroiaj;&lt;br /&gt;
&lt;br /&gt;
b. numărul de avioane de fiecare tip;&lt;br /&gt;
&lt;br /&gt;
c. numărul de avioane avariate, fără a fi doborâte;&lt;br /&gt;
&lt;br /&gt;
d. numărul de avioane doborâte.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;avioane.in&amp;lt;/code&amp;gt; conţine pe prima linie numerele naturale &amp;lt;code&amp;gt;N L&amp;lt;/code&amp;gt;, reprezentând dimensiunea caroiajului, respectiv numărul de lovituri lansate de adversar. Pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii se vor găsi câte &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale, reprezentând configuraţia caroiajului, conform specificaţiilor din enunţ. Pe următoarele &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; linii se află câte două numere naturale &amp;lt;code&amp;gt;X Y&amp;lt;/code&amp;gt;, reprezentând linia, respectiv coloana unei celule lovite. Numerele scrise pe aceeaşi linie sunt separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;avioane.out&amp;lt;/code&amp;gt; va conţine pe prima linie numărul total de avioane de pe foaie; pe următoarele &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; linii se vor scrie &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; numere naturale, câte unul pe linie, reprezentând în ordine numărul avioanelor de tip &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, tip &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, tip &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; și respectiv tip &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;. Pe următoarea linie se va scrie numărul de avioane avariate, care nu au fost doborâte, iar pe ultima linie va fi scris numărul de avioane doborâte.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;8 ≤ N ≤ 300&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;N/2 ≤ L ≤ 2*N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Liniile şi respectiv coloanele caroiajului sunt numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;avioane.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 8 5&lt;br /&gt;
 0 0 0 0 0 0 0 0 &lt;br /&gt;
 0 0 0 0 1 1 1 0 &lt;br /&gt;
 0 0 0 0 0 1 0 0 &lt;br /&gt;
 0 0 0 1 1 1 1 1 &lt;br /&gt;
 0 0 2 2 2 1 0 0 &lt;br /&gt;
 0 0 0 2 0 0 0 0 &lt;br /&gt;
 0 2 2 2 2 2 0 0 &lt;br /&gt;
 0 0 0 2 0 0 0 0 &lt;br /&gt;
 6 6&lt;br /&gt;
 5 3&lt;br /&gt;
 3 6&lt;br /&gt;
 7 3&lt;br /&gt;
 8 5&lt;br /&gt;
&amp;lt;code&amp;gt;avioane.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
În matricea de &amp;lt;code&amp;gt;8x8&amp;lt;/code&amp;gt; avem &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; avioane, ambele de tip &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Cabinele sunt în coordonatele &amp;lt;code&amp;gt;(5,6)&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;(8,4)&amp;lt;/code&amp;gt;. Deci pe prima linie în fișierul de ieșire va fi &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; linii numărul avioanelor de fiecare tip: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, fiecare pe linie nouă.&lt;br /&gt;
&lt;br /&gt;
În această reprezentare avem &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; lovituri. Cu cele &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; lovituri am reușit să lovim ambele avioane, fără a lovi cabina sau cel puțin &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; lovituri/avion. Astfel următoarele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; valori din fișierul de ieșire sunt &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În această diagramă nu mai putem adăuga un avion de tip &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; astfel pe ultima linie vom avea valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def process_game(N, M, avioane, L, lovituri):&lt;br /&gt;
    # Initializare matrice&lt;br /&gt;
    matrice = [[0] * N for _ in range(N)]&lt;br /&gt;
    &lt;br /&gt;
    # Plasarea avioanelor în matrice&lt;br /&gt;
    avion_celule = {}&lt;br /&gt;
    avion_tip = {}&lt;br /&gt;
    &lt;br /&gt;
    for avion in avioane:&lt;br /&gt;
        id, tip, linie, coloana = avion&lt;br /&gt;
        avion_celule[id] = []&lt;br /&gt;
        avion_tip[id] = tip&lt;br /&gt;
        &lt;br /&gt;
        if tip == 1:  # cabina spre nord&lt;br /&gt;
            coords = [(linie, coloana), (linie+1, coloana-2), (linie+1, coloana-1), (linie+1, coloana),&lt;br /&gt;
                      (linie+1, coloana+1), (linie+1, coloana+2), (linie+2, coloana), &lt;br /&gt;
                      (linie+3, coloana-1), (linie+3, coloana), (linie+3, coloana+1)]&lt;br /&gt;
        elif tip == 2:  # cabina spre est&lt;br /&gt;
            coords = [(linie, coloana), (linie-2, coloana-1), (linie-1, coloana-1), (linie, coloana-1),&lt;br /&gt;
                      (linie+1, coloana-1), (linie+2, coloana-1), (linie, coloana-2), &lt;br /&gt;
                      (linie-1, coloana-3), (linie, coloana-3), (linie+1, coloana-3)]&lt;br /&gt;
        elif tip == 3:  # cabina spre sud&lt;br /&gt;
            coords = [(linie, coloana), (linie-1, coloana-2), (linie-1, coloana-1), (linie-1, coloana),&lt;br /&gt;
                      (linie-1, coloana+1), (linie-1, coloana+2), (linie-2, coloana),&lt;br /&gt;
                      (linie-3, coloana-1), (linie-3, coloana), (linie-3, coloana+1)]&lt;br /&gt;
        elif tip == 4:  # cabina spre vest&lt;br /&gt;
            coords = [(linie, coloana), (linie-2, coloana+1), (linie-1, coloana+1), (linie, coloana+1),&lt;br /&gt;
                      (linie+1, coloana+1), (linie+2, coloana+1), (linie, coloana+2),&lt;br /&gt;
                      (linie-1, coloana+3), (linie, coloana+3), (linie+1, coloana+3)]&lt;br /&gt;
        &lt;br /&gt;
        for coord in coords:&lt;br /&gt;
            r, c = coord&lt;br /&gt;
            if 0 &amp;lt;= r &amp;lt; N and 0 &amp;lt;= c &amp;lt; N:&lt;br /&gt;
                matrice[r][c] = id&lt;br /&gt;
                avion_celule[id].append((r, c))&lt;br /&gt;
    &lt;br /&gt;
    # Procesarea loviturilor&lt;br /&gt;
    lovituri_set = set(lovituri)&lt;br /&gt;
    &lt;br /&gt;
    avioane_doborate = 0&lt;br /&gt;
    avioane_avariate = 0&lt;br /&gt;
    &lt;br /&gt;
    for id, celule in avion_celule.items():&lt;br /&gt;
        lovituri_in_celule = [celula for celula in celule if celula in lovituri_set]&lt;br /&gt;
        numar_lovituri = len(lovituri_in_celule)&lt;br /&gt;
        cabina_lovita = celule[0] in lovituri_set&lt;br /&gt;
        &lt;br /&gt;
        if numar_lovituri &amp;gt;= 5 or cabina_lovita:&lt;br /&gt;
            avioane_doborate += 1&lt;br /&gt;
        elif numar_lovituri &amp;gt; 0:&lt;br /&gt;
            avioane_avariate += 1&lt;br /&gt;
    &lt;br /&gt;
    # Numărarea tipurilor de avioane&lt;br /&gt;
    tipuri_avioane = {1: 0, 2: 0, 3: 0, 4: 0}&lt;br /&gt;
    for tip in avion_tip.values():&lt;br /&gt;
        tipuri_avioane[tip] += 1&lt;br /&gt;
    &lt;br /&gt;
    return M, tipuri_avioane, avioane_avariate, avioane_doborate&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
N = 10&lt;br /&gt;
M = 2&lt;br /&gt;
avioane = [&lt;br /&gt;
    (1, 1, 2, 2),  # avion 1, tip 1 (nord), cabina la (2, 2)&lt;br /&gt;
    (2, 2, 5, 5)   # avion 2, tip 2 (est), cabina la (5, 5)&lt;br /&gt;
]&lt;br /&gt;
L = 3&lt;br /&gt;
lovituri = [(2, 2), (5, 5), (4, 5)]&lt;br /&gt;
&lt;br /&gt;
total_avioane, tipuri_avioane, avioane_avariate, avioane_doborate = process_game(N, M, avioane, L, lovituri)&lt;br /&gt;
print(f&amp;quot;Numărul total de avioane: {total_avioane}&amp;quot;)&lt;br /&gt;
print(f&amp;quot;Numărul de avioane de fiecare tip: {tipuri_avioane}&amp;quot;)&lt;br /&gt;
print(f&amp;quot;Numărul de avioane avariate, fără a fi doborâte: {avioane_avariate}&amp;quot;)&lt;br /&gt;
print(f&amp;quot;Numărul de avioane doborâte: {avioane_doborate}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RaulOtet</name></author>
	</entry>
</feed>