Arkusz 2016, matura maj

Liczba PI
W kartezjańskim układzie współrzędnych na płaszczyźnie narysowano kwadrat o boku długości 400 i środku symetrii w punkcie (200;200). Boki kwadratu są równoległe do osi układu współrzędnych. W kwadrat wpisano koło. Następnie wylosowano 10 000 punktów należących do kwadratu. Współrzędne (x,y) punktów zostały zapisane w pliku punkty.txt, każdy punkt w osobnym wierszu. Wiersz ma postać dwóch liczb całkowitych z zakresu <0;400>, rozdzielonych pojedynczym znakiem odstępu.
Korzystając z powyższych danych oraz dostępnych narzędzi informatycznych, wykonaj zadania. Wyniki zapisz w pliku tekstowym wyniki_4.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Wypisz  współrzędne  tych  punktów,  które  należą  do  brzegu  koła  (okręgu),  oraz  podaj  liczbę punktów należących do wnętrza koła (brzeg koła nie należy do wnętrza koła). 
Wskazówka:  
Równanie okręgu o środku w punkcie S = (a, b)i promieniu r > 0 ma postać:
(x-a)^2 + (y-b)^2 = r^2
Informacja:  
W pliku wśród 100 pierwszych punktów 80 należy do wnętrza koła.
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.
Liczba PI
W kartezjańskim układzie współrzędnych na płaszczyźnie narysowano kwadrat o boku długości 400 i środku symetrii w punkcie (200;200). Boki kwadratu są równoległe do osi układu współrzędnych. W kwadrat wpisano koło. Następnie wylosowano 10 000 punktów należących do kwadratu. Współrzędne (x,y) punktów zostały zapisane w pliku punkty.txt, każdy punkt w osobnym wierszu. Wiersz ma postać dwóch liczb całkowitych z zakresu <0;400>, rozdzielonych pojedynczym znakiem odstępu.
Korzystając z powyższych danych oraz dostępnych narzędzi informatycznych, wykonaj zadania. Wyniki zapisz w pliku tekstowym wyniki_4.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Przy  założeniu  równomiernego  rozkładu  punktów  w  kwadracie,  stosunek  liczby  punktów  nₖ należących do koła do liczby punktów n należących do kwadratu jest w przybliżeniu równy stosunkowi pola koła Pₖ do pola kwadratu P: 
nₖ/n≈Pₖ/P
Dla przypomnienia: 
Pₖ=π*r^2
Wyznacz przybliżoną wartość liczby pi, biorąc pod uwagę punkty z pliku punkty.txt: 
• pierwszych 1000 punktów,  
• pierwszych 5000 punktów, 
• wszystkie punkty. 
Wyniki zaokrąglij do 4 miejsc po przecinku. 
Informacja:  
Przybliżona wartość liczby pi dla pierwszych 100 punktów z pliku wynosi 3,2000.
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.
Liczba PI
W kartezjańskim układzie współrzędnych na płaszczyźnie narysowano kwadrat o boku długości 400 i środku symetrii w punkcie (200;200). Boki kwadratu są równoległe do osi układu współrzędnych. W kwadrat wpisano koło. Następnie wylosowano 10 000 punktów należących do kwadratu. Współrzędne (x,y) punktów zostały zapisane w pliku punkty.txt, każdy punkt w osobnym wierszu. Wiersz ma postać dwóch liczb całkowitych z zakresu <0;400>, rozdzielonych pojedynczym znakiem odstępu.
Korzystając z powyższych danych oraz dostępnych narzędzi informatycznych, wykonaj zadania. Wyniki zapisz w pliku tekstowym wyniki_4.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Błąd  bezwzględny  przybliżonej  wartości  liczby  pi,  wyznaczonej  z  n  punktów,  definiujemy  następująco: 
εₙ = |π–piₙ|
gdzie: 
π – wartość liczby pi, będąca wynikiem standardowej funkcji z narzędzia informatycznego, z którego korzystasz; 
piₙ – przybliżona wartość liczby pi wyznaczona z n kolejnych punktów, poczynając od pierwszego punktu z pliku punkty.txt,  np. pi₁₀₀₀ – liczba wyznaczona z pierwszego tysiąca punktów. 
Oblicz nε  dla  n  =  1,  2,  3,  ...,  1700.  Na  podstawie  powyższego  zestawienia  utwórz  wykres  liniowy ilustrujący zmiany dokładności wyznaczanej liczby pi. Zadbaj o czytelność wykresu. 
Wartości  dla ε₁₀₀₀ oraz ε₁₇₀₀  (zaokrąglone  do  czterech  miejsc  po  przecinku)  zapisz  do  pliku  wyniki_4.txt.
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.

Zadanie 5.1 (0-2)

Biblioteka podręczników
Biblioteka podręczników
Z biblioteki podręczników, wypożyczanych na cały rok akademicki, mogą korzystać studenci z miasteczka akademickiego i spoza miasteczka. Każdy student może wypożyczyć wiele różnych książek. W miasteczku studenci mieszkają w pokojach po kilka osób w jednym.
Dane są trzy pliki: studenci.txt, meldunek.txt oraz wypozyczenia.txt, w których zapisano informacje o aktualnie wypożyczonych książkach przez studentów.
Każdy plik ma wiersz nagłówkowy. Dane rozdzielono znakiem tabulacji. Wszystkie dane tekstowe w plikach mają długości nieprzekraczające 60 znaków.
W pliku studenci.txt zapisano dane studentów – jeden student w wierszu. Imiona i nazwiska mogą się powtarzać. W każdym wierszu znajdują się odpowiednio: numer PESEL, nazwisko, imię.
Fragment pliku studenci.txt:
pesel nazwisko imie
92051048757 BAJOREK JAKUB
92051861424 SLOTARZ MARIANNA
Plik meldunek.txt zawiera przypisania studentów z miasteczka akademickiego do wynajętych pokoi. W każdym wierszu znajdują się odpowiednio: numer PESEL studenta oraz identyfikator pokoju.
Fragment pliku meldunek.txt:
pesel id_pok
92051048757 8
92051861424 32
W pliku wypozyczenia.txt zawarto informacje o wypożyczonych podręcznikach. W każdym wierszu zapisano: liczbę porządkową wypożyczenia, numer PESEL wypożyczającego oraz tytuł wypożyczonego podręcznika.
Fragment pliku wypozyczenia.txt:
lp pesel tytul
1 92061083359 FIZYKA TECHNICZNA I
2 94103033254 PROGRAMOWANIE MIKROKONTROLEROW I
Wykorzystując dane zawarte w powyższych plikach i dostępne narzędzia informatyczne, wykonaj zadania. Odpowiedzi zapisz w kolejnych wierszach pliku tekstowego wyniki_5.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Podaj  imię  i  nazwisko  osoby,  która  wypożyczyła  najwięcej  podręczników. Wypisz  tytuły wszystkich książek przez nią wypożyczonych.
1. kwerenda:
SELECT TOP 1 s.imie & " " & s.nazwisko AS Personalia, COUNT(*) AS Il_ksiazek
FROM Wypozyczenia AS w INNER JOIN Studenci AS s ON w.pesel=s.pesel
GROUP BY s.imie & " " & s.nazwisko
ORDER BY 2 DESC;

2. kwerenda:
SELECT s.imie & " " & s.nazwisko AS Personalia, tytul
FROM Wypozyczenia AS w INNER JOIN Studenci AS s ON w.pesel=s.pesel
WHERE s.imie & " " & s.nazwisko="KRZYSZTOF LEWANDOWSKI";

Pobierz rozwiązanie

Zadanie 5.2 (0-2)

Biblioteka podręczników
Biblioteka podręczników
Z biblioteki podręczników, wypożyczanych na cały rok akademicki, mogą korzystać studenci z miasteczka akademickiego i spoza miasteczka. Każdy student może wypożyczyć wiele różnych książek. W miasteczku studenci mieszkają w pokojach po kilka osób w jednym.
Dane są trzy pliki: studenci.txt, meldunek.txt oraz wypozyczenia.txt, w których zapisano informacje o aktualnie wypożyczonych książkach przez studentów.
Każdy plik ma wiersz nagłówkowy. Dane rozdzielono znakiem tabulacji. Wszystkie dane tekstowe w plikach mają długości nieprzekraczające 60 znaków.
W pliku studenci.txt zapisano dane studentów – jeden student w wierszu. Imiona i nazwiska mogą się powtarzać. W każdym wierszu znajdują się odpowiednio: numer PESEL, nazwisko, imię.
Fragment pliku studenci.txt:
pesel nazwisko imie
92051048757 BAJOREK JAKUB
92051861424 SLOTARZ MARIANNA
Plik meldunek.txt zawiera przypisania studentów z miasteczka akademickiego do wynajętych pokoi. W każdym wierszu znajdują się odpowiednio: numer PESEL studenta oraz identyfikator pokoju.
Fragment pliku meldunek.txt:
pesel id_pok
92051048757 8
92051861424 32
W pliku wypozyczenia.txt zawarto informacje o wypożyczonych podręcznikach. W każdym wierszu zapisano: liczbę porządkową wypożyczenia, numer PESEL wypożyczającego oraz tytuł wypożyczonego podręcznika.
Fragment pliku wypozyczenia.txt:
lp pesel tytul
1 92061083359 FIZYKA TECHNICZNA I
2 94103033254 PROGRAMOWANIE MIKROKONTROLEROW I
Wykorzystując dane zawarte w powyższych plikach i dostępne narzędzia informatyczne, wykonaj zadania. Odpowiedzi zapisz w kolejnych wierszach pliku tekstowego wyniki_5.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Podaj średnią liczbę osób zameldowanych w jednym pokoju. Wynik zaokrąglij do 4 miejsc po przecinku
Rozwiązanie w jednej kwerendzie:
SELECT ROUND((SELECT COUNT(pesel) FROM Meldunki)/(SELECT COUNT(*) FROM (SELECT DISTINCT id_pok FROM Meldunki)),4) AS srednia
FROM 1;
FROM 1 występuje tutaj jedynie po to, aby można było taką kwerendę wykonać. Zawartość tej tabeli nas nie interesuje, więc zamiast "1" możemy podać jakąkolwiek inną istniejącą tabelę.
Alternatywnie można rozbić to zapytanie na dwa osobne i wynik policzyć ręcznie, wykonując odpowiednie dzielenie.

Pobierz rozwiązanie

Zadanie 5.3 (0-2)

Biblioteka podręczników
Biblioteka podręczników
Z biblioteki podręczników, wypożyczanych na cały rok akademicki, mogą korzystać studenci z miasteczka akademickiego i spoza miasteczka. Każdy student może wypożyczyć wiele różnych książek. W miasteczku studenci mieszkają w pokojach po kilka osób w jednym.
Dane są trzy pliki: studenci.txt, meldunek.txt oraz wypozyczenia.txt, w których zapisano informacje o aktualnie wypożyczonych książkach przez studentów.
Każdy plik ma wiersz nagłówkowy. Dane rozdzielono znakiem tabulacji. Wszystkie dane tekstowe w plikach mają długości nieprzekraczające 60 znaków.
W pliku studenci.txt zapisano dane studentów – jeden student w wierszu. Imiona i nazwiska mogą się powtarzać. W każdym wierszu znajdują się odpowiednio: numer PESEL, nazwisko, imię.
Fragment pliku studenci.txt:
pesel nazwisko imie
92051048757 BAJOREK JAKUB
92051861424 SLOTARZ MARIANNA
Plik meldunek.txt zawiera przypisania studentów z miasteczka akademickiego do wynajętych pokoi. W każdym wierszu znajdują się odpowiednio: numer PESEL studenta oraz identyfikator pokoju.
Fragment pliku meldunek.txt:
pesel id_pok
92051048757 8
92051861424 32
W pliku wypozyczenia.txt zawarto informacje o wypożyczonych podręcznikach. W każdym wierszu zapisano: liczbę porządkową wypożyczenia, numer PESEL wypożyczającego oraz tytuł wypożyczonego podręcznika.
Fragment pliku wypozyczenia.txt:
lp pesel tytul
1 92061083359 FIZYKA TECHNICZNA I
2 94103033254 PROGRAMOWANIE MIKROKONTROLEROW I
Wykorzystując dane zawarte w powyższych plikach i dostępne narzędzia informatyczne, wykonaj zadania. Odpowiedzi zapisz w kolejnych wierszach pliku tekstowego wyniki_5.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. W numerze PESEL zawarta jest informacja o płci osoby. Jeżeli przedostatnia cyfra numeru jest parzysta, to PESEL należy do kobiety, jeśli nieparzysta, to do mężczyzny.
Podaj liczbę kobiet i liczbę mężczyzn wśród studentów.
Funkcja IIF jest używana w celu określenia czy warunek wyrażenia jest spełniony, czy nie. Jeśli warunek wyrażenia jest spełniony, funkcja IIf zwraca jedną wartość, a jeśli nie jest spełniony, funkcja IIf zwraca inną wartość:
IIF ( wyrażenie , jeśli prawda , jeśli_fałsz ) 
Funkcja RIGHT zwraca określoną ilość znaków od prawej strony podanego ciągu:
RIGHT ( ciąg, długość ) 
Funkcja LEFT działa analogicznie, lecz zwraca znaki od lewej strony.

SELECT SUM(IIF(LEFT(RIGHT(pesel,2),1) Mod 2=0,1,0)) AS Il_kobiet, SUM(IIF(LEFT(RIGHT(pesel,2),1) Mod 2=1,1,0)) AS Il_mezczyzn
FROM Studenci;

Pobierz rozwiązanie

Zadanie 5.4 (0-3)

Biblioteka podręczników
Biblioteka podręczników
Z biblioteki podręczników, wypożyczanych na cały rok akademicki, mogą korzystać studenci z miasteczka akademickiego i spoza miasteczka. Każdy student może wypożyczyć wiele różnych książek. W miasteczku studenci mieszkają w pokojach po kilka osób w jednym.
Dane są trzy pliki: studenci.txt, meldunek.txt oraz wypozyczenia.txt, w których zapisano informacje o aktualnie wypożyczonych książkach przez studentów.
Każdy plik ma wiersz nagłówkowy. Dane rozdzielono znakiem tabulacji. Wszystkie dane tekstowe w plikach mają długości nieprzekraczające 60 znaków.
W pliku studenci.txt zapisano dane studentów – jeden student w wierszu. Imiona i nazwiska mogą się powtarzać. W każdym wierszu znajdują się odpowiednio: numer PESEL, nazwisko, imię.
Fragment pliku studenci.txt:
pesel nazwisko imie
92051048757 BAJOREK JAKUB
92051861424 SLOTARZ MARIANNA
Plik meldunek.txt zawiera przypisania studentów z miasteczka akademickiego do wynajętych pokoi. W każdym wierszu znajdują się odpowiednio: numer PESEL studenta oraz identyfikator pokoju.
Fragment pliku meldunek.txt:
pesel id_pok
92051048757 8
92051861424 32
W pliku wypozyczenia.txt zawarto informacje o wypożyczonych podręcznikach. W każdym wierszu zapisano: liczbę porządkową wypożyczenia, numer PESEL wypożyczającego oraz tytuł wypożyczonego podręcznika.
Fragment pliku wypozyczenia.txt:
lp pesel tytul
1 92061083359 FIZYKA TECHNICZNA I
2 94103033254 PROGRAMOWANIE MIKROKONTROLEROW I
Wykorzystując dane zawarte w powyższych plikach i dostępne narzędzia informatyczne, wykonaj zadania. Odpowiedzi zapisz w kolejnych wierszach pliku tekstowego wyniki_5.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Podaj nazwiska i imiona studentów, którzy nie mieszkają w pokojach w miasteczku akademickim. Listę posortuj alfabetycznie wg nazwisk.
SELECT nazwisko, imie
FROM Studenci
WHERE pesel not in (SELECT pesel FROM Meldunki)
ORDER BY 1;

Pobierz rozwiązanie

Zadanie 5.5 (0-3)

Biblioteka podręczników
Biblioteka podręczników
Z biblioteki podręczników, wypożyczanych na cały rok akademicki, mogą korzystać studenci z miasteczka akademickiego i spoza miasteczka. Każdy student może wypożyczyć wiele różnych książek. W miasteczku studenci mieszkają w pokojach po kilka osób w jednym.
Dane są trzy pliki: studenci.txt, meldunek.txt oraz wypozyczenia.txt, w których zapisano informacje o aktualnie wypożyczonych książkach przez studentów.
Każdy plik ma wiersz nagłówkowy. Dane rozdzielono znakiem tabulacji. Wszystkie dane tekstowe w plikach mają długości nieprzekraczające 60 znaków.
W pliku studenci.txt zapisano dane studentów – jeden student w wierszu. Imiona i nazwiska mogą się powtarzać. W każdym wierszu znajdują się odpowiednio: numer PESEL, nazwisko, imię.
Fragment pliku studenci.txt:
pesel nazwisko imie
92051048757 BAJOREK JAKUB
92051861424 SLOTARZ MARIANNA
Plik meldunek.txt zawiera przypisania studentów z miasteczka akademickiego do wynajętych pokoi. W każdym wierszu znajdują się odpowiednio: numer PESEL studenta oraz identyfikator pokoju.
Fragment pliku meldunek.txt:
pesel id_pok
92051048757 8
92051861424 32
W pliku wypozyczenia.txt zawarto informacje o wypożyczonych podręcznikach. W każdym wierszu zapisano: liczbę porządkową wypożyczenia, numer PESEL wypożyczającego oraz tytuł wypożyczonego podręcznika.
Fragment pliku wypozyczenia.txt:
lp pesel tytul
1 92061083359 FIZYKA TECHNICZNA I
2 94103033254 PROGRAMOWANIE MIKROKONTROLEROW I
Wykorzystując dane zawarte w powyższych plikach i dostępne narzędzia informatyczne, wykonaj zadania. Odpowiedzi zapisz w kolejnych wierszach pliku tekstowego wyniki_5.txt. Odpowiedź do każdego zadania poprzedź numerem tego zadania. Biblioteka planuje wprowadzenie zakazu wypożyczania kilku egzemplarzy tego samego tytułu podręcznika studentom mieszkającym w jednym pokoju. Gdy ta zasada będzie obowiązywać, w żadnym pokoju nie powtórzy się żaden tytuł podręcznika.
Podaj, ile byłoby wypożyczonych podręczników, gdyby takie ograniczenie już funkcjonowało.
Kwerenda 5_1:
SELECT w.tytul & m.id_pok, COUNT(*)-1 AS za_duzo_o
FROM Wypozyczenia AS w INNER JOIN Meldunki AS m ON w.pesel=m.pesel
GROUP BY w.tytul & m.id_pok
HAVING COUNT(*)>1;

Kwerenda 5:
SELECT ((SELECT COUNT(*) AS il_ksiazek FROM Wypozyczenia)-(SELECT SUM(za_duzo_o) FROM 5_1)) AS wypozyczone
FROM 1;
Sytuacja taka sama jak w zadaniu 5.2: FROM 1 występuje tutaj jedynie po to, aby można było taką kwerendę wykonać, zawartość tej tabeli jest nieistotna. 

Pobierz rozwiązanie
Szyfr Cezara 
Podstawieniowy szyfr Cezara z przesunięciem (kluczem) k polega na zastąpieniu każdego znaku jawnego znakiem leżącym w alfabecie o k pozycji w prawo od zastępowanego znaku.
Przykład: znak ‘B’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘E’.
Przy szyfrowaniu znaku należy postępować w sposób cykliczny, to znaczy, jeżeli znak nie posiada w alfabecie następnika przesuniętego o k pozycji, to alfabet „zawija się" i za literą Z następuje znów litera A.
Przykład: jawny znak ‘X’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘A’, znak ‘Y’ – znakiem ‘B’, natomiast ‘Z’ – znakiem ‘C’.
W tym zadaniu rozpatrujemy tylko słowa zbudowane z wielkich liter alfabetu angielskiego (o kodach ASCII odpowiednio od 65 do 90), o długościach nie większych niż 30 znaków. W pliku dane_6_1.txt znajduje się 100 słów. Słowa umieszczono w osobnych wierszach.
Fragment pliku dane_6_1.txt:
INTERPRETOWANIE
ROZWESELANIE
KONSERWOWANIE
Napisz program, który zaszyfruje słowa z pliku dane_6_1.txt z użyciem klucza k = 107. Wynik zapisz do pliku wyniki_6_1.txt, każde słowo w osobnym wierszu, w porządku odpowiadającym kolejności słów z pliku z danymi.
Uwaga:
Dla pierwszego słowa z pliku dane_6_1.txt (INTERPRETOWANIE) wynikiem jest słowo LQWHUSUHWRZDQLH.
def szyfr(ciag, k):
    nowy_ciag = ""
    for lit in ciag:
        nowy_ord = 65+(ord(lit)-65+k) % 26
        nowy_ciag += chr(nowy_ord)
    return nowy_ciag

with open("wyniki_6_1.txt", "w") as wyjscie:
    with open("DANE_PR2/dane_6_1.txt") as wejscie:
        for linia in wejscie:
            if not linia:
                continue
            linia = linia.strip()
            wyjscie.write(szyfr(linia, 107)+"\n")

Pobierz rozwiązanie
Szyfr Cezara 
Podstawieniowy szyfr Cezara z przesunięciem (kluczem) k polega na zastąpieniu każdego znaku jawnego znakiem leżącym w alfabecie o k pozycji w prawo od zastępowanego znaku.
Przykład: znak ‘B’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘E’.
Przy szyfrowaniu znaku należy postępować w sposób cykliczny, to znaczy, jeżeli znak nie posiada w alfabecie następnika przesuniętego o k pozycji, to alfabet „zawija się" i za literą Z następuje znów litera A.
Przykład: jawny znak ‘X’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘A’, znak ‘Y’ – znakiem ‘B’, natomiast ‘Z’ – znakiem ‘C’.
W tym zadaniu rozpatrujemy tylko słowa zbudowane z wielkich liter alfabetu angielskiego (o kodach ASCII odpowiednio od 65 do 90), o długościach nie większych niż 30 znaków. W pliku dane_6_2.txt zapisano 3 000 szyfrogramów i odpowiadające im klucze szyfrujące. W każdym wierszu znajduje się jeden szyfrogram (zaszyfrowane słowo)
i po pojedynczym znaku odstępu odpowiadający mu klucz (maksymalnie czterocyfrowa liczba).
Fragment pliku dane_6_2.txt:
BCYKUNCM 1718
YFOGNSKGYW 7580
WARDA 9334 

Napisz program, który odszyfruje słowa zaszyfrowane podanymi kluczami. Wynik zapisz w pliku wyniki_6_2.txt: każde odszyfrowane słowo w osobnym wierszu, w porządku odpowiadającym kolejności szyfrogramów z pliku z danymi.
Uwaga:
Dla pierwszego szyfrogramu z pliku dane_6_2.txt (BCYKUNCM) wynikiem jest słowo ZAWISLAK.
def odszyfr(ciag, k):
    nowy_ciag = ""
    for lit in ciag:
        nowy_ord = 65+(ord(lit)-65-k) % 26
        nowy_ciag += chr(nowy_ord)
    return nowy_ciag

with open("wyniki_6_2.txt", "w") as wyjscie:
    with open("DANE_PR2/dane_6_2.txt") as wejscie:
        for linia in wejscie:
            if not linia:
                continue
            linia = linia.strip()
            try:
                ciag, k = linia.split()
            except:
                k = 0
            wyjscie.write(odszyfr(ciag, int(k))+"\n")

Pobierz rozwiązanie
Szyfr Cezara 
Podstawieniowy szyfr Cezara z przesunięciem (kluczem) k polega na zastąpieniu każdego znaku jawnego znakiem leżącym w alfabecie o k pozycji w prawo od zastępowanego znaku.
Przykład: znak ‘B’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘E’.
Przy szyfrowaniu znaku należy postępować w sposób cykliczny, to znaczy, jeżeli znak nie posiada w alfabecie następnika przesuniętego o k pozycji, to alfabet „zawija się" i za literą Z następuje znów litera A.
Przykład: jawny znak ‘X’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘A’, znak ‘Y’ – znakiem ‘B’, natomiast ‘Z’ – znakiem ‘C’.
W tym zadaniu rozpatrujemy tylko słowa zbudowane z wielkich liter alfabetu angielskiego (o kodach ASCII odpowiednio od 65 do 90), o długościach nie większych niż 30 znaków. W pliku dane_6_3.txt zapisano 3 000 par słów, po jednej parze w wierszu, oddzielonych pojedynczym znakiem odstępu. Drugie słowo w każdej parze jest szyfrogramem pierwszego
z nieznanym kluczem.
Niektóre szyfrogramy są błędne, co oznacza, że niektóre litery w słowie zakodowano z różnymi przesunięciami. Słowo ma zawsze tę samą długość co odpowiadający mu szyfrogram.
Fragment pliku dane_6_3.txt:
ZAWISLAK EFBNXQFP
KRASZEWSKI XENFMRJFXV

Napisz program, który wyszuka i wypisze te słowa z pliku dane_6_3.txt, które błędnie zaszyfrowano. Wynik zapisz w pliku wyniki_6_3.txt: każde słowo w osobnym wierszu, w porządku odpowiadającym kolejności tych słów z pliku z danymi.
Uwaga:
Pierwsze słowo w pliku wynikowym to SMIGIELSKI.
def szyfr(ciag, k):
    nowy_ciag = ""
    for lit in ciag:
        nowy_ord = 65+(ord(lit)-65+k) % 26
        nowy_ciag += chr(nowy_ord)
    return nowy_ciag

def szukaj(ciag, ciag2):
    def zdobadz_klucz(znak, znak2):
        if ord(znak2) < ord(znak):
            return 26-(ord(znak)-ord(znak2))
        else:
            return abs(ord(znak2)-ord(znak))
    roz = zdobadz_klucz(ciag[0], ciag2[0])
    if ciag2 != szyfr(ciag, roz):
        return False
    return True

with open("wyniki_6_3.txt", "w") as wyjscie:
    with open("DANE_PR2/dane_6_3.txt") as wejscie:
        for linia in wejscie:
            linia = linia.strip()
            ciag1, ciag2 = linia.split()
            if not szukaj(ciag1, ciag2):
                wyjscie.write(ciag1+"\n")

Pobierz rozwiązanie