# Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.4

## **Treść zadania:**

Podaj:

• ile różnych liczb zapisano w pliku `liczby.txt`

• ile liczb powtarza się dokładnie dwa razy w pliku `liczby.txt`

• ile liczb powtarza się dokładnie trzy razy w pliku `liczby.txt`. Dla pliku `przyklad.txt` odpowiedzią jest `10 1 0`.

## **Rozwiązanie:**

Zadanie sprowadza się do kilku podstawowych operacji - użycia `set` do wydobycia niepowtarzających się liczb i następnie wyświetlenie ilości tych, które powtarzają się 2 i 3 razy.

```python
with open("dane/liczby.txt", "r") as f:
    nums = [int(num) for num in f.readlines()]

unique_nums = set(nums)

# counted_nums = {num: nums.count(num) for num in unique_nums}
counted_nums = {}
for num in unique_nums:
    counted_nums[num] = nums.count(num)
```

W pętli, dla każdego unikalnego numeru, wstawiamy do dict'a jego ilość wystąpień w liście `nums` . W komentarzu powyżej użyłem odpowiednika jako [`dict comprehension`](https://peps.python.org/pep-0274/#examples) - zarówno dla list jak i słowników, w wielu przypadkach potrafi skrócić kod o kilka linijek i zapisać operacje nieco zwięźlej :)

```python
repeated_2_nums = [
    num for num, occurences in counted_nums.items() if occurences == 2
]
repeated_3_nums = [
    num for num, occurences in counted_nums.items() if occurences == 3
]
```

Tym razem używamy już `list comprehension` do stworzenia list, które zawierają w sobie cyfry występujące w słowniku `counted_nums` odpowiednio 2 i 3 razy. `counted_nums.items()` przekształca słownik na listę w postaci `[(klucz, wartosc), (klucz, wartosc)]` .

## **Cały program:**

```python
with open("dane/liczby.txt", "r") as f:
    nums = [int(num) for num in f.readlines()]

unique_nums = set(nums)

# counted_nums = {num: nums.count(num) for num in unique_nums}
counted_nums = {}
for num in unique_nums:
    counted_nums[num] = nums.count(num)

repeated_2_nums = [
    num for num, occurences in counted_nums.items() if occurences == 2
]
repeated_3_nums = [
    num for num, occurences in counted_nums.items() if occurences == 3
]

print(f"ilosc roznych liczb: {len(unique_nums)}")
print(f"powtarzaja sie dokladnie 2 razy: {len(repeated_2_nums)}")
print(f"powtarzaja sie dokladnie 3 razy: {len(repeated_3_nums)}")
```

## Wynik:

```python
85
13
1
```

%[https://replit.com/@Onix95/44#4/4_4.py] 

Źródło: [**https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/**](https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/)
