Skip to content

Commit 1609c4f

Browse files
author
uralbash
committed
Merge branch 'romanVS-master'
2 parents 5c40e94 + 4beaeaf commit 1609c4f

File tree

3 files changed

+113
-0
lines changed

3 files changed

+113
-0
lines changed

practice2/SeminRS/README.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
программа запускается ->>>> имя программы "путь к файлу" "расшифрованная строка"
2+
расшифрованная строка ----> ололо! все работает:)

practice2/SeminRS/decryptor.py

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/usr/bin/env python
2+
#-*- coding: utf-8 -*-
3+
alphabet = u'абвгдежзийклмнопрстуфхцчшщъыьэюя'
4+
key = [0,0,0,0,0,0,0,0,0,0]
5+
6+
def findKey(codingString, decodingString): #фун-ия для нахождения ключа
7+
8+
codingString = codingString.lower()
9+
decodingString = decodingString.lower()
10+
seek = 0;
11+
count = 0
12+
while count < 10 and seek < len(decodingString): #находим ключ пока не закончится раскодированная строка или не найдем полностью ключ
13+
14+
if (alphabet.find(decodingString[seek]) != -1): #ищем символ раскодированной строки
15+
decodingSym = alphabet.index(decodingString[seek])
16+
17+
elif (decodingString[seek] == codingString[seek]): #если не нашли символ в алфавите проверяем равен ли он символу в закодированной строке
18+
seek += 1
19+
continue
20+
21+
else: #если символ не равен значит неправильная раскодированная строка т.к. при кодировки мы не трогаем знаки препинания
22+
print "ERROR: incorrect decoding string"
23+
exit(0)
24+
25+
if (alphabet.find(codingString[seek]) != -1): #ищем символ раскодированной строки
26+
codingSym = alphabet.index(codingString[seek])
27+
key[count] = codingSym - decodingSym #находим элемент ключа
28+
29+
if key[count] < 0:
30+
key[count] = (len(alphabet) - 1) + key[count]
31+
32+
count += 1
33+
seek += 1
34+
35+
else: #если не нашли то значит неправильная раскодированная строка
36+
print "ERROR: incorrect decoding string"
37+
exit(0)
38+
39+
if count < 10: #если нашли не все элементы ключа значит не достаточно данных
40+
print "ERROR: insufficient data"
41+
exit(1)
42+
43+
44+
def decoding(key, lines):
45+
46+
newStr = ""
47+
count = 0
48+
keyCount = 0
49+
fileStr = ""
50+
while count < len(lines): #перебираем все строки файла
51+
newStr = ""
52+
for sym in lines[count].decode('utf-8'):
53+
if keyCount == 10:
54+
keyCount = 0
55+
56+
if (alphabet.find(sym.lower()) != -1): #если не найден в алфавите то пропускаем символ
57+
newSym = alphabet.index(sym.lower()) - key[keyCount]
58+
if (newSym < 0):
59+
newSym += (len(alphabet) - 1)
60+
61+
newSym = alphabet[newSym]
62+
63+
if (sym.isupper()): #если закодированный символ был в верхнем регистре то раскодированный делаем тоже в верхнем
64+
newSym = newSym.upper()
65+
66+
newStr += newSym
67+
keyCount += 1
68+
69+
else:
70+
newStr += sym
71+
72+
fileStr += newStr
73+
count += 1
74+
return fileStr
75+
76+
77+
78+
def main(args):
79+
80+
pathFile = args[1].decode('utf-8')
81+
decodingString = args[2].decode('utf-8')
82+
lines = open(pathFile,"r").readlines()
83+
findKey(lines[0].decode('utf-8'), decodingString)
84+
fileStr = decoding(key, lines)
85+
print "key: ",key
86+
f = open( pathFile, 'w')
87+
f.write(fileStr.encode('utf-8'))
88+
f.close()
89+
print "DONE"
90+
91+
if __name__ == '__main__':
92+
import sys
93+
main(sys.argv[:])
94+
95+
96+
97+
98+
99+
100+
101+
102+
103+
104+
105+
106+
107+
108+
109+
110+

practice2/SeminRS/file

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
уРцСс! жто рбжуъжиц !!!!!!:)

0 commit comments

Comments
 (0)