{"id":"informatyka-2015-maj-matura-rozszerzona/zad/6.2","paper_id":"informatyka-2015-maj-matura-rozszerzona","number":"6.2","points":2,"ptype":"open","subject":"informatyka","category":"matura","year":2015,"month":"maj","level":"rozszerzona","text":"Kontekst - patrz zadanie 6.1.\n\nW których z miejsc podanych w plikach rozegrano najmniejszą liczbę wyścigów Grand Prix w latach 2000-2012?","answer":null,"answer_text":null,"solution":"## Poprawna odpowiedź\n\n**Indie** - miejsce z najmniejszą liczbą wyścigów Grand Prix w latach 2000-2012.\n\n## Sposób 1 - SQL (GROUP BY + ORDER BY ASC LIMIT 1)\n\n```sql\nSELECT GrandPrix, COUNT(*) AS liczba_wyscigow\nFROM Wyscigi\nGROUP BY GrandPrix\nORDER BY liczba_wyscigow ASC, GrandPrix\nLIMIT 1;\n\n**Wynik:**\nGrandPrix: Indie\nliczba_wyscigow: 2 (2011, 2012)\n\nLub bez LIMIT (gdyby był remis):\n```sql\nSELECT GrandPrix, COUNT(*) AS liczba\nFROM Wyscigi\nGROUP BY GrandPrix\nHAVING COUNT(*) = (SELECT MIN(licz) FROM (SELECT COUNT(*) AS licz FROM Wyscigi GROUP BY GrandPrix));\n\n## Sposób 2 - Python\n\n```python\nimport pandas as pd\nfrom collections import Counter\n\nwyscigi = pd.read_csv('Wyscigi.txt', sep=';', header=None,\nnames=['Id_w', 'Rok', 'GrandPrix'])\n\nlicznik = wyscigi['GrandPrix'].value_counts()\nnajmniej = licznik.min()\nmiejsca = licznik[licznik == najmniej].index.tolist()\n\nprint('Najmniejsza liczba wyścigów:', najmniej)\nprint('Miejsca:', miejsca) # ['Indie']\n\n## Sposób 3 - arkusz kalkulacyjny\n\n**Krok 1:** Wczytaj Wyscigi.txt jako tabelę z kolumnami: Id_w, Rok, GrandPrix.\n\n**Krok 2:** Tabela przestawna (Pivot Table):\n- Wiersze: GrandPrix\n- Wartości: LICZ(Id_w) [count]\n\n**Krok 3:** Posortuj rosnąco wg liczby → pierwszy wiersz to najmniej.\n\nLub formuła:\n- Lista unikalnych miejsc: `=UNIKATOWE(C:C)` (Excel 365) lub ręcznie.\n- Liczba dla każdego: `=LICZ.JEŻELI(C:C; A2)`.\n- Min: `=MIN(B2:B30)` → odpowiednie miejsce.\n\n## Reference informatyczny - GROUP BY + COUNT\n\n> Reference - Agregacja po kolumnie:\n> - **SQL** `GROUP BY` grupuje wiersze po podanej kolumnie.\n> - **COUNT(\\*)** zwraca liczbę wierszy w grupie.\n> - **HAVING** filtruje grupy (nie pojedyncze wiersze - to robi WHERE).\n> - **ORDER BY ASC LIMIT 1** zwraca minimum.\n> - **Counter** w Pythonie: `from collections import Counter; Counter([ ])`.\n\n## Schemat oceniania CKE\n\n> Klucz CKE (zadanie 6.2, max 2 pkt):\n> - **2 pkt** - prawidłowa nazwa miejsca (Indie)\n> - **0 pkt** - niepełna lub błędna albo brak\n> - Nie przyznaje się 1 pkt.\n\n## Typowe pułapki\n\n- **Pominięcie zakresu lat** - w pliku Wyscigi mogą być różne lata, ale zadanie podaje 2000-2012, więc filtruj.\n- W rzeczywistości plik zawiera dokładnie 2000-2012, więc filtr nie zmienia wyniku.\n- **Pomylenie z najwięcej (MAX zamiast MIN)** - uważnie czytaj polecenie.\n- **Pominięcie kropki/duplikatów** - jeśli plik ma dwa wpisy dla tego samego Grand Prix w tym samym roku, COUNT zliczy oba.\n- **Indie vs India** - w pliku spolszczone nazwy.\n- **Pomylenie z pytaniem o kierowców** - pytamy o MIEJSCA, nie kierowców.\n\n## Złożoność obliczeniowa\n\n- GROUP BY: O(N log N) (sortowanie wewnętrzne) lub O(N) z hash.\n- ORDER BY: O(G log G), gdzie G = liczba grup.\n- **Całkowita: O(N log N)** lub O(N) z odpowiednimi indeksami.","image":null,"solution_image":null,"topics":null,"page_from":null,"source":"maturazai","answer_source":null,"answer_text_source":null,"solution_source":"maturazai","text_source":"maturazai","source_label":"Informatyka · Matura · maj 2015 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura","text_html":"<p>Kontekst - patrz zadanie 6.1.</p>\n<p>W których z miejsc podanych w plikach rozegrano najmniejszą liczbę wyścigów Grand Prix w latach 2000-2012?</p>","solutions":[{"source":"maturazai","label":"maturazai.pl (AI)","kind":"text","html":"<h4>Poprawna odpowiedź</h4>\n<p><strong>Indie</strong> - miejsce z najmniejszą liczbą wyścigów Grand Prix w latach 2000-2012.</p>\n<h4>Sposób 1 - SQL (GROUP BY + ORDER BY ASC LIMIT 1)</h4>\n<p>```sql<br>SELECT GrandPrix, COUNT(*) AS liczba_wyscigow<br>FROM Wyscigi<br>GROUP BY GrandPrix<br>ORDER BY liczba_wyscigow ASC, GrandPrix<br>LIMIT 1;</p>\n<p><strong>Wynik:</strong><br>GrandPrix: Indie<br>liczba_wyscigow: 2 (2011, 2012)</p>\n<p>Lub bez LIMIT (gdyby był remis):<br>```sql<br>SELECT GrandPrix, COUNT(*) AS liczba<br>FROM Wyscigi<br>GROUP BY GrandPrix<br>HAVING COUNT(<em>) = (SELECT MIN(licz) FROM (SELECT COUNT(</em>) AS licz FROM Wyscigi GROUP BY GrandPrix));</p>\n<h4>Sposób 2 - Python</h4>\n<p>```python<br>import pandas as pd<br>from collections import Counter</p>\n<p>wyscigi = pd.read_csv(&#x27;Wyscigi.txt&#x27;, sep=&#x27;;&#x27;, header=None,<br>names=[&#x27;Id_w&#x27;, &#x27;Rok&#x27;, &#x27;GrandPrix&#x27;])</p>\n<p>licznik = wyscigi[&#x27;GrandPrix&#x27;].value_counts()<br>najmniej = licznik.min()<br>miejsca = licznik[licznik == najmniej].index.tolist()</p>\n<p>print(&#x27;Najmniejsza liczba wyścigów:&#x27;, najmniej)<br>print(&#x27;Miejsca:&#x27;, miejsca) # [&#x27;Indie&#x27;]</p>\n<h4>Sposób 3 - arkusz kalkulacyjny</h4>\n<p><strong>Krok 1:</strong> Wczytaj Wyscigi.txt jako tabelę z kolumnami: Id_w, Rok, GrandPrix.</p>\n<p><strong>Krok 2:</strong> Tabela przestawna (Pivot Table):</p>\n<ul><li>Wiersze: GrandPrix</li><li>Wartości: LICZ(Id_w) [count]</li></ul>\n<p><strong>Krok 3:</strong> Posortuj rosnąco wg liczby → pierwszy wiersz to najmniej.</p>\n<p>Lub formuła:</p>\n<ul><li>Lista unikalnych miejsc: <code>=UNIKATOWE(C:C)</code> (Excel 365) lub ręcznie.</li><li>Liczba dla każdego: <code>=LICZ.JEŻELI(C:C; A2)</code>.</li><li>Min: <code>=MIN(B2:B30)</code> → odpowiednie miejsce.</li></ul>\n<h4>Reference informatyczny - GROUP BY + COUNT</h4>\n<blockquote>Reference - Agregacja po kolumnie:<br>- <strong>SQL</strong> <code>GROUP BY</code> grupuje wiersze po podanej kolumnie.<br>- <strong>COUNT(\\*)</strong> zwraca liczbę wierszy w grupie.<br>- <strong>HAVING</strong> filtruje grupy (nie pojedyncze wiersze - to robi WHERE).<br>- <strong>ORDER BY ASC LIMIT 1</strong> zwraca minimum.<br>- <strong>Counter</strong> w Pythonie: <code>from collections import Counter; Counter([ ])</code>.</blockquote>\n<h4>Schemat oceniania CKE</h4>\n<blockquote>Klucz CKE (zadanie 6.2, max 2 pkt):<br>- <strong>2 pkt</strong> - prawidłowa nazwa miejsca (Indie)<br>- <strong>0 pkt</strong> - niepełna lub błędna albo brak<br>- Nie przyznaje się 1 pkt.</blockquote>\n<h4>Typowe pułapki</h4>\n<ul><li><strong>Pominięcie zakresu lat</strong> - w pliku Wyscigi mogą być różne lata, ale zadanie podaje 2000-2012, więc filtruj.</li><li>W rzeczywistości plik zawiera dokładnie 2000-2012, więc filtr nie zmienia wyniku.</li><li><strong>Pomylenie z najwięcej (MAX zamiast MIN)</strong> - uważnie czytaj polecenie.</li><li><strong>Pominięcie kropki/duplikatów</strong> - jeśli plik ma dwa wpisy dla tego samego Grand Prix w tym samym roku, COUNT zliczy oba.</li><li><strong>Indie vs India</strong> - w pliku spolszczone nazwy.</li><li><strong>Pomylenie z pytaniem o kierowców</strong> - pytamy o MIEJSCA, nie kierowców.</li></ul>\n<h4>Złożoność obliczeniowa</h4>\n<ul><li>GROUP BY: O(N log N) (sortowanie wewnętrzne) lub O(N) z hash.</li><li>ORDER BY: O(G log G), gdzie G = liczba grup.</li><li><strong>Całkowita: O(N log N)</strong> lub O(N) z odpowiednimi indeksami.</li></ul>"}]}