4327 - Chimie: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinta == Eroul nostru Mateo, studiind Tabelul periodic al elementelor constată că toate elementele chimice sunt aranjate în funcție de numărul lor atomic, sunt grupate în tabel pe 7 rânduri(perioade), iar aceste rânduri au pe ultima coloană(grupa 18) elementele numite și gaze nobile iar cele 7 numere atomice ale acestora sunt: 2(He), 10(Ne), 18(Ar), 36(Kr), 54(Xe), 86(Rn) și 118(Og). Mateo primește un set de elemente chimice și dorește să afle care este d...
 
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Cerinta ==
== Cerinta ==


Eroul nostru Mateo, studiind Tabelul periodic al elementelor constată că toate elementele chimice sunt aranjate în funcție de numărul lor atomic, sunt grupate în tabel pe 7 rânduri(perioade), iar aceste rânduri au pe ultima coloană(grupa 18) elementele numite și gaze nobile iar cele 7 numere atomice ale acestora sunt: 2(He), 10(Ne), 18(Ar), 36(Kr), 54(Xe), 86(Rn) și 118(Og). Mateo primește un set de elemente chimice și dorește să afle care este diferența maximă dintre numărul atomic al gazului nobil aflat pe același rând și numărul atomic al fiecărui element din setul primit și de câte ori apare acel element. Dacă există mai multe elemente distincte cu diferența maximă se va afișa cel cu numărul atomic mai mare, urmat de numărul de apariții al acestuia.
Eroul nostru Mateo, studiind Tabelul periodic al elementelor constată că toate elementele chimice sunt aranjate în funcție de numărul lor atomic, sunt grupate în tabel pe '''7 rânduri(perioade)''', iar aceste rânduri au pe ultima coloană(grupa 18) elementele numite și gaze nobile iar cele 7 numere atomice ale acestora sunt: '''2(He), 10(Ne), 18(Ar), 36(Kr), 54(Xe), 86(Rn) și 118(Og)'''. Mateo primește un set de elemente chimice și dorește să afle care este diferența maximă dintre numărul atomic al gazului nobil aflat pe același rând și numărul atomic al fiecărui element din setul primit și de câte ori apare acel element. Dacă există mai multe elemente distincte cu diferența maximă se va afișa cel cu numărul atomic mai mare, urmat de numărul de apariții al acestuia.


== Date de intrare ==
== Date de intrare ==


Fișierul de intrare chimie.txt conține numere naturale între 1 si 118, reprezentând numerele atomice ale elementelor chimice din setul primit.
Fișierul de intrare '''chimiein.txt''' conține numere naturale între 1 si 118, reprezentând numerele atomice ale elementelor chimice din setul primit.


== Date de iesire ==
== Date de iesire ==


Fișierul de ieșire chimie.txt va conține numărul E, reprezentând numărul atomic al elementului selectat conform enunțului și separat printr-un spațiu, numărul de apariții ap ale acestui număr.
Fișierul de ieșire '''chimieout.txt''' va conține numărul '''E''', reprezentând numărul atomic al elementului selectat conform enunțului și separat printr-un spațiu, numărul de apariții ap ale acestui număr.


== Restrictii si precizari ==
== Restrictii si precizari ==


*în fișierul de intrare pot fi până la 1.000.000 de numere.
*în fișierul de intrare pot fi până la '''1.000.000''' de numere.
*se garantează că în fiecare test va exista cel puțin un element cu număr atomic diferit de cel al gazelor nobile.
*se garantează că în fiecare test va exista cel puțin un element cu număr atomic diferit de cel al gazelor nobile.


== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;chimiein.txt
:79 42 82 24 82 24 42 9 18
:79 42 82 24 82 24 42 9 18
;Iesire
;chimieout.txt
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
:42 2
:42 2


== Exemplul 2 ==
== Exemplul 2 ==
;Intrare
;chimiein.txt
:6 25 78 120 281 300
:6 25 78 120 281 300
;Iesire
;chimieout.txt
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse




== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
<syntaxhighlight lang="python3" line="1">
# Funcție pentru găsirea gazului nobil corespunzător unui număr atomic
def gaz_nobil_perioada(numar_atomic):
def gaz_nobil(numar_atomic):
     gaze_nobile = {2: "He", 10: "Ne", 18: "Ar", 36: "Kr", 54: "Xe", 86: "Rn", 118: "Og"}
     gaze_nobile = [2, 10, 18, 36, 54, 86, 118]
   
     for gaz in gaze_nobile:
     for perioada in range(1, 8):
         if numar_atomic <= gaz:
        nobil_perioada = 18 * (perioada - 1)
             return gaz
         if numar_atomic <= nobil_perioada + 2:
     return -1
             return nobil_perioada + 2, gaze_nobile[nobil_perioada + 2]
   
     return 118, "Og"


# Citire set de numere atomice
def verificare(numere_atomice, rezultat):
with open("chimie.txt", "r") as fin:
     max_numar_atomic, numar_aparitii_max = rezultat
     numere_atomice = list(map(int, fin.read().split()))


# Inițializare variabile pentru a reține rezultatele
    for numar_atomic in numere_atomice:
max_diferenta = -1
        nobil, _ = gaz_nobil_perioada(numar_atomic)
numar_atomic_max = -1
        diferenta = numar_atomic - nobil
        if diferenta == max_numar_atomic:
            numar_aparitii_max -= 1
 
    return numar_aparitii_max == 0
 
# Citire date de intrare
with open("chimiein.txt", "r") as file:
    numere_atomice = list(map(int, file.readline().split()))
 
# Calcul și afișare rezultat
max_numar_atomic = 0
numar_aparitii_max = 0
numar_aparitii_max = 0


# Parcurgere numere atomice
for numar_atomic in numere_atomice:
for numar_atomic in numere_atomice:
     gaz = gaz_nobil(numar_atomic)
     nobil, _ = gaz_nobil_perioada(numar_atomic)
     diferenta = gaz - numar_atomic
     diferenta = numar_atomic - nobil
 
     if diferenta > max_numar_atomic:
    # Actualizare rezultate
         max_numar_atomic = diferenta
     if diferenta > max_diferenta:
         max_diferenta = diferenta
        numar_atomic_max = numar_atomic
         numar_aparitii_max = 1
         numar_aparitii_max = 1
     elif diferenta == max_diferenta:
     elif diferenta == max_numar_atomic:
         numar_aparitii_max += 1
         numar_aparitii_max += 1


# Scriere rezultat în fișier
rezultat = (max_numar_atomic, numar_aparitii_max)
with open("chimie.txt", "w") as fout:
 
     fout.write(f"{numar_atomic_max} {numar_aparitii_max}")
# Scriere rezultat în fișierul de ieșire
with open("chimieout.txt", "w") as file:
     file.write(f"{max_numar_atomic} {numar_aparitii_max}\n")
 
# Verificare rezultat
rezultat_corect = verificare(numere_atomice, rezultat)
print("Rezultat corect:", rezultat_corect)
 
 
</syntaxhighlight>
</syntaxhighlight>



Latest revision as of 11:46, 29 December 2023

Cerinta[edit]

Eroul nostru Mateo, studiind Tabelul periodic al elementelor constată că toate elementele chimice sunt aranjate în funcție de numărul lor atomic, sunt grupate în tabel pe 7 rânduri(perioade), iar aceste rânduri au pe ultima coloană(grupa 18) elementele numite și gaze nobile iar cele 7 numere atomice ale acestora sunt: 2(He), 10(Ne), 18(Ar), 36(Kr), 54(Xe), 86(Rn) și 118(Og). Mateo primește un set de elemente chimice și dorește să afle care este diferența maximă dintre numărul atomic al gazului nobil aflat pe același rând și numărul atomic al fiecărui element din setul primit și de câte ori apare acel element. Dacă există mai multe elemente distincte cu diferența maximă se va afișa cel cu numărul atomic mai mare, urmat de numărul de apariții al acestuia.

Date de intrare[edit]

Fișierul de intrare chimiein.txt conține numere naturale între 1 si 118, reprezentând numerele atomice ale elementelor chimice din setul primit.

Date de iesire[edit]

Fișierul de ieșire chimieout.txt va conține numărul E, reprezentând numărul atomic al elementului selectat conform enunțului și separat printr-un spațiu, numărul de apariții ap ale acestui număr.

Restrictii si precizari[edit]

  • în fișierul de intrare pot fi până la 1.000.000 de numere.
  • se garantează că în fiecare test va exista cel puțin un element cu număr atomic diferit de cel al gazelor nobile.

Exemplul 1[edit]

chimiein.txt
79 42 82 24 82 24 42 9 18
chimieout.txt
Datele introduse corespund restrictiilor impuse
42 2

Exemplul 2[edit]

chimiein.txt
6 25 78 120 281 300
chimieout.txt
Datele introduse nu corespund restrictiilor impuse


Rezolvare[edit]

<syntaxhighlight lang="python3" line="1"> def gaz_nobil_perioada(numar_atomic):

   gaze_nobile = {2: "He", 10: "Ne", 18: "Ar", 36: "Kr", 54: "Xe", 86: "Rn", 118: "Og"}
   
   for perioada in range(1, 8):
       nobil_perioada = 18 * (perioada - 1)
       if numar_atomic <= nobil_perioada + 2:
           return nobil_perioada + 2, gaze_nobile[nobil_perioada + 2]
   
   return 118, "Og"

def verificare(numere_atomice, rezultat):

   max_numar_atomic, numar_aparitii_max = rezultat
   for numar_atomic in numere_atomice:
       nobil, _ = gaz_nobil_perioada(numar_atomic)
       diferenta = numar_atomic - nobil
       if diferenta == max_numar_atomic:
           numar_aparitii_max -= 1
   return numar_aparitii_max == 0
  1. Citire date de intrare

with open("chimiein.txt", "r") as file:

   numere_atomice = list(map(int, file.readline().split()))
  1. Calcul și afișare rezultat

max_numar_atomic = 0 numar_aparitii_max = 0

for numar_atomic in numere_atomice:

   nobil, _ = gaz_nobil_perioada(numar_atomic)
   diferenta = numar_atomic - nobil
   if diferenta > max_numar_atomic:
       max_numar_atomic = diferenta
       numar_aparitii_max = 1
   elif diferenta == max_numar_atomic:
       numar_aparitii_max += 1

rezultat = (max_numar_atomic, numar_aparitii_max)

  1. Scriere rezultat în fișierul de ieșire

with open("chimieout.txt", "w") as file:

   file.write(f"{max_numar_atomic} {numar_aparitii_max}\n")
  1. Verificare rezultat

rezultat_corect = verificare(numere_atomice, rezultat) print("Rezultat corect:", rezultat_corect)


</syntaxhighlight>

Explicatie[edit]

Din fișierul de intrare se citesc 9 numere dintre care 24 și 42 sunt la diferența maximă de 12 față de numărul atomic al gazului nobil de pe același rând, 36 pentru 24 și 54 pentru 42. Numărul 42 este mai mare și apare în fișierul de intrare de două ori.