# Informatyka — zadanie 6.4

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2017-05/zad/6.4
> Wersja Markdown strony zadania (dla asystentów AI). Przy cytowaniu podaj matura.lol i link powyżej.

- arkusz: Informatyka · Matura · maj 2017 (rozszerzona)
- rok: 2017
- poziom: rozszerzona
- typ: open
- punkty: 4
- działy: Programowanie i algorytmika, programowanie

## Treść

Zadanie 6.4. (0-4)
Podaj długość najdłuższej linii pionowej (czyli ciągu kolejnych pikseli w tej samej kolumnie
obrazka), złożonej z pikseli tej samej jasności.
Dla danych z pliku przyklad.txt wynikiem jest 198.
Do oceny oddajesz:
• plik tekstowy wyniki6.txt zawierający odpowiedzi do poszczególnych zadań,
odpowiedź do każdego zadania powinna być poprzedzona jego numerem
• plik(i) zawierający(e) kody źródłowe Twoich programów o nazwie(ach):
Wypełnia
egzaminator
Nr zadania
6.1.
6.2.
6.3.
6.4.
Maks. liczba pkt.
2
2
3
4
Uzyskana liczba pkt.
MIN_2R
BRUDNOPIS (nie podlega ocenie)

## Rozwiązanie — maturazai.pl (AI)

## Poprawna odpowiedź

**Najdłuższa linia pionowa o jednolitej jasności: 5 pikseli** (w `dane.txt`).

Dla `przyklad.txt`: 198.

Dla każdej kolumny przeglądamy wszystkie 200 wierszy z góry na dół i utrzymujemy aktualną długość ciągu identycznych wartości ("streak"). Wynikiem jest globalne maksimum tych streaków.

## Sposób 1 - Python (najczytelniejszy)

```python
# Wczytaj obraz jako macierz [200][320]
with open('dane.txt') as f:
obraz = [[int(x) for x in linia.split()] for linia in f]

W, K = len(obraz), len(obraz[0]) # 200, 320
max_dl = 1

for c in range(K):
biezacy = 1
for r in range(1, W):
if obraz[r][c] == obraz[r-1][c]:
biezacy += 1
if biezacy > max_dl:
max_dl = biezacy
else:
biezacy = 1

print(max_dl) # 5

## Sposób 2 - C++ (kolumna-po-kolumnie)

```cpp
#include <iostream>
#include <fstream>
using namespace std;

const int W = 200, K = 320;
int obraz[W][K];

int main() {
ifstream plik("dane.txt");
for (int r = 0; r < W; r++)
for (int c = 0; c < K; c++)
plik >> obraz[r][c];
int max_dl = 1;
for (int c = 0; c < K; c++) {
int biezacy = 1;
for (int r = 1; r < W; r++) {
if (obraz[r][c] == obraz[r-1][c]) {
biezacy++;
if (biezacy > max_dl) max_dl = biezacy;
} else {
biezacy = 1;
}
}
}
cout << max_dl << endl; // 5
return 0;
}

## Sposób 3 - Pascal

```pascal
program NajdluzszaLinia;
var
obraz: array[1 200, 1 320] of Integer;
r, c, biezacy, max_dl: Integer;
f: TextFile;
begin
AssignFile(f, 'dane.txt'); Reset(f);
for r := 1 to 200 do
for c := 1 to 320 do Read(f, obraz[r, c]);
CloseFile(f);
max_dl := 1;
for c := 1 to 320 do
begin
biezacy := 1;
for r := 2 to 200 do
if obraz[r, c] = obraz[r-1, c] then
begin
Inc(biezacy);
if biezacy > max_dl then max_dl := biezacy;
end
else
biezacy := 1;
end;
Writeln(max_dl); // 5
end.

## Reference algorytmiczny - najdłuższy podciąg jednakowych

> Reference - Run-Length Encoding (najdłuższy run):
> - Przeglądaj sekwencję jeden raz, utrzymując zmienną "biezacy" liczącą długość bieżącego ciągu.
> - Gdy element się ZMIENIA, resetuj biezacy = 1; gdy się POWTARZA, zwiększaj.
> - Po każdym kroku aktualizuj globalne maksimum.
> - Złożoność: O(n) na sekwencję.
> - Dla obrazu 200×320 = 64 000 pikseli: O(W · K) = O(64 000) operacji. Szybko.

## Schemat oceniania CKE

> Klucz CKE (zadanie 6.4, max 4 pkt):
> - **4 pkt** - prawidłowa odpowiedź: **5**.
> - **2 pkt** - odpowiedź **4** lub **6** (off-by-one error: liczone końce/granice przedziału lub błędna inicjalizacja).
> - **0 pkt** - inna błędna odpowiedź lub brak.
> - **UWAGA:** Nie przyznaje się 3 pkt i 1 pkt.

## Typowe pułapki

- **Liczenie linii POZIOMYCH zamiast PIONOWYCH** - pionowa = w tej samej KOLUMNIE, idziemy w dół. Częsta pomyłka kierunku iteracji.
- **Inicjalizacja biezacy = 0 vs 1** - pierwszy piksel zaczyna ciąg, więc biezacy = 1. Inicjalizacja = 0 da off-by-one (odpowiedź 4 lub 6 zamiast 5).
- **Reset biezacy = 0 zamiast 1** - gdy element zmienia się, nowa wartość zaczyna NOWY ciąg długości 1, nie 0.
- **Brak aktualizacji max_dl PRZY PIERWSZYM piksele** - można pomylić i pominąć kolumny gdzie wszystkie 200 pikseli są takie same. Inicjalizacja max_dl = 1 lub aktualizacja po każdej iteracji.
- **Indeksowanie 0 vs 1** - w Pascalu od 1, w Python/C++ od 0. Pętla wewnętrzna `for r in range(1, W)` (Python) lub `for r := 2 to 200` (Pascal).
- **dane.txt vs przyklad.txt** - przyklad zwraca 198 (prawie cała kolumna), dane.txt tylko 5 (obraz różnorodny).

## Złożoność obliczeniowa

- Wczytanie: O(W × K) = O(64 000).
- Główna pętla: O(W × K) = O(64 000) operacji.
- **Całkowita: O(W × K)**, liniowa względem rozmiaru obrazu.
- Pamięć: O(W × K) na macierz lub O(W) (jednej kolumny naraz, gdyby trzymać tylko bieżącą kolumnę).

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2017-05/zad/6.4)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2017-05%2Fzad%2F6.4)

## Podobne zadania

- [Zadanie 2](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/2) — Zadanie 2. Zapis symboliczny W pliku symbole.txt zapisano 2000 napisów. Każdy z nich jest zapisany w osobnym wierszu i składa się z dokładnie 12 znaków spośród:
- [Zadanie 7](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/7) — Zadanie 7. Poszukiwanie wody na Marsie W trzech plikach tekstowych o nazwach laziki.txt, obszary.txt, pomiary.txt zapisano informacje zawierające dane o poszuki
- [Zadanie 3](https://matura.lol/question/informatyka-2023-maj-matura-rozszerzona/zad/3) — Zadanie 3. Liczba Pi Pewien matematyk jest zafascynowany liczbą π ≈ 3,14159265 do tego stopnia, że zapisał jej rozwinięcie dziesiętne z dokładnością do 10 000 c
- [Zadanie 3](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/3) — Zadanie 3. Dron Tor lotu pewnego drona składa się z prostych odcinków. Lot rozpoczyna się w punkcie (0, 0), a kończy w punkcie (20000, 0). Dron poza startem i l

_Ostatnia aktualizacja danych: 2026-10-03_
