# Informatyka — zadanie 4.3

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

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

## Treść

Zadanie 4.3. (0-4)
W tym zadaniu rozważmy odległość liter w alfabecie - np. litery A i B są od siebie oddalone
o 1, A i E o 4, F i D o 2, a każda litera od siebie samej jest oddalona o 0. Wypisz wszystkie
słowa, w których każde dwie litery oddalone są od siebie w alfabecie co najwyżej o 10. Słowa
wypisz w kolejności występowania w pliku sygnaly.txt, po jednym w wierszu.
Na przykład CGECF jest takim słowem, ale ABEZA nie jest (odległość A - Z wynosi 25).
MIN_1R
Dla danych z pliku przyklad.txt wynikiem jest :
AAAAAAAAAI
AAAAAAAAAE
AAAAAAAAAC
AAAAAAAAAH
AAAAAAAAAC
AAAAAAAAAI
AAAAAAAAAA
BB
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAB
AAAAAAAAAE
AAAAAAAAAD
AAAAAAAAAI
AAAAAAAAAE
Do oceny oddajesz:
• plik wyniki4.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
4.1.
4.2.
4.3.
Maks. liczba pkt.
3
4
4
Uzyskana liczba pkt.
MIN_1R

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

## Poprawna odpowiedź

**Lista słów** (przykładowe pierwsze z sygnaly.txt):
QQMLKKQNOHPKKPJOLHIPJKLKQIIHQHPNKNQPHNKLKQNIMLQPNLPMHNNIPNJJONQOHHKKQOIHOHHJMOJPMNIPIKION, OO, FH, AE, (cała lista to słowa spełniające warunek max odległość 10 między KAŻDYMI dwiema literami).

## Sposób 1 - kluczowa interpretacja zadania

**UWAGA - kluczowy detal:** warunek dotyczy **KAŻDEJ PARY liter w słowie**, nie tylko sąsiadów!

Dla słowa s, warunek: dla każdego i, j: `|s[i] - s[j]| ≤ 10`.

To równoważne: `max(s) - min(s) ≤ 10` (różnica między największą a najmniejszą literą).

**Przykład:** `ABEZA`:
- min = A, max = Z, różnica = 25. **NIE spełnia** warunku (25 > 10).
- Mimo że sąsiednie litery są blisko siebie (np. A-B, B-E, E-Z=21, Z-A=25), to KAŻDE dwie litery muszą się różnić ≤ 10.

**Przykład:** `CGECF`:
- min = C, max = G, różnica = 4. **Spełnia** (4 ≤ 10).

## Sposób 2 - implementacja Python

```python
wyniki = []
with open('sygnaly.txt', encoding='utf-8') as f:
for linia in f:
s = linia.strip()
if not s:
continue
# Warunek: max(s) - min(s) <= 10
if ord(max(s)) - ord(min(s)) <= 10:
wyniki.append(s)

with open('wyniki4.txt', 'a', encoding='utf-8') as f:
f.write("4.3\n")
for s in wyniki:
f.write(s + '\n')

print(f"Liczba słów: {len(wyniki)}")
print("Pierwsze 5:")
for s in wyniki[:5]:
print(s)

## Sposób 3 - C++

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

bool sprawdz(const string& s) {
if (s.empty()) return false;
char min_c = *min_element(s.begin(), s.end());
char max_c = *max_element(s.begin(), s.end());
return (max_c - min_c) <= 10;
}

int main() {
ifstream fin("sygnaly.txt");
ofstream fout("wyniki4.txt", ios::app);
fout << "4.3\n";
string s;
while (fin >> s) {
if (sprawdz(s)) fout << s << "\n";
}
return 0;
}

## Sposób 4 - Pascal

```pascal
program Wega43;
var fin, fout: TextFile; s: String;
i: Integer; minC, maxC: Char;
begin
AssignFile(fin, 'sygnaly.txt'); Reset(fin);
AssignFile(fout, 'wyniki4.txt'); Append(fout);
Writeln(fout, '4.3');
while not Eof(fin) do begin
Readln(fin, s);
if Length(s) = 0 then Continue;
minC := s[1]; maxC := s[1];
for i := 2 to Length(s) do begin
if s[i] < minC then minC := s[i];
if s[i] > maxC then maxC := s[i];
end;
if (Ord(maxC) - Ord(minC)) <= 10 then Writeln(fout, s);
end;
CloseFile(fin); CloseFile(fout);
end.

## Reference informatyczny - odległość alfabetyczna

> Reference - Min/max w stringu:
> - **Python**: `min(s)`, `max(s)` - leksykograficznie (alfabetycznie).
> - **C++**: `min_element(s.begin(), s.end())`, `max_element( )`.
> - **Pascal**: pętla z porównaniem.
>
> Reference - Równoważność warunków:
> - "Każde dwie litery oddalone ≤ 10" ≡ "max(s) - min(s) ≤ 10".
> - DOWÓD: jeśli max - min ≤ 10, to dla dowolnej pary (a, b): |a-b| ≤ max-min ≤ 10. I odwrotnie - jeśli max-min > 10, to para (min, max) łamie warunek.
>
> Reference - Klucz CKE - pułapka z 2 pkt:
> - **Jeśli porównujemy tylko SĄSIEDNIE litery** (s[i] vs s[i+1]), wynik to 207 słów. To częsta pomyłka.
> - Poprawny wynik (max - min) daje 15 słów dla przyklad.txt.

## Schemat oceniania CKE

> Klucz CKE (zadanie 4.3, max 4 pkt):
> - **4 pkt** - poprawna lista (warunek dla WSZYSTKICH par)
> - **2 pkt** - lista z porównania tylko SĄSIADUJĄCYCH liter (207 słów dla sygnaly.txt)
> - **0 pkt** - błędna lub brak
>
> **Uwaga: NIE PRZYZNAJE SIĘ 3 ani 1 PUNKTU.**

## Typowe pułapki

- **Porównywanie tylko sąsiadów** - KLASYCZNA pułapka. "Każde dwie" = WSZYSTKIE PARY, nie tylko sąsiednie.
- **Wzór `max - min ≤ 10`** - eleganckie i poprawne; alternatywa to podwójna pętla po wszystkich parach (O(L²)).
- **Pomylenie odległości** - A i B oddalone o 1 (nie 2), A i E o 4 (nie 5). Bez offset.
- **Wartość bezwzględna** - `|a-b|`, bo odległość nie ma znaku.
- **`ord('A')`** - kod ASCII A to 65. Dla A do Z: 65-90. Różnica między 'Z' a 'A' = 25.
- **Pominięcie pustego słowa** - sprawdź `if not s` lub `if Length(s) = 0`.

## Złożoność obliczeniowa

- Dla każdego słowa: O(L) (znajdowanie min/max).
- Dla 1000 słów × max 100 znaków: **O(N · L)** = O(100 000) operacji.
- Alternatywa naiwna O(L²) per słowo = O(N · L²) = 10⁷ operacji. Mniej elegancko, ale wciąż mieści się w czasie.

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2018-05/zad/4.3)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2018-05%2Fzad%2F4.3)

## 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_
