Sprawdź się
Zadanie 4
W pliku znajduje się 130 par słów oraz kluczy. Pierwsze słowo to tekst jawny, drugie jest szyfrogramem uzyskanym przy użyciu szyfru płotkowego. Sprawdź, czy wiadomość została zaszyfrowana za pomocą klucza znajdującego się w pliku. Policz, ile jest par takich słów, które nie zostały zaszyfrowane za pomocą klucza danego w pliku.
Przykładowe dane:
INTERPRETOWANIE ITRRTWNENEPEOAI 2
ROZWESELANIE REOSLEZEAIWN 4
KONSERWOWANIE KEWEOSROAINWN 6
Specyfikacja:
Dane:
wyrazy[][]
– tablica dwuwymiarowa zawierająca kolejno tekst jawny i szyfrogramklucze
– tablica kluczy
Wynik:
wynik
– liczba naturalna; liczba słów, które nie zostały zaszyfrowane za pomocą klucza danego w pliku
Poprawny wynik dla podanych danych:
1
Poprawny wynik dla całego pliku:
47
Przycisk do pobrania pliku TXT z wynikiem zadania. Pobierz załącznik
Rozwiąż zadanie lokalnie na swoim komputerze.
Rozwiązanie w języku C++.
Przykładowe rozwiązanie:
#include <iostream>
using namespace std;
string DeSzyfrPlotkowy(string szyfrogram, int klucz)
{
char plotek[klucz][szyfrogram.size()];
for(int i = 0; i < klucz; i++){
for(int j = 0; j < szyfrogram.size(); j++ ){
plotek[i][j] = ' ';
}
}
int wiersz = 0, czydol = 1;
for(int i = 0; i < szyfrogram.size(); i++){
plotek[wiersz][i] = '*';
if(wiersz == klucz-1)
czydol = 0;
else if(wiersz == 0)
czydol = 1;
if(czydol == 1)
wiersz = wiersz + 1;
else
wiersz = wiersz - 1;
}
int znak = 0;
for(int i=0; i < klucz; i++){
for(int j=0; j < szyfrogram.size(); j++){
if(plotek[i][j] == '*'){
plotek[i][j] = szyfrogram[znak];
znak++;
}
}
}
wiersz = 0;
czydol = 1;
string jawny = "";
for(int i = 0; i < szyfrogram.size(); i++){
jawny += plotek[wiersz][i];
if(wiersz == klucz-1)
czydol = 0;
else if(wiersz == 0)
czydol = 1;
if(czydol == 1)
wiersz = wiersz + 1;
else
wiersz = wiersz - 1;
}
return jawny;
}
int main(){
string wyrazy[][2] = {"INTERPRETOWANIE", "ITRRTWNENEPEOAI",
"ROZWESELANIE", "REOSLEZEAIWN",
"KONSERWOWANIE", "KEWEOSROAINWN"};
int klucze[] = {2, 4, 6};
string jawny, szyfrogram;
int klucz, wynik = 0;
for(int i = 0; i < 3; i++){
klucz = klucze[i];
jawny = wyrazy[i][0];
szyfrogram = wyrazy[i][1];
if(jawny != DeSzyfrPlotkowy(szyfrogram, klucz))
wynik++;
}
cout<< wynik;
}
Rozwiązanie w języku Java.
Przykładowe rozwiązanie:
public class main {
public static void main(String[] args) {
int n = 5;
String [][] wyrazy = {{"INTERPRETOWANIE", "ITRRTWNENEPEOAI"},
{"ROZWESELANIE", "REOSLEZEAIWN"},
{"KONSERWOWANIE", "KEWEOSROAINWN"}};
int []klucze = {2, 4, 6};
String jawny, szyfrogram;
int klucz, wynik = 0, dlugosc;
for(int i = 0; i < 3; i++){
klucz = klucze[i];
jawny = wyrazy[i][0];
szyfrogram = wyrazy[i][1];
dlugosc = szyfrogram.length();
char [][]plotek = new char[klucz][dlugosc];
for(int j = 0; j < klucz; j++){
for(int l = 0; l < dlugosc; l++ ){
plotek[j][l] = ' ';
}
}
int wiersz = 0, czydol = 1;
for(int j = 0; j < dlugosc; j++){
plotek[wiersz][j] = '*';
if(wiersz == klucz-1)
czydol = 0;
else if(wiersz == 0)
czydol = 1;
if(czydol == 1)
wiersz = wiersz + 1;
else
wiersz = wiersz - 1;
}
int znak = 0;
for(int j = 0; j < klucz; j++){
for(int l = 0; l < dlugosc; l++){
if(plotek[j][l] == '*'){
plotek[j][l] = szyfrogram.charAt(znak);
znak++;
}
}
}
wiersz = 0;
czydol = 1;
String rozszyfrowane = "";
for(int l = 0; l < dlugosc; l++){
rozszyfrowane += plotek[wiersz][l];
if(wiersz == klucz-1)
czydol = 0;
else if(wiersz == 0)
czydol = 1;
if(czydol == 1)
wiersz = wiersz + 1;
else
wiersz = wiersz - 1;
}
if (!jawny.equals(rozszyfrowane))
wynik++;
}
System.out.println(wynik);
}
}
Rozwiązanie w języku Python.
Przykładowe rozwiązanie:
def Deszyfrowanie(szyfrogram, klucz):
plotek = [[' '] * len(szyfrogram) for i in range(klucz)]
wiersz = 0
czydol = 1
for i in range(len(szyfrogram)):
plotek[wiersz][i] = '*'
if wiersz == klucz - 1:
czydol = 0
elif wiersz == 0:
czydol = 1
if czydol == 1:
wiersz = wiersz + 1
else:
wiersz = wiersz - 1
znak = 0
for i in range(klucz):
for j in range(len(szyfrogram)):
if plotek[i][j] == '*':
plotek[i][j] = szyfrogram[znak]
znak = znak + 1
wiersz = 0
czydol = 1
jawny = ""
for i in range(len(szyfrogram)):
jawny = jawny + plotek[wiersz][i]
if wiersz == klucz - 1:
czydol = 0
elif wiersz == 0:
czydol = 1
if czydol == 1:
wiersz = wiersz + 1
else:
wiersz = wiersz - 1
return jawny
wyrazy = [["INTERPRETOWANIE", "ITRRTWNENEPEOAI"],
["ROZWESELANIE", "REOSLEZEAIWN"],
["KONSERWOWANIE", "KEWEOSROAINWN"]]
klucze = [2, 4, 6]
wynik = 0
for i in range(3):
jawny = wyrazy[i][0]
szyfrogram = wyrazy[i][1]
klucz = klucze[i]
if jawny != Deszyfrowanie(szyfrogram, klucz):
wynik = wynik + 1
print(wynik)