<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[matura z infy]]></title><description><![CDATA[matura z infy]]></description><link>https://matura-z-infy.the-sowa.com</link><generator>RSS for Node</generator><lastBuildDate>Tue, 05 May 2026 20:56:01 GMT</lastBuildDate><atom:link href="https://matura-z-infy.the-sowa.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.4]]></title><description><![CDATA[Treść zadania:
Podaj napis, który powstanie po wykonaniu wszystkich instrukcji z pliku instrukcje.txt.
Dla pliku przyklad.txt wynikiem jest napis ALANTURING.
Rozwiązanie (i cały program):
Dla każdej operacji sprawdzamy, która instrukcja została wywoł...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-44</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-44</guid><category><![CDATA[Python]]></category><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Sun, 30 Apr 2023 15:12:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/-l0E8BahKc8/upload/53b5988d9cf9b665071601f354696a92.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Podaj napis, który powstanie po wykonaniu wszystkich instrukcji z pliku <code>instrukcje.txt</code>.</p>
<p>Dla pliku <code>przyklad.txt</code> wynikiem jest napis ALANTURING.</p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>Dla każdej operacji sprawdzamy, która instrukcja została wywołana. <code>DOPISZ</code> jest raczej proste :) W przypadku <code>ZMIEN</code> i <code>USUN</code> slice'ujemy aktualny wynik do ostatniego znaku (nie włączając go - <code>:-1</code>). Dla <code>ZMIEN</code> Dodatkowo dodajemy argument instrukcji.<br />Dla instrukcji <code>PRZESUN</code> musimy wyznaczyć nową literę. Można to osiągnąć, odejmując od reprezentacji ASCII oryginalnej litery 64 - gdybyśmy odjęli w tym przypadku 65, cała operacja <code>chr(((ord(argument) - 64) % 26) + 65)</code> nie zmieniłaby nic, w tym przypadku różnica <code>65 - 1</code> to nasze przesunięcie.<br />Ważne jest, aby do metody <code>replace</code>, która zwraca <strong>kopię</strong>, przekazać trzeci parametr mówiący ile wystąpień sekwencji (w naszym przypadku znaku) od lewej należy zastąpić. Dla tego zadania jest to 1.</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/instrukcje.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    operations = [operation.strip() <span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> f.readlines()]

result = <span class="hljs-string">""</span>

<span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> operations:
    instruction, argument = operation.split(<span class="hljs-string">" "</span>)
    <span class="hljs-keyword">if</span> instruction == <span class="hljs-string">"DOPISZ"</span>:
        result += argument
    <span class="hljs-keyword">elif</span> instruction == <span class="hljs-string">"ZMIEN"</span>:
        result = result[:<span class="hljs-number">-1</span>] + argument
    <span class="hljs-keyword">elif</span> instruction == <span class="hljs-string">"USUN"</span>:
        result = result[:<span class="hljs-number">-1</span>]
    <span class="hljs-keyword">elif</span> instruction == <span class="hljs-string">"PRZESUN"</span>:
        new_letter = chr(((ord(argument) - <span class="hljs-number">64</span>) % <span class="hljs-number">26</span>) + <span class="hljs-number">65</span>)
        result = result.replace(argument, new_letter, <span class="hljs-number">1</span>)

print(result)
</code></pre>
<h1 id="heading-wynik">Wynik:</h1>
<p><code>POZNIEJMOWIONOZECZLOWIEKTENNADSZEDLODPOLNOCYODBRAMYPOWROZNICZEJSZEDLPIESZOAOBJUCZONEGOKONIAPROWADZILZAUZDEBYLOPOZNEPOPOLUDNIEIKRAMYPOWROZNIKOWIRYMARZYBYLYJUZZAMKNIETEAULICZKAPUSTABYLOCIEPLOACZLOWIEKTENMIALNASOBIECZARNYPLASZCZNARZUCONYNARAMIONAZWRACALUWAGEZATRZYMALSIEPRZEDGOSPODASTARYNARAKORTPOSTALCHWILEPOSLUCHALGWARUGLOSOWGOSPODAJAKZWYKLEOTEJPORZEBYLAPELNALUDZINIEZNAJOMYNIEWSZEDLDOSTAREGONARAKORTUPOCIAGNALKONIADALEJWDOLULICZKITAMBYLADRUGAKARCZMAMNIEJSZANAZYWALASIEPODLISEMTUBYLOPUSTOKARCZMANIEMIALANAJLEPSZEJSLAWY</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/44-maj-2021">https://replit.com/@Onix95/44-maj-2021</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.3]]></title><description><![CDATA[Treść zadania:
Oblicz, która litera jest najczęściej dopisywana (najczęściej występuje w instrukcji DOPISZ). Podaj tę literę oraz ile razy jest dopisywana. Istnieje tylko jedna taka litera.
Dla pliku przyklad.txt odpowiedzią jest litera U, dopisywana...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-43</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-43</guid><category><![CDATA[Python]]></category><category><![CDATA[matura]]></category><category><![CDATA[2021]]></category><category><![CDATA[informatyka]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Sun, 30 Apr 2023 14:19:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/7bu2umh_abs/upload/fd0330ead02137e94aa103bcbbc0b1e9.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Oblicz, która litera jest najczęściej dopisywana (najczęściej występuje w instrukcji DOPISZ). Podaj tę literę oraz ile razy jest dopisywana. Istnieje tylko jedna taka litera.</p>
<p>Dla pliku <code>przyklad.txt</code> odpowiedzią jest litera U, dopisywana 3 razy.</p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>W <code>list comprehension</code> poza standardowym <code>.strip()</code> odpowiedzialnym w tym przypadku za usunięcie znaku nowej linii rozdzielam również operację od jej argumentu i zostawiam sam argument, np.:</p>
<pre><code class="lang-python"><span class="hljs-string">"DOPISZ E"</span>.split(<span class="hljs-string">" "</span>)[<span class="hljs-number">1</span>]
<span class="hljs-comment"># taki kod zwróci nam samo "E"</span>
</code></pre>
<p>Dodatkowo, przy pomocy <code>if operation.startswith("DOPISZ")</code> odfiltrowuję wszystkie linijki, które nie zaczynają się na <code>DOPISZ</code>.</p>
<p>Jedyne, co pozostało do zrobienia to zliczenie dla każdej liczby ilości jej wystąpień i wypisanie znaku z największą ich liczbą:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> Counter

<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/instrukcje.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    operations = [operation.strip().split(<span class="hljs-string">" "</span>)[<span class="hljs-number">1</span>] <span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> f.readlines() <span class="hljs-keyword">if</span> operation.startswith(<span class="hljs-string">"DOPISZ"</span>)]

print(Counter(operations).most_common(<span class="hljs-number">1</span>))
</code></pre>
<p><code>Counter</code> jest bardzo przydatnym narzędziem umożliwiającym skorzystanie z wbudowanej w bibliotekę standardową abstrakcji. Jego odpowiednik zapisany w postaci pętli w tym przypadku to:</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/instrukcje.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    operations = [operation.strip().split(<span class="hljs-string">" "</span>)[<span class="hljs-number">1</span>] <span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> f.readlines() <span class="hljs-keyword">if</span> operation.startswith(<span class="hljs-string">"DOPISZ"</span>)]

counter = {}

<span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> operations:
    counter[operation] = counter.get(operation, <span class="hljs-number">0</span>) + <span class="hljs-number">1</span>

sorted_pairs = sorted(counter.items(), key=<span class="hljs-keyword">lambda</span> pair: pair[<span class="hljs-number">1</span>], reverse=<span class="hljs-literal">True</span>)
print(sorted_pairs[<span class="hljs-number">0</span>])
</code></pre>
<h1 id="heading-wynik">Wynik:</h1>
<p><code>[('Z', 37)]</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/43-maj-2021">https://replit.com/@Onix95/43-maj-2021</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.2]]></title><description><![CDATA[Treść zadania:
Znajdź najdłuższy ciąg występujących kolejno po sobie instrukcji tego samego rodzaju. Jako odpowiedź podaj rodzaj instrukcji oraz długość tego ciągu. Istnieje tylko jeden taki ciąg.
Dla pliku przyklad.txt odpowiedzią jest: rodzaj instr...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-42</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-42</guid><category><![CDATA[Python]]></category><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Sun, 30 Apr 2023 13:34:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/6ikqZlxluhE/upload/e47401c7b32daa56d180b6d5439be410.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Znajdź najdłuższy ciąg występujących kolejno po sobie instrukcji tego samego rodzaju. Jako odpowiedź podaj rodzaj instrukcji oraz długość tego ciągu. Istnieje tylko jeden taki ciąg.</p>
<p>Dla pliku <code>przyklad.txt</code> odpowiedzią jest: rodzaj instrukcji – DOPISZ, długość ciągu – 5.</p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>W <code>list comprehension</code> poza standardowym <code>.strip()</code> odpowiedzialnym w tym przypadku za usunięcie znaku nowej linii rozdzielam również operację od jej argumentu i zostawiam samą nazwę operacji, np.:</p>
<pre><code class="lang-python"><span class="hljs-string">"DOPISZ E"</span>.split(<span class="hljs-string">" "</span>)[<span class="hljs-number">0</span>]
<span class="hljs-comment"># taki kod zwróci nam samo "DOPISZ"</span>
</code></pre>
<p>Następnie inicjalizuję liczniki - dla największej ilości operacji i dla aktualnej ilości operacji - wraz ze zmiennymi przechowującymi nazwy aktualnej operacji i operacji najczęściej do tej pory spotkanej.<br />Jeżeli w aktualnej iteracji instrukcja (czyli np.: <code>DOPISZ</code>) równa się wcześniej zapisanej <code>current_instruction_name</code> , to inkrementujemy aktualny licznik. W przeciwnym wypadku natrafiliśmy na koniec lokalnego ciągu tej samej operacji. Zatem trzeba sprawdzić, czy licznik lokalnego ciągu jest większy od najdłuższego spotkanego do tej pory. Jeśli tak - mamy nowy najdłuższy ciąg - zastępujemy zatem zmienne.<br />Dlaczego <code>current_operations_count</code> jest ustawiony na <code>1</code> zamiast na <code>0</code> ?<br />W przeciwnym wypadku zostałaby ominięta wtedy jedna operacja, która przerwała wcześniejszy ciąg :D</p>
<pre><code class="lang-python">
<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/instrukcje.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    operations = [operation.strip().split(<span class="hljs-string">" "</span>)[<span class="hljs-number">0</span>]
                  <span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> f.readlines()]

total_operations_count = <span class="hljs-number">0</span>
total_instruction_name = <span class="hljs-literal">None</span>

current_operations_count = <span class="hljs-number">0</span>
current_instruction_name = <span class="hljs-literal">None</span>

<span class="hljs-keyword">for</span> instruction <span class="hljs-keyword">in</span> operations:
    <span class="hljs-keyword">if</span> instruction == current_instruction_name:
        current_operations_count += <span class="hljs-number">1</span>
    <span class="hljs-keyword">else</span>:
        <span class="hljs-keyword">if</span> current_operations_count &gt; total_operations_count:
            total_instruction_name = current_instruction_name
            total_operations_count = current_operations_count
        current_operations_count = <span class="hljs-number">1</span>
        current_instruction_name = instruction


print(<span class="hljs-string">f"<span class="hljs-subst">{total_instruction_name}</span>: <span class="hljs-subst">{total_operations_count}</span>"</span>)
</code></pre>
<h1 id="heading-wynik">Wynik:</h1>
<p><code>ZMIEN: 7</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/42-maj-2021">https://replit.com/@Onix95/42-maj-2021</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 maj (poziom rozszerzony) - zadanie 4.1]]></title><description><![CDATA[Treść zadania:
Pewna firma przygotowuje wyświetlanie napisów złożonych z wielkich liter alfabetu angielskiego. Na początku napis jest pusty (nie zawiera liter). W pliku instrukcje.txt podanych jest 2000 instrukcji, które wykonuje automat do generowan...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-41</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-maj-poziom-rozszerzony-zadanie-41</guid><category><![CDATA[Python]]></category><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Sat, 25 Mar 2023 10:17:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/4_LTR48NBYQ/upload/6bc13bd06c91b506dfb1bbb3e6bac057.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Pewna firma przygotowuje wyświetlanie napisów złożonych z wielkich liter alfabetu angielskiego. Na początku napis jest pusty (nie zawiera liter). W pliku instrukcje.txt podanych jest 2000 instrukcji, które wykonuje automat do generowania napisu. Każda z instrukcji składa się z polecenia, spacji oraz pojedynczego znaku. Polecenia są czterech rodzajów:  </p>
<p>DOPISZ litera – oznacza, że na końcu napisu trzeba dopisać pojedynczą literę;</p>
<p>ZMIEN litera – oznacza, że ostatnią literę aktualnego napisu należy zmienić na podaną literę (możesz założyć, że napis jest niepusty);</p>
<p>USUN 1 – oznacza, że należy usunąć ostatnią literę aktualnego napisu (możesz założyć, że napis jest niepusty);</p>
<p>PRZESUN litera – oznacza, że pierwsze od lewej wystąpienie podanej litery w napisie należy zamienić na następną literę w alfabecie (jeśli litera to A, to należy zamienić na B, jeśli B, to na C itd.) Literę Z należy zamienić na A. Jeśli litera nie występuje w napisie, nie należy nic robić.</p>
<p>Oblicz całkowitą długość napisu po wykonaniu wszystkich instrukcji z pliku <code>instrukcje.txt</code>. Dla pliku przyklad.txt długością napisu jest liczba 10.</p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>Dla każdej linii pozbywamy się znaku nowej linii (<code>\n</code>). Deklarujemy licznik <code>operations_count</code> i dla każdej linii w liście sprawdzamy, jaka operacja ma zostać wykonana. Jeśli operacja zaczyna się na <code>DOPISZ</code> - dodajemy 1. Jeśli zaś <code>USUN</code> , odejmujemy. Korzystamy z metody <code>startswith</code> , żeby pominąć parametr operacji (np.: literę).</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/instrukcje.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    operations = [operation.strip() <span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> f.readlines()]

operations_count = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> operation <span class="hljs-keyword">in</span> operations:
    <span class="hljs-keyword">if</span> operation.startswith(<span class="hljs-string">"DOPISZ"</span>):
        operations_count += <span class="hljs-number">1</span>
    <span class="hljs-keyword">elif</span> operation.startswith(<span class="hljs-string">"USUN"</span>):
        operations_count -= <span class="hljs-number">1</span>

print(operations_count)
</code></pre>
<h1 id="heading-wynik">Wynik:</h1>
<p><code>517</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/41-maj-2021">https://replit.com/@Onix95/41-maj-2021</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-maj-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 czerwiec (poziom rozszerzony) - zadanie 4.4]]></title><description><![CDATA[Treść zadania:
Ostatnie z haseł zostało ukryte w cyfrach zapisanych w pliku napisy.txt. Aby je odczytać, należy cyfry z każdego wiersza pogrupować po dwie, pomijając ostatnią, jeśli w wierszu jest nieparzysta liczba cyfr. Jeżeli liczba utworzona prze...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-44</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-44</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Sat, 18 Feb 2023 17:59:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/QZePScKPb2Q/upload/32ae5eff6973872275ec8ffb4a3f14ff.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Ostatnie z haseł zostało ukryte w cyfrach zapisanych w pliku napisy.txt. Aby je odczytać, należy cyfry z każdego wiersza pogrupować po dwie, pomijając ostatnią, jeśli w wierszu jest nieparzysta liczba cyfr. Jeżeli liczba utworzona przez parę cyfr jest mniejsza od 65 lub większa od 90, to ją pomijamy, w przeciwnym przypadku taką liczbę zamieniamy na znak o kodzie ASCII odpowiadającym tej liczbie. Poszukiwanie hasła kończy się po otrzymaniu trzech kolejnych znaków „X”. Odczytaj z pliku tak ukryte hasło.</p>
<p>Dla danych z pliku przyklad.txt wynikiem jest: <strong>NAPISANIEMATURYXXX</strong></p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>Dla każdej linii wybieramy tylko te znaki, które są cyframi. Następnie, jeśli hasło kończy się na 3 znaki X (warunek zadania) możemy stwierdzić, że zakończyliśmy szukanie hasła - to nasz warunek bazowy.</p>
<p>W przeciwnym wypadku, dla każdej pary (robimy to przy pomocy podania <code>2</code> , jako trzeciego parametru funkcji <code>range</code>, co pozwala nam na "przeskakiwanie" par) sprawdzamy, czy wcześniej wspomniane znaki mieszczą się w zakresie <code>65 &lt;= 90</code>.</p>
<p>Jeśli tak, dopisujemy je do hasła, a po skończeniu pętli wypisujemy je na ekran!</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/napisy.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    lines = [line.strip() <span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> f.readlines()]

password = <span class="hljs-string">""</span>

<span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> lines:
    digits = <span class="hljs-string">""</span>.join(character <span class="hljs-keyword">for</span> character <span class="hljs-keyword">in</span> line <span class="hljs-keyword">if</span> character.isdigit())

    <span class="hljs-keyword">if</span> password.endswith(<span class="hljs-string">"XXX"</span>):
        <span class="hljs-keyword">break</span>

    <span class="hljs-keyword">for</span> index <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, len(digits), <span class="hljs-number">2</span>):
        potential_char = int(digits[index:index+<span class="hljs-number">2</span>])
        <span class="hljs-keyword">if</span> <span class="hljs-number">65</span> &lt;= potential_char &lt;= <span class="hljs-number">90</span>:
            password += chr(potential_char)

print(password)
</code></pre>
<h1 id="heading-wynik"><strong>Wynik:</strong></h1>
<p><code>LITWOOJCZYZNOMOJATYJESTESJAKZDROWIEILECIETRZEBACENICTENTYLKOSIEDOWIEKTOCIESTRACILNATENCZASWOJSKICHWYCILNATASMIEPRZYPIETYSWOJROGBAWOLIDLUGICENTKOWANYKRETYJAKWAZBOAXXX</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/44-czerwiec-2021">https://replit.com/@Onix95/44-czerwiec-2021</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 czerwiec (poziom rozszerzony) - zadanie 4.3]]></title><description><![CDATA[Treść zadania:
Palindromem nazywamy napis, który czytany od początku lub od końca jest taki sam (np. KAJAK). Część napisów zapisanych w wierszach pliku (każdy ma 50 znaków) można w prosty sposób – przez dodanie dokładnie jednego znaku na początku lub...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-43</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-43</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 20 Jan 2023 19:00:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/uTzyuZBRBf0/upload/2a451fbdc0c8780f151b5f6fd204aca0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Palindromem nazywamy napis, który czytany od początku lub od końca jest taki sam (np. KAJAK). Część napisów zapisanych w wierszach pliku (każdy ma 50 znaków) można w prosty sposób – przez dodanie dokładnie jednego znaku na początku lub na końcu napisu – zamienić na palindrom.</p>
<p>Podaj hasło utworzone przez środkowe litery tak utworzonych palindromów.</p>
<p>Dla danych z pliku <code>przyklad.txt</code> wynikiem jest: <strong>INFORMATYKA</strong></p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>Dla każdej linii (po ich wcześniejszym odczytaniu z pliku) tworzymy 2 warianty palindromów:</p>
<ul>
<li><p>pierwszy - z ostatnią literą na początku,</p>
</li>
<li><p>drugi - z pierwszą literą na końcu.</p>
</li>
</ul>
<p>Wyznaczamy środkowy indeks - można byłoby przypisać bezpośrednio liczbę <code>25</code> , ponieważ mamy zapewnienie z zadania, że każdy wiersz ma 50 znaków, a <code>(50 + 1) // 2 = 25</code> , ale jakoś... dziwnie tak :D<br />Następnie jeżeli wariant 1 równa się swojej odwrotności <code>[::-1]</code> (opcjonalnie można byłoby użyć funkcji <code>reversed(variant)</code> ), to dopisujemy znak z indeksu 25 do hasła. Jeśli nie, to sprawdzamy jeszcze wariant 2. Na końcu wypisujemy hasło!</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/napisy.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    lines = [line.strip() <span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> f.readlines()]

password = <span class="hljs-string">""</span>

<span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> lines:
    variant_1 = <span class="hljs-string">f"<span class="hljs-subst">{line[<span class="hljs-number">-1</span>]}</span><span class="hljs-subst">{line}</span>"</span>
    variant_2 = <span class="hljs-string">f"<span class="hljs-subst">{line}</span><span class="hljs-subst">{line[<span class="hljs-number">0</span>]}</span>"</span>

    middle_index = len(variant_1) // <span class="hljs-number">2</span>

    <span class="hljs-keyword">if</span> variant_1 == variant_1[::<span class="hljs-number">-1</span>]:
        password += variant_1[middle_index]
    <span class="hljs-keyword">elif</span> variant_2 == variant_2[::<span class="hljs-number">-1</span>]:
        password += variant_2[middle_index]

print(password)
</code></pre>
<h1 id="heading-wynik"><strong>Wynik:</strong></h1>
<p><code>ZADANIEMATURALNE</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/43-czerwiec-2021#4/4_3.py">https://replit.com/@Onix95/43-czerwiec-2021#4/4_3.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 czerwiec (poziom rozszerzony) - zadanie 4.2]]></title><description><![CDATA[Treść zadania:
W pliku napisy.txt ukryto pewne pięćdziesięcioznakowe hasło w następujący sposób: – w co dwudziestym wierszu (w wierszach o numerach 20, 40, 60, …, 1000), ukryto dokładnie jedną literę hasła;
– ukryta litera w kolejnych wierszach zawsz...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-42</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-42</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 20 Jan 2023 18:31:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Y1pub0rxhvQ/upload/e67655788042b5e158ad5cc5f83b970c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>W pliku <code>napisy.txt</code> ukryto pewne pięćdziesięcioznakowe hasło w następujący sposób: – w co dwudziestym wierszu (w wierszach o numerach 20, 40, 60, …, 1000), ukryto dokładnie jedną literę hasła;</p>
<p>– ukryta litera w kolejnych wierszach zawsze znajduje się na innej pozycji: w 20 wierszu na pierwszej, w 40 wierszu na drugiej, w 60 wierszu na trzeciej, …, w 1000 na pięćdziesiątej. Podaj to hasło.</p>
<p>Dla danych z pliku <code>przyklad.txt</code> wynikiem jest:</p>
<p><strong>UDALOSIEIZDAJEMYEGZAMINYMATURALNEZWIELUPRZEDMIOTOW</strong></p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>Kolejne krótkie zadanie :D Całość sprowadza się do odczytania linii z pliku, a następnie przeiterowaniu przez co dwudziestą linię od dwudziestej (indeks nr 19 - bo liczymy od zera :P ), pobierając znak o indeksie większym o jeden niż ostatnio.</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/napisy.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    lines = [line.strip() <span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> f.readlines()]

password = <span class="hljs-string">""</span>
offset_num = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> lines[<span class="hljs-number">19</span>::<span class="hljs-number">20</span>]:
    password += line[offset_num]
    offset_num += <span class="hljs-number">1</span>

print(password)
</code></pre>
<p>Jeśli nie wiesz, co robi podwójny <code>::</code> przy <code>lines</code>, to jest to tzw. "list slicing". Możesz przeczytać o nim więcej <a target="_blank" href="https://www.geeksforgeeks.org/python-list-slicing/">tutaj</a>. W gruncie rzeczy liczba pierwsza od lewej oznacza indeks, od którego zaczynamy pobierać nasz "kawałek" tablicy, kolejna (pomiędzy dwoma dwukropkami - jak widać, można ją pominąć, zostawiając <code>::</code> ) oznacza indeks, na jakim chcemy się zatrzymać - bez włączania ostatniego, np.:</p>
<pre><code class="lang-python">simple_list = [<span class="hljs-number">0</span>,<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
print(simple_list[<span class="hljs-number">2</span>:<span class="hljs-number">4</span>])
</code></pre>
<p>Da nam cyfry <code>[2,3]</code> - bo zaczynamy od indeksu 2 i kończymy na 4, nie włączając go.</p>
<p>Ostatnia liczba oznacza krok iteracji, w naszym przypadku "co dwudziesty element".</p>
<p>W przypadku:</p>
<pre><code class="lang-python">simple_list = [<span class="hljs-number">0</span>,<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
print(simple_list[::<span class="hljs-number">2</span>])
</code></pre>
<p>Otrzymamy <code>[0, 2, 4]</code> skacząc co drugie pole, a dla:</p>
<pre><code class="lang-python">simple_list = [<span class="hljs-number">0</span>,<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
print(simple_list[<span class="hljs-number">1</span>::<span class="hljs-number">2</span>])
</code></pre>
<p>Otrzymamy <code>[1,3,5]</code> , gdyż zaczęliśmy od indeksu nr 1 :)</p>
<h1 id="heading-wynik"><strong>Wynik:</strong></h1>
<p><code>SZYBKOROZWIAZUJEPROGRAMISTYCZNEZADANIAZINFORMATYKI</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/42-czerwiec-2021#.replit">https://replit.com/@Onix95/42-czerwiec-2021#.replit</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2021 czerwiec (poziom rozszerzony) - zadanie 4.1]]></title><description><![CDATA[Treść zadania:
W pliku napisy.txt znajduje się 1000 wierszy po 50 znaków (dużych liter angielskiego alfabetu oraz cyfr).
Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki4.txt, a każdą odpowiedź popr...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-41</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2021-czerwiec-poziom-rozszerzony-zadanie-41</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2021]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 20 Jan 2023 17:48:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/d0CasEMHDQs/upload/daf8cee33ca44cc9d38a49db88eebd09.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania">Treść zadania:</h2>
<p>W pliku <code>napisy.txt</code> znajduje się 1000 wierszy po 50 znaków (dużych liter angielskiego alfabetu oraz cyfr).</p>
<p>Napisz <strong>program(y)</strong>, który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku <code>wyniki4.txt</code>, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie zadanie.<br /><strong>Uwaga</strong>: Plik <code>przyklad.txt</code> zawiera dane przykładowe spełniające warunki zadania. Odpowiedzi dla danych z pliku przyklad.txt są podane pod pytaniami.</p>
<p>Podaj łączną liczbę cyfr we wszystkich napisach z pliku <code>napisy.txt</code></p>
<p>Dla danych z pliku <code>przyklad.txt</code> wynikiem jest: <strong>46504</strong></p>
<h2 id="heading-rozwiazanie-i-caly-program"><strong>Rozwiązanie (i cały program):</strong></h2>
<p>Zadanie typowo rozgrzewkowe, sprowadza się do odczytania linii z pliku i sprawdzeniu, ile cyfr znajduje się w każdej z nich. można to osiągnąć wywołując metodę <code>.isdigit()</code> :</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/napisy.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    lines = [line.strip() <span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> f.readlines()]


num_counter = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> lines:
    <span class="hljs-keyword">for</span> character <span class="hljs-keyword">in</span> line:
        <span class="hljs-keyword">if</span> character.isdigit():
            num_counter += <span class="hljs-number">1</span>

print(num_counter)
</code></pre>
<h1 id="heading-wynik">Wynik:</h1>
<p><code>11844</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/41-czerwiec-2021#4/4_1.py">https://replit.com/@Onix95/41-czerwiec-2021#4/4_1.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2021-czerwiec-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2022 maj (poziom rozszerzony) - zadanie 4.2]]></title><description><![CDATA[Treść zadania:
Znajdź w pliku liczby.txt:

liczbę, która ma w rozkładzie najwięcej czynników pierwszych (podaj tę liczbę oraz liczbę jej czynników pierwszych)

liczbę, która ma w rozkładzie najwięcej różnych czynników pierwszych (podaj tę liczbę oraz...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2022-maj-poziom-rozszerzony-zadanie-42</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2022-maj-poziom-rozszerzony-zadanie-42</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 06 Jan 2023 13:11:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/3gnf1rhy2fE/upload/409a98bc76ea8a17c008d840878a979a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania">Treść zadania:</h2>
<p>Znajdź w pliku <code>liczby.txt</code>:</p>
<ul>
<li><p>liczbę, która ma w rozkładzie najwięcej czynników pierwszych (podaj tę liczbę oraz liczbę jej czynników pierwszych)</p>
</li>
<li><p>liczbę, która ma w rozkładzie najwięcej różnych czynników pierwszych (podaj tę liczbę oraz liczbę jej różnych czynników pierwszych).</p>
</li>
</ul>
<p><strong>Przykład</strong>: liczba 420=2·2·3·5·7 ma w rozkładzie 5 czynników pierwszych, w tym 4 różne czynniki pierwsze (2, 3, 5, 7).</p>
<p>Odpowiedź dla danych z pliku <code>przyklad.txt</code>: 144 6 210 4</p>
<p>(Liczba 144 ma najwięcej czynników pierwszych; liczba czynników pierwszych liczby 144 wynosi 6. Liczba 210 ma najwięcej <em>różnych</em> czynników pierwszych; liczba <em>różnych</em> czynników pierwszych liczby 210 wynosi 4).</p>
<h2 id="heading-rozwiazanie"><strong>Rozwiązanie:</strong></h2>
<p>Odczytujemy dane z pliku i konwertujemy je na int'y:</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]
</code></pre>
<p>Następnie definiujemy funkcję <code>get_prime_factors</code> , której zadaniem jest zwrócenie listy czynników pierwszych</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_prime_factors</span>(<span class="hljs-params">n: int</span>) -&gt; list[int]:</span>
    current_divider = <span class="hljs-number">2</span>
    factors = []
    <span class="hljs-keyword">while</span> n &gt; <span class="hljs-number">1</span>:
        <span class="hljs-keyword">if</span> n % current_divider == <span class="hljs-number">0</span>:
            factors.append(current_divider)
            n = n / current_divider
        <span class="hljs-keyword">else</span>:
            current_divider += <span class="hljs-number">1</span>

    <span class="hljs-keyword">return</span> factors
</code></pre>
<p>Jej działanie opiera się na podobieństwie z sitem Eratostenesa. Więcej o algorytmie możesz przeczytać <a target="_blank" href="https://www.geeksforgeeks.org/print-all-prime-factors-of-a-given-number/">tutaj</a>.</p>
<p>Z treści zadania wynika:</p>
<p><code>W pliku liczby.txt danych jest 200 różnych liczb całkowitych z zakresu [10, 100000]. Każda z tych liczb zapisana jest w osobnym wierszu.</code> , że liczby są w zakresie [10, 100000], więc można bezpiecznie założyć, że naszymi minimami mogą być 0 i puste listy:</p>
<pre><code class="lang-python">prime_factors = <span class="hljs-number">0</span>
prime_factors_list = []

unique_prime_factors = <span class="hljs-number">0</span>
unique_prime_factors_list = []
</code></pre>
<p>Dla każdej liczby wyznaczamy jej listę czynników pierwszych i tą listę bez duplikatów. Kolejne linijki sprowadzają się do porównania z poprzednimi wynikami i wypisaniem ich na ekran:</p>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    prime_factors_result = get_prime_factors(num)
    unique_prime_factors_result = set(prime_factors_result)
    <span class="hljs-keyword">if</span> len(prime_factors_result) &gt; len(prime_factors_list):
        prime_factors = num
        prime_factors_list = prime_factors_result
    <span class="hljs-keyword">if</span> len(unique_prime_factors_result) &gt; len(unique_prime_factors_list):
        unique_prime_factors = num
        unique_prime_factors_list = unique_prime_factors_result

print(<span class="hljs-string">f"<span class="hljs-subst">{prime_factors}</span> <span class="hljs-subst">{len(prime_factors_list)}</span>"</span>)
print(<span class="hljs-string">f"<span class="hljs-subst">{unique_prime_factors}</span> <span class="hljs-subst">{len(unique_prime_factors_list)}</span>"</span>)
</code></pre>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_prime_factors</span>(<span class="hljs-params">n: int</span>) -&gt; list[int]:</span>
    current_divider = <span class="hljs-number">2</span>
    factors = []
    <span class="hljs-keyword">while</span> n &gt; <span class="hljs-number">1</span>:
        <span class="hljs-keyword">if</span> n % current_divider == <span class="hljs-number">0</span>:
            factors.append(current_divider)
            n = n / current_divider
        <span class="hljs-keyword">else</span>:
            current_divider += <span class="hljs-number">1</span>

    <span class="hljs-keyword">return</span> factors

prime_factors = <span class="hljs-number">0</span>
prime_factors_list = []

unique_prime_factors = <span class="hljs-number">0</span>
unique_prime_factors_list = []

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    prime_factors_result = get_prime_factors(num)
    unique_prime_factors_result = set(prime_factors_result)
    <span class="hljs-keyword">if</span> len(prime_factors_result) &gt; len(prime_factors_list):
        prime_factors = num
        prime_factors_list = prime_factors_result
    <span class="hljs-keyword">if</span> len(unique_prime_factors_result) &gt; len(unique_prime_factors_list):
        unique_prime_factors = num
        unique_prime_factors_list = unique_prime_factors_result

print(<span class="hljs-string">f"<span class="hljs-subst">{prime_factors}</span> <span class="hljs-subst">{len(prime_factors_list)}</span>"</span>)
print(<span class="hljs-string">f"<span class="hljs-subst">{unique_prime_factors}</span> <span class="hljs-subst">{len(unique_prime_factors_list)}</span>"</span>)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<pre><code class="lang-markdown">99792 10
62790 6
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/42-1#4/4_2.py">https://replit.com/@Onix95/42-1#4/4_2.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2022-maj-poziom-rozszerzony/"><strong>https://arkusze.pl/matura-informatyka-2022-maj-poziom-rozszerzony/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2022 maj (poziom rozszerzony) - zadanie 4.1]]></title><description><![CDATA[Treść zadania:
Podaj, ile jest w pliku liczby.txt takich liczb, których cyfry pierwsza i ostatnia są takie same.
Zapisz tę z nich, która występuje w pliku liczby.txt jako pierwsza.
W pliku z danymi jest co najmniej jedna taka liczba.
Odpowiedź dla da...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2022-maj-poziom-rozszerzony-zadanie-41</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2022-maj-poziom-rozszerzony-zadanie-41</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Mon, 02 Jan 2023 16:41:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/5700414c87eea25635a80708e0a1a6c7.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania">Treść zadania:</h2>
<p>Podaj, ile jest w pliku <code>liczby.txt takich</code> liczb, których cyfry pierwsza i ostatnia są takie same.</p>
<p>Zapisz tę z nich, która występuje w pliku <code>liczby.txt</code> jako pierwsza.</p>
<p>W pliku z danymi jest co najmniej jedna taka liczba.</p>
<p>Odpowiedź dla danych z pliku <code>przyklad.txt</code>: <code>26 626</code></p>
<p>(26 takich liczb, które mają pierwszą i ostatnią cyfrę taką samą; pierwszą z nich w pliku przykładowym jest 626)</p>
<h2 id="heading-rozwiazanie"><strong>Rozwiązanie:</strong></h2>
<p>Odczytujemy dane z pliku - tym razem nie konwertujemy ich na <code>int</code> , ponieważ będziemy sprawdzać pierwszy i ostatni znak cyfry. Warto pamiętać o usunięciu białych znaków przy pomocy metody <code>strip()</code> .</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [num.strip() <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

total = <span class="hljs-number">0</span>
first_num = <span class="hljs-literal">None</span>
</code></pre>
<p>Następnie w prostej pętli sprawdzamy, czy pierwszy znak równa się ostatniemu. Jeśli tak - zwiększamy licznik. Gdy <code>first_num</code> jest <code>None</code> , możemy uznać, że spotkaliśmy pierwszą taką liczbę w pliku - zapisujemy ją do zmiennej.</p>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> str_num <span class="hljs-keyword">in</span> nums:
    <span class="hljs-keyword">if</span> str_num[<span class="hljs-number">0</span>] == str_num[<span class="hljs-number">-1</span>]:
        total += <span class="hljs-number">1</span>
        <span class="hljs-keyword">if</span> first_num <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
            first_num = str_num

print(<span class="hljs-string">f"<span class="hljs-subst">{total}</span> <span class="hljs-subst">{first_num}</span>"</span>)
</code></pre>
<p>Dlaczego użyłem <code>is</code> zamiast <code>==</code> ? Można poczytać o tym np.: <a target="_blank" href="https://stackoverflow.com/questions/3257919/what-is-the-difference-between-is-none-and-none">tutaj</a>.</p>
<h2 id="heading-caly-program"><strong>Cały program:</strong></h2>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [num.strip() <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

total = <span class="hljs-number">0</span>
first_num = <span class="hljs-literal">None</span>

<span class="hljs-keyword">for</span> str_num <span class="hljs-keyword">in</span> nums:
    <span class="hljs-keyword">if</span> str_num[<span class="hljs-number">0</span>] == str_num[<span class="hljs-number">-1</span>]:
        total += <span class="hljs-number">1</span>
        <span class="hljs-keyword">if</span> first_num <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
            first_num = str_num

print(<span class="hljs-string">f"<span class="hljs-subst">{total}</span> <span class="hljs-subst">{first_num}</span>"</span>)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<p><code>18 93639</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/41-1#4/4_1.py">https://replit.com/@Onix95/41-1#4/4_1.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2022-maj-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2022-maj-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.4]]></title><description><![CDATA[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.
Rozw...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-44</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-44</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 30 Dec 2022 10:22:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/60f39e947e1c69462b2f62d464dbdc52.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Podaj:</p>
<p>• ile różnych liczb zapisano w pliku <code>liczby.txt</code></p>
<p>• ile liczb powtarza się dokładnie dwa razy w pliku <code>liczby.txt</code></p>
<p>• ile liczb powtarza się dokładnie trzy razy w pliku <code>liczby.txt</code>. Dla pliku <code>przyklad.txt</code> odpowiedzią jest <code>10 1 0</code>.</p>
<h2 id="heading-rozwiazanie"><strong>Rozwiązanie:</strong></h2>
<p>Zadanie sprowadza się do kilku podstawowych operacji - użycia <code>set</code> do wydobycia niepowtarzających się liczb i następnie wyświetlenie ilości tych, które powtarzają się 2 i 3 razy.</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

unique_nums = set(nums)

<span class="hljs-comment"># counted_nums = {num: nums.count(num) for num in unique_nums}</span>
counted_nums = {}
<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> unique_nums:
    counted_nums[num] = nums.count(num)
</code></pre>
<p>W pętli, dla każdego unikalnego numeru, wstawiamy do dict'a jego ilość wystąpień w liście <code>nums</code> . W komentarzu powyżej użyłem odpowiednika jako <a target="_blank" href="https://peps.python.org/pep-0274/#examples"><code>dict comprehension</code></a> - 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 :)</p>
<pre><code class="lang-python">repeated_2_nums = [
    num <span class="hljs-keyword">for</span> num, occurences <span class="hljs-keyword">in</span> counted_nums.items() <span class="hljs-keyword">if</span> occurences == <span class="hljs-number">2</span>
]
repeated_3_nums = [
    num <span class="hljs-keyword">for</span> num, occurences <span class="hljs-keyword">in</span> counted_nums.items() <span class="hljs-keyword">if</span> occurences == <span class="hljs-number">3</span>
]
</code></pre>
<p>Tym razem używamy już <code>list comprehension</code> do stworzenia list, które zawierają w sobie cyfry występujące w słowniku <code>counted_nums</code> odpowiednio 2 i 3 razy. <code>counted_nums.items()</code> przekształca słownik na listę w postaci <code>[(klucz, wartosc), (klucz, wartosc)]</code> .</p>
<h2 id="heading-caly-program"><strong>Cały program:</strong></h2>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

unique_nums = set(nums)

<span class="hljs-comment"># counted_nums = {num: nums.count(num) for num in unique_nums}</span>
counted_nums = {}
<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> unique_nums:
    counted_nums[num] = nums.count(num)

repeated_2_nums = [
    num <span class="hljs-keyword">for</span> num, occurences <span class="hljs-keyword">in</span> counted_nums.items() <span class="hljs-keyword">if</span> occurences == <span class="hljs-number">2</span>
]
repeated_3_nums = [
    num <span class="hljs-keyword">for</span> num, occurences <span class="hljs-keyword">in</span> counted_nums.items() <span class="hljs-keyword">if</span> occurences == <span class="hljs-number">3</span>
]

print(<span class="hljs-string">f"ilosc roznych liczb: <span class="hljs-subst">{len(unique_nums)}</span>"</span>)
print(<span class="hljs-string">f"powtarzaja sie dokladnie 2 razy: <span class="hljs-subst">{len(repeated_2_nums)}</span>"</span>)
print(<span class="hljs-string">f"powtarzaja sie dokladnie 3 razy: <span class="hljs-subst">{len(repeated_3_nums)}</span>"</span>)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<pre><code class="lang-python"><span class="hljs-number">85</span>
<span class="hljs-number">13</span>
<span class="hljs-number">1</span>
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/44#4/4_4.py">https://replit.com/@Onix95/44#4/4_4.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/"><strong>https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.3]]></title><description><![CDATA[Treść zadania:
Wypisz wszystkie liczby pierwsze z pliku liczby.txt, których odbicia również są liczbami pierwszymi, każdą w oddzielnym wierszu.
Dla pliku przyklad.txt odpowiedź to:
13
131
(odbiciem liczby 13 jest 31 – obie są liczbami pierwszymi, odb...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-43</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-43</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 30 Dec 2022 09:32:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/c549882315971b6457afa1c0a0f0d90a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Wypisz wszystkie liczby pierwsze z pliku <code>liczby.txt</code>, których odbicia również są liczbami pierwszymi, każdą w oddzielnym wierszu.</p>
<p>Dla pliku <code>przyklad.txt</code> odpowiedź to:</p>
<p>13</p>
<p>131</p>
<p>(odbiciem liczby 13 jest 31 – obie są liczbami pierwszymi, odbiciem 131 jest 131)</p>
<h2 id="heading-rozwiazanie"><strong>Rozwiązanie:</strong></h2>
<p>Na początku zdefiniujmy funkcję, która powie nam, czy dana funkcja jest liczbą pierwszą. <a target="_blank" href="https://pl.wikipedia.org/wiki/Liczba_pierwsza"><code>Liczba pierwsza</code></a> , jest liczbą naturalną większą od 1 oraz dzieli się przez 1 i samą siebie.</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">n: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> n &lt; <span class="hljs-number">2</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

    range_limit = int(sqrt(n)) + <span class="hljs-number">1</span>

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, range_limit):
        <span class="hljs-keyword">if</span> n % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<p>Nie ma sensu szukać zatem liczby pierwszej w zbiorze liczb mniejszych od 2. Zakładam, że do funkcji zostanie podana tylko liczba naturalna. Szukanie dzielnika liczby można ograniczyć do zakresu <a target="_blank" href="https://pl.wikipedia.org/wiki/Liczba_pierwsza#Wyznaczanie"><code>pierwiastka kwadratowego</code></a> +1 - dla pewności :)</p>
<p>Następnie dla każdej odczytanej liczby sprawdzamy, czy jest ona i jej odbicie liczbą pierwszą - jeśli tak - wypisujemy ją :)</p>
<pre><code class="lang-python">
<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    reflection = int(str(num)[::<span class="hljs-number">-1</span>])
    <span class="hljs-keyword">if</span> is_prime(num) <span class="hljs-keyword">and</span> is_prime(reflection):
        print(num)
</code></pre>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> math <span class="hljs-keyword">import</span> sqrt


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">n: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> n &lt; <span class="hljs-number">2</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

    range_limit = int(sqrt(n)) + <span class="hljs-number">1</span>

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, range_limit):
        <span class="hljs-keyword">if</span> n % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>


<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    reflection = int(str(num)[::<span class="hljs-number">-1</span>])
    <span class="hljs-keyword">if</span> is_prime(num) <span class="hljs-keyword">and</span> is_prime(reflection):
        print(num)
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/43#4/4_3.py">https://replit.com/@Onix95/43#4/4_3.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/"><strong>https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.2]]></title><description><![CDATA[Treść zadania:
Dla każdej liczby z pliku liczby.txt oblicz wartość bezwzględną różnicy tej liczby i jej odbicia.
Wyznacz taką liczbę n, dla której wartość bezwzględna różnicy tej liczby i jej odbicia jest największa. Podaj tę liczbę oraz wartość bezw...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-42</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-42</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Fri, 30 Dec 2022 09:14:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/b067ee4cc6f0d3d739c573f4e8ca4a25.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Dla każdej liczby z pliku <code>liczby.txt</code> oblicz wartość bezwzględną różnicy tej liczby i jej odbicia.</p>
<p>Wyznacz taką liczbę n, dla której wartość bezwzględna różnicy tej liczby i jej odbicia jest największa. Podaj tę liczbę oraz wartość bezwzględną różnicy tej liczby i jej odbicia.</p>
<p>W pliku <code>liczby.txt</code> jest tylko jedna taka liczba.</p>
<p>Dla pliku <code>przyklad.txt</code> odpowiedzią jest 741 594.</p>
<h2 id="heading-rozwiazanie"><strong>Rozwiązanie:</strong></h2>
<p>Z treści zadania wynika, że:</p>
<p><code>W pliku liczby.txt zapisano 100 nieparzystych liczb całkowitych z przedziału [10, 9999]. Liczby w pliku mogą się powtarzać.</code></p>
<p>minimalna liczba wynosi 10, więc można bezpiecznie założyć początkową wartość największej liczby i największej różnicy jako 0:</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/przyklad.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

biggest_num = <span class="hljs-number">0</span>
biggest_diff = <span class="hljs-number">0</span>
</code></pre>
<p>Następnie przy pomocy prostej pętli obliczamy dla każdej liczby jej absolutną różnicę z jej odbiciem i wypisujemy wynik:</p>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    reflection = int(str(num)[::<span class="hljs-number">-1</span>])
    diff = abs(num - reflection)
    <span class="hljs-keyword">if</span> diff &gt; biggest_diff:
        biggest_num = num
        biggest_diff = diff


print(<span class="hljs-string">f"<span class="hljs-subst">{biggest_num}</span> <span class="hljs-subst">{biggest_diff}</span>"</span>)
</code></pre>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

biggest_num = <span class="hljs-number">0</span>
biggest_diff = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    reflection = int(str(num)[::<span class="hljs-number">-1</span>])
    diff = abs(num - reflection)
    <span class="hljs-keyword">if</span> diff &gt; biggest_diff:
        biggest_num = num
        biggest_diff = diff


print(<span class="hljs-string">f"<span class="hljs-subst">{biggest_num}</span> <span class="hljs-subst">{biggest_diff}</span>"</span>)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<p><code>1129 8082</code></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/42">https://replit.com/@Onix95/42</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/"><strong>https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.1]]></title><description><![CDATA[Treść zadania:
Wyznacz odbicia wszystkich liczb z pliku liczby.txt. Wypisz te odbicia, które są podzielne przez 17.
Dla pliku przyklad.txt odpowiedzią jest 51.
Rozwiązanie:
Program jest typowo rozgrzewkowy i mieści się w kilka linijek. Jedyną "trudno...]]></description><link>https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-41</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-informatyka-2022-czerwiec-poziom-rozszerzony-zadanie-41</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Wed, 28 Dec 2022 20:03:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/6fa279b9c5b06cd7068f7c625e01ccb1.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania"><strong>Treść zadania:</strong></h2>
<p>Wyznacz odbicia wszystkich liczb z pliku <code>liczby.txt</code>. Wypisz te <em>odbicia</em>, które są podzielne przez 17.</p>
<p>Dla pliku <code>przyklad.txt</code> odpowiedzią jest 51.</p>
<h2 id="heading-rozwiazanie">Rozwiązanie:</h2>
<p>Program jest typowo rozgrzewkowy i mieści się w kilka linijek. Jedyną "trudnością" może być odwrócenie cyfry :)</p>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> f:
    nums = [int(num) <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> f.readlines()]

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    reflection = str(num)[::<span class="hljs-number">-1</span>]
    <span class="hljs-keyword">if</span> int(reflection) % <span class="hljs-number">17</span> == <span class="hljs-number">0</span>:
        print(reflection)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<pre><code class="lang-markdown">1156
102
51
765
119
119
731
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/41#4/4_1.py">https://replit.com/@Onix95/41#4/4_1.py</a></div>
<p> </p>
<p>Źródło: <a target="_blank" href="https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/">https://arkusze.pl/matura-informatyka-2022-czerwiec-poziom-rozszerzony/</a></p>
]]></content:encoded></item><item><title><![CDATA[Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.4]]></title><description><![CDATA[Treść zadania:
Dla każdej liczby z pliku liczby.txt znajdź jej reprezentację w systemie szesnastkowym. Dla każdej cyfry szesnastkowej podaj, ile razy występuje ona łącznie w zapisach szesnastkowych wszystkich liczb z pliku liczby.txt.
Rozwiązanie:
Na...]]></description><link>https://matura-z-infy.the-sowa.com/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony-zadanie-34</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony-zadanie-34</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Wed, 28 Dec 2022 19:22:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/95bd2293bd1437194f51956d9d751d26.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania">Treść zadania:</h2>
<p>Dla każdej liczby z pliku <code>liczby.txt</code> znajdź jej reprezentację w systemie szesnastkowym. Dla każdej cyfry szesnastkowej podaj, ile razy występuje ona łącznie w zapisach szesnastkowych wszystkich liczb z pliku <code>liczby.txt</code>.</p>
<h2 id="heading-rozwiazanie">Rozwiązanie:</h2>
<p>Najpierw odczytajmy liczby w systemie dziesiętnym z pliku:</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby_przyklad.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> file:
    nums = [int(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> file.readlines()]
</code></pre>
<p>Następnie przekształcamy liczbę z systemu dziesiętnego na szesnastkowy, pamiętając, żeby usunąć przedrostek <code>0x</code> - domyślnie funkcja <code>hex</code> dodaje go przed wlaściwą liczbą, np.: <code>0x123</code> . Metoda upper spowoduje zamienienie małych liter na duże, np.: <code>a -&gt; A</code> itd. Wszystkie te przekształcenia można byłoby przerzucić do momentu, w którym odczytujemy dane z pliku, ale to może poprawić trochę czytelność :)</p>
<pre><code class="lang-python">hex_nums = [hex(n).replace(<span class="hljs-string">"0x"</span>, <span class="hljs-string">""</span>).upper() <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> nums]
</code></pre>
<p>Generujemy słownik z cyframi w systemie szesnastkowym:</p>
<pre><code class="lang-python">hex_digits = <span class="hljs-string">"0123456789ABCDEF"</span>

results = {num: <span class="hljs-number">0</span> <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> hex_digits}
</code></pre>
<p>domyślnie ustawiając im zero, jako wartość :)</p>
<p>Następne linijki to czysta formalność - dla każdej liczby i dla każdej jej cyfry zliczamy jej łączne wystąpienie. <code>results.get(digit, 0)</code> zapewnia pobranie wartości pod danym kluczem, a jeśli ta nie występuje, domyślnie będzie to 0 - tak dla pewności :)</p>
<pre><code class="lang-python">
<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> hex_nums:
    <span class="hljs-keyword">for</span> digit <span class="hljs-keyword">in</span> num:
        results[digit] = results.get(digit, <span class="hljs-number">0</span>) + <span class="hljs-number">1</span>
</code></pre>
<p>Pod kolejne klucze ("0", "1"... , "E", "F") przypisujemy wartość danego klucza + 1, żeby zliczyć wystąpienie kolejnej cyfry.</p>
<p>Teoretycznie od tego momentu mamy już rozwiązanie, ale możemy je jeszcze posortować i wyświetlić w oczekiwanym formacie, zamiast robić to ręcznie:</p>
<pre><code class="lang-python">sorted_results = sorted(results.items(), key=<span class="hljs-keyword">lambda</span> item: item[<span class="hljs-number">0</span>])
<span class="hljs-keyword">for</span> key, value <span class="hljs-keyword">in</span> sorted_results:
    print(<span class="hljs-string">f"<span class="hljs-subst">{key}</span>:<span class="hljs-subst">{value}</span>"</span>)
</code></pre>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby_przyklad.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> file:
    nums = [int(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> file.readlines()]

hex_nums = [hex(n).replace(<span class="hljs-string">"0x"</span>, <span class="hljs-string">""</span>).upper() <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> nums]

hex_digits = <span class="hljs-string">"0123456789ABCDEF"</span>

results = {num: <span class="hljs-number">0</span> <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> hex_digits}

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> hex_nums:
    <span class="hljs-keyword">for</span> digit <span class="hljs-keyword">in</span> num:
        results[digit] = results.get(digit, <span class="hljs-number">0</span>) + <span class="hljs-number">1</span>

sorted_results = sorted(results.items(), key=<span class="hljs-keyword">lambda</span> item: item[<span class="hljs-number">0</span>])
<span class="hljs-keyword">for</span> key, value <span class="hljs-keyword">in</span> sorted_results:
    print(<span class="hljs-string">f"<span class="hljs-subst">{key}</span>:<span class="hljs-subst">{value}</span>"</span>)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<pre><code class="lang-markdown">0:32
1:26
2:37
3:31
4:43
5:25
6:28
7:23
8:38
9:28
A:45
B:33
C:29
D:23
E:44
F:10
</code></pre>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/34#3/3_4.py">https://replit.com/@Onix95/34#3/3_4.py</a></div>
<p> </p>
<p>Źródło arkusza: <a target="_blank" href="https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/"><strong>https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.3]]></title><description><![CDATA[Treść zadania:
Hipoteza Goldbacha głosi, że każda liczba parzysta większa od 2 jest sumą dwóch liczb pierwszych. Nie wiemy, czy ta hipoteza jest prawdziwa dla wszystkich liczb parzystych dodatnich, ale została potwierdzona dla wszystkich liczb „rozsą...]]></description><link>https://matura-z-infy.the-sowa.com/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony-zadanie-33</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony-zadanie-33</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Wed, 28 Dec 2022 18:45:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/29d82a5085ec6ec51d816627cefce16a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania">Treść zadania:</h2>
<p>Hipoteza Goldbacha głosi, że każda liczba parzysta większa od 2 jest sumą dwóch liczb pierwszych. Nie wiemy, czy ta hipoteza jest prawdziwa dla wszystkich liczb parzystych dodatnich, ale została potwierdzona dla wszystkich liczb „rozsądnej wielkości”, zwłaszcza dla nie przekraczających 1018. Oczywiście liczba może mieć więcej niż jeden rozkład na sumę dwóch liczb pierwszych, np. 22 = 19 + 3 = 17 + 5 = 11 + 11. Dla każdej z liczb z pliku <code>liczby.txt</code> rozstrzygnij, na ile różnych sposobów da się ją przedstawić jako sumę dwóch liczb pierwszych.</p>
<p>Podaj:</p>
<p>• liczbę, która ma najwięcej różnych rozkładów na sumę dwóch liczb pierwszych, oraz liczbę takich rozkładów</p>
<p>• liczbę, która ma najmniej różnych rozkładów na sumę dwóch liczb pierwszych, oraz liczbę takich rozkładów.</p>
<p><strong>Uwaga</strong>: przyjmujemy, że dwa rozkłady są różne, jeśli nie zawierają takiej samej pary składników. Przykładowo: rozkłady 22 = 19 + 3 i 22 = 3 + 19 są takie same.</p>
<p>Dla pliku <code>liczby_przyklad.txt</code> odpowiedzią jest: 996 37 4 1 (liczba 996 ma 37 rozkładów, a 4 tylko jeden)</p>
<h2 id="heading-rozwiazanie">Rozwiązanie:</h2>
<p>Na początku zdefiniujmy funkcję, która powie nam, czy dana funkcja jest liczbą pierwszą. <a target="_blank" href="https://pl.wikipedia.org/wiki/Liczba_pierwsza"><code>Liczba pierwsza</code></a> , jest liczbą naturalną większą od 1 oraz dzieli się przez 1 i samą siebie.</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">n: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> n &lt; <span class="hljs-number">2</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

    range_limit = int(sqrt(n)) + <span class="hljs-number">1</span>

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, range_limit):
        <span class="hljs-keyword">if</span> n % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<p>Nie ma sensu szukać zatem liczby pierwszej w zbiorze liczb mniejszych od 2. Zakładam, że do funkcji zostanie podana tylko liczba naturalna. Szukanie dzielnika liczby można ograniczyć do zakresu <a target="_blank" href="https://pl.wikipedia.org/wiki/Liczba_pierwsza#Wyznaczanie"><code>pierwiastka kwadratowego</code></a> +1 - dla pewności :)</p>
<p>Później zdefiniujmy funkcję o nazwie <code>goldbach</code>, która zwróci nam listę z wszystkimi parami liczb pierwszych, których suma wynosi liczbę z parametru. Szukamy par do <code>połowy + 1</code> liczby - gdybyśmy szukali do końca, wartości zaczęłbyby się powtarzać (w odwrotnej kolejności, np.: [3, 5] &lt;=&gt; [5,3] co nie jest różnym składnikiem).</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">goldbach</span>(<span class="hljs-params">n: int</span>) -&gt; list[[int, int]]:</span>
    results = []
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, n // <span class="hljs-number">2</span> + <span class="hljs-number">1</span>):
        difference = n - i
        <span class="hljs-keyword">if</span> is_prime(i) <span class="hljs-keyword">and</span> is_prime(difference):
            results.append([i, difference])

    <span class="hljs-keyword">return</span> results
</code></pre>
<p>Ważnym warunkiem jest sprawdzenie, czy obydwie liczby są liczbami pierwszymi :)</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> file:
    nums = [int(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> file.readlines()]
</code></pre>
<p>Następnie otwieramy plik z danymi i każdy wiersz przekształcamy na <code>int</code>.</p>
<pre><code class="lang-python">unique_nums = set(nums)
even_nums = filter(<span class="hljs-keyword">lambda</span> x: x % <span class="hljs-number">2</span> == <span class="hljs-number">0</span>, unique_nums)
</code></pre>
<p>W dwóch kolejnych linijkach używamy <code>set</code> , co pozwoli nam pozbyć się duplikatów z listy <code>nums</code> a następnie dla zmiennej <code>even_nums</code> filtrujemy listę <code>unique_nums</code> , żeby zawierała tylko wartości parzyste.</p>
<pre><code class="lang-python">goldbach_results = map(
    <span class="hljs-keyword">lambda</span> num: {<span class="hljs-string">"number"</span>: num, <span class="hljs-string">"total_sums"</span>: len(goldbach(num))}, even_nums)

sorted_goldbach_results = sorted(
    goldbach_results, key=<span class="hljs-keyword">lambda</span> res: res[<span class="hljs-string">'total_sums'</span>])

print(<span class="hljs-string">f"lower goldbach result: <span class="hljs-subst">{sorted_goldbach_results[<span class="hljs-number">0</span>]}</span>"</span>)
print(<span class="hljs-string">f"higher goldbach result: <span class="hljs-subst">{sorted_goldbach_results[<span class="hljs-number">-1</span>]}</span>"</span>)
</code></pre>
<p>Następnie dla każdego numeru w <code>even_nums</code> zwracamy <code>dict</code> o strukturze:</p>
<p><code>{"number": num, "total_sums": len(goldbach(num))}</code></p>
<p>gdzie do <code>number</code> jest przypisywany aktualny numer, a do <code>total_sums</code> ilość par, które sumują się do wskazanej liczby pod właściwością <code>number</code>.</p>
<p>Sortujemy wyniki po właściwości <code>total_sums</code>, żeby móc łatwo wydobyć<br /><code>liczbę, która ma najmniej / najwięcej różnych rozkładów na sumę dwóch liczb pierwszych, oraz liczbę takich rozkładów</code> , co robimy w <code>print</code> 'ach :)</p>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> math <span class="hljs-keyword">import</span> sqrt


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">n: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> n &lt; <span class="hljs-number">2</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

    range_limit = int(sqrt(n)) + <span class="hljs-number">1</span>

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, range_limit):
        <span class="hljs-keyword">if</span> n % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">goldbach</span>(<span class="hljs-params">n: int</span>) -&gt; list[[int, int]]:</span>
    results = []
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, n // <span class="hljs-number">2</span> + <span class="hljs-number">1</span>):
        difference = n - i
        <span class="hljs-keyword">if</span> is_prime(i) <span class="hljs-keyword">and</span> is_prime(difference):
            results.append([i, difference])

    <span class="hljs-keyword">return</span> results


<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> file:
    nums = [int(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> file.readlines()]

unique_nums = set(nums)
even_nums = filter(<span class="hljs-keyword">lambda</span> x: x % <span class="hljs-number">2</span> == <span class="hljs-number">0</span>, unique_nums)

goldbach_results = map(
    <span class="hljs-keyword">lambda</span> num: {<span class="hljs-string">"number"</span>: num, <span class="hljs-string">"total_sums"</span>: len(goldbach(num))}, even_nums)

sorted_goldbach_results = sorted(
    goldbach_results, key=<span class="hljs-keyword">lambda</span> res: res[<span class="hljs-string">'total_sums'</span>])

print(<span class="hljs-string">f"lower goldbach result: <span class="hljs-subst">{sorted_goldbach_results[<span class="hljs-number">0</span>]}</span>"</span>)
print(<span class="hljs-string">f"higher goldbach result: <span class="hljs-subst">{sorted_goldbach_results[<span class="hljs-number">-1</span>]}</span>"</span>)
</code></pre>
<p>Wymaga na pewno optymalizacji czasowej, ale na pewno nie można powiedzieć, że "nie działa" :)</p>
<h2 id="heading-wynik">Wynik:</h2>
<p>(liczba | ilość rozkładów)</p>
<p><code>910620 9932</code><br /><code>18676 195</code></p>
<p>Źródło arkusza: <a target="_blank" href="https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/"><strong>https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.2]]></title><description><![CDATA[Treść zadania:
Dla każdej liczby x z pliku liczby.txt sprawdź, czy liczba x – 1 jest liczbą pierwszą. Podaj, ile liczb z pliku liczby.txt po pomniejszeniu o 1 daje liczbę pierwszą.
Dla pliku liczby_przyklad.txt odpowiedzią jest 94.
Rozwiązanie:
Na po...]]></description><link>https://matura-z-infy.the-sowa.com/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony-zadanie-32</link><guid isPermaLink="true">https://matura-z-infy.the-sowa.com/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony-zadanie-32</guid><category><![CDATA[matura]]></category><category><![CDATA[informatyka]]></category><category><![CDATA[2022]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[Paweł]]></dc:creator><pubDate>Sun, 25 Dec 2022 19:11:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/997c63c6bf72d1d5803e7611c213407a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-tresc-zadania">Treść zadania:</h2>
<p>Dla każdej liczby x z pliku <code>liczby.txt</code> sprawdź, czy liczba x – 1 jest liczbą pierwszą. Podaj, ile liczb z pliku <code>liczby.txt</code> po pomniejszeniu o 1 daje liczbę pierwszą.</p>
<p>Dla pliku <code>liczby_przyklad.txt</code> odpowiedzią jest 94.</p>
<h2 id="heading-rozwiazanie">Rozwiązanie:</h2>
<p>Na początku zdefiniujmy funkcję, która powie nam, czy dana funkcja jest liczbą pierwszą. <a target="_blank" href="https://pl.wikipedia.org/wiki/Liczba_pierwsza"><code>Liczba pierwsza</code></a> , jest liczbą naturalną większą od 1 oraz dzieli się przez 1 i samą siebie.</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">n: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> n &lt; <span class="hljs-number">2</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

    range_limit = int(sqrt(n)) + <span class="hljs-number">1</span>

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, range_limit):
        <span class="hljs-keyword">if</span> n % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<p>Nie ma sensu szukać zatem liczby pierwszej w zbiorze liczb mniejszych od 2. Zakładam, że do funkcji zostanie podana tylko liczba naturalna. Szukanie dzielnika liczby można ograniczyć do zakresu <a target="_blank" href="https://pl.wikipedia.org/wiki/Liczba_pierwsza#Wyznaczanie"><code>pierwiastka kwadratowego</code></a> +1 - dla pewności :)</p>
<pre><code class="lang-python"><span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> file:
    nums = [int(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> file.readlines()]
</code></pre>
<p>Następnie otwieramy plik z danymi i każdy wiersz przekształcamy na <code>int</code>.</p>
<pre><code class="lang-python">total = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    <span class="hljs-keyword">if</span> is_prime(num - <span class="hljs-number">1</span>):
        total += <span class="hljs-number">1</span>

print(total)
</code></pre>
<p>Zostaje nam tylko zliczyć, ile liczb, od których zostało odjęte 1, jest liczbami pierwszymi!</p>
<h2 id="heading-caly-program">Cały program:</h2>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> math <span class="hljs-keyword">import</span> sqrt


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">n: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> n &lt; <span class="hljs-number">2</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>

    range_limit = int(sqrt(n)) + <span class="hljs-number">1</span>

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, range_limit):
        <span class="hljs-keyword">if</span> n % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>


<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dane/liczby.txt"</span>, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> file:
    nums = [int(n) <span class="hljs-keyword">for</span> n <span class="hljs-keyword">in</span> file.readlines()]

total = <span class="hljs-number">0</span>

<span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> nums:
    <span class="hljs-keyword">if</span> is_prime(num - <span class="hljs-number">1</span>):
        total += <span class="hljs-number">1</span>

print(total)
</code></pre>
<h2 id="heading-wynik">Wynik:</h2>
<p><code>21</code> liczb - uruchom program poniżej!</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://replit.com/@Onix95/32#3/3_2.py">https://replit.com/@Onix95/32#3/3_2.py</a></div>
<p> </p>
<p>Źródło arkusza: <a target="_blank" href="https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/">https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/</a></p>
]]></content:encoded></item></channel></rss>