Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 22.02.2022
Сообщений: 6

Кодер-декодер по таблице

23.02.2022, 00:07. Показов 2576. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Я занимаюсь переводом одной древней игры, точнее она переведена, но я пытаюсь на её основе сделать перевод совсем иного по смыслу издания, то есть поменять одни русские буквы на другие. Не в этом суть.
Все кириллические символы в её dat-файле зашифрованы. Таблица соответствия у меня есть. Вобщем-то моих знаний хватило, чтобы поставить Питон и выполнить скрипт из этого сообщения(я потому и прошу помощи в питоновой ветке -- синдром утенка))), предварительно адаптировав букварь, и шифрование прошло как по маслу.
Вот этот скрипт
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
dic = { 'А':'}<0', 'Б':'}<1', 'В':'}<2', 'Г':'}<3', 'Д':'}<4', 'Е':'}<5', 'Ж':'}<6', 'З':'}<7', 'И':'}<8', 'Й':'}<9', 
    'К':'}<:', 'Л':'}<;', 'М':'}<<', 'Н':'}<=', 'О':'}<>', 'П':'}<?', 'Р':'}=0', 'С':'}=1', 'Т':'}=2', 'У':'}=3',
        'Ф':'}=4', 'Х':'}=5', 'Ц':'}=6', 'Ч':'}=7', 'Ш':'}=8', 'Щ':'}=9', 'Ъ':'}=:', 'Ы':'}=;', 'Ь':'}=<', 'Э':'}==',
        'Ю':'}=>', 'Я':'}=?', 'а':'}>0', 'б':'}>1', 'в':'}>2', 'г':'}>3', 'д':'}>4', 'е':'}>5', 'ж':'}>6', 'з':'}>7', 
    'и':'}>8', 'й':'}>9', 'к':'}>:', 'л':'}>;', 'м':'}><', 'н':'}>=', 'о':'}>>', 'п':'}>?', 'р':'}?0', 'с':'}?1',
    'т':'}?2', 'у':'}?3', 'ф':'}?4', 'х':'}?5', 'ц':'}?6', 'ч':'}?7', 'ш':'}?8', 'щ':'}?9', 'ъ':'}?:', 'ы':'}?;',
        'ь':'}?<', 'э':'}?=', 'ю':'}?>', 'я':'}??' }
       
alphabet = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 
        'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 
        'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
 
print("Enter text: ")
st = str(input())
result = str()
 
len_st = len(st)
for i in range(0,len_st):
    if st[i] in alphabet:
        simb = dic[st[i]]
    else:
        simb = st[i]
    result = result + simb
 
print(result)

Очевидно каждая буква отделена фигурной скобкой, но зашифрованы только кириллические символы. То есть в уже зашифрованном тексте имеются восклицательный знак, апостроф, точка, запятая и как минимум латинская n, точнее /n как символ перевода строки.
Помогите составить дешифровщик пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2022, 00:07
Ответы с готовыми решениями:

Кодер-декодер.
Я недавно начал писать на бейсике и захотелось написать программу которая бы переводила русский текст в азбуку морзе. В текстовом файле...

кодер-декодер
Ребят, такая проблема: надо написать программу кодер(или шифратор, как вам удобнее) программу приложу ниже, так вот, в программе в строке...

Кодер/декодер
Как на дельфи можно так закодировать и раскодировать?

6
enx
 Аватар для enx
1189 / 765 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
23.02.2022, 04:10
no02, это делается чуть проще, дай небольшой образец текста для проверки.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
23.02.2022, 11:02
Лучший ответ Сообщение было отмечено no02 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import string
#==============================================================================
TU  = string.digits + string.punctuation[15:21]
TLB = string.punctuation[17:19]
TLM = string.punctuation[19:21]
MOD = len(TU)
PREF = '{'
#==============================================================================
def encode_symb(symb):
    if symb.isupper():
        num = ord(symb) - ord('А')
        return PREF + TLB[num // MOD] + TU[num % MOD]
    else:
        num = ord(symb) - ord('а')
        return PREF + TLM[num // MOD] + TU[num % MOD]
#==============================================================================
def encode_text(text):
    res = ''
    for symb in text:
        res += encode_symb(symb)
    return res
#==============================================================================
def decode_text(code):
    res = ''
    code_lis = code.split( PREF )
    code_lis.pop(0)
    for elem in code_lis:
        is_upper = elem[0] in TLB
        if is_upper:
            ord_symb = MOD * TLB.index( elem[0] ) + TU.index( elem[1] )
            symb = chr( ord('А') + ord_symb )
        else:
            ord_symb = MOD * TLM.index( elem[0] ) + TU.index( elem[1] )
            symb = chr( ord('а') + ord_symb )
        res += symb
    return res
#==============================================================================
while True:
    text = input('-> ')
    print( encode_text(text) )
    print()
    print( decode_text( encode_text(text) ) )
    print()
1
0 / 0 / 0
Регистрация: 22.02.2022
Сообщений: 6
23.02.2022, 13:01  [ТС]
Прошу прощения, самое важное-то я и не запостил.
Это согласно оригинальному шифру
Code
1
2
Тихая гавань
}=2}>8}?5}>0}?? }>3}>0}>2}>0}>=}?<

Это зашифровано заново.
Code
1
2
3
Создайте воздушный коридор через вражескую ПВО и нанесите удар по ракетным шахтам.
 
}=1}>>}>7}>4}>0}>9}?2}>5 }>2}>>}>7}>4}?3}?8}>=}?;}>9 }>:}>>}?0}>8}>4}>>}?0 }?7}>5}?0}>5}>7 }>2}?0}>0}>6}>5}?1}>:}?3}?> }<?}<2}<> }>8 }>=}>0}>=}>5}?1}>8}?2}>5 }?3}>4}>0}?0 }>?}>> }?0}>0}>:}>5}?2}>=}?;}>< }?8}>0}?5}?2}>0}><.


Добавлено через 1 час 22 минуты
idealist Спасибо!!! Я в выводе оставил только декодер. Ну и поменял скобку Супер!!
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
23.02.2022, 15:18
Лучший ответ Сообщение было отмечено enx как решение

Решение

Добавлено через 10 минут
Цитата Сообщение от no02 Посмотреть сообщение
Тихая гавань
}=2}>8}?5}>0}?? }>3}>0}>2}>0}>=}?<
С учетом этих примеров:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import string
#==============================================================================
TU   = string.digits + string.punctuation[15:21]
TLB  = string.punctuation[17:19]
TLM  = string.punctuation[19:21]
MOD  = len(TU)
PREF = '{'
SYMB_CODE_LEN = 2
#==============================================================================
def encode_symb(symb):
    if not ord('a') <= ord( symb.lower() ) <= ord('я'):
        return symb
    if symb.isupper():
        num = ord(symb) - ord('А')
        return PREF + TLB[num // MOD] + TU[num % MOD]
    else:
        num = ord(symb) - ord('а')
        return PREF + TLM[num // MOD] + TU[num % MOD]
#==============================================================================
def encode_text(text):
    res = ''
    for symb in text:
        res += encode_symb(symb)
    return res
#==============================================================================
def decode_text(code):
    code_lis = code.split( PREF )
    res = code_lis.pop(0)
    for elem in code_lis:
        is_upper = elem[0] in TLB
        if is_upper:
            ord_symb = MOD * TLB.index( elem[0] ) + TU.index( elem[1] )
            symb = chr( ord('А') + ord_symb )
        else:
            ord_symb = MOD * TLM.index( elem[0] ) + TU.index( elem[1] )
            symb = chr( ord('а') + ord_symb )
        res += symb + elem[SYMB_CODE_LEN:]
    return res
#==============================================================================
#text = input('-> ')
text = '!!!!!В траве!!!! сидел?????????????????????............кузнечик, КУЗНЕЧИК.......'
print( encode_text(text) )
print()
print( decode_text( encode_text(text) ) )
print()
2
0 / 0 / 0
Регистрация: 22.02.2022
Сообщений: 6
24.02.2022, 13:57  [ТС]
Проверьте пожалуйста
Немного допилил интерактивность в конце скрипта
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import string
#==============================================================================
TU   = string.digits + string.punctuation[15:21]
TLB  = string.punctuation[17:19]
TLM  = string.punctuation[19:21]
MOD  = len(TU)
PREF = '}'
SYMB_CODE_LEN = 2
#==============================================================================
def encode_symb(symb):
    if not ord('a') <= ord( symb.lower() ) <= ord('я'):
        return symb
    if symb.isupper():
        num = ord(symb) - ord('А')
        return PREF + TLB[num // MOD] + TU[num % MOD]
    else:
        num = ord(symb) - ord('а')
        return PREF + TLM[num // MOD] + TU[num % MOD]
#==============================================================================
def encode_text(text):
    res = ''
    for symb in text:
        res += encode_symb(symb)
    return res
#==============================================================================
def decode_text(code):
    code_lis = code.split( PREF )
    res = code_lis.pop(0)
    for elem in code_lis:
        is_upper = elem[0] in TLB
        if is_upper:
            ord_symb = MOD * TLB.index( elem[0] ) + TU.index( elem[1] )
            symb = chr( ord('А') + ord_symb )
        else:
            ord_symb = MOD * TLM.index( elem[0] ) + TU.index( elem[1] )
            symb = chr( ord('а') + ord_symb )
        res += symb + elem[SYMB_CODE_LEN:]
    return res
#==============================================================================
while True:
    text = input('-> ')
    if text.find(PREF,0,2) != -1 :
        print( decode_text (text) )
    else:
        print( encode_text (text) )
       
    print()
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
24.02.2022, 16:10
Цитата Сообщение от no02 Посмотреть сообщение
text.find(PREF,0,2)
Не, надо по всей строке искать, так как небуквенные символы у нас не шифруются, и если их много будет стоять в начале строки, то скобка встретится нескоро.

Вот так примерно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import string
from random import randint
# ==============================================================================
TU   = string.digits + string.punctuation[15:21]
TLB  = string.punctuation[17:19]
TLM  = string.punctuation[19:21]
MOD  = len(TU)
PREF = '}'
SYMB_CODE_LEN = 2
# ==============================================================================
def encode_symb(symb):
    if not ord('a') <= ord(symb.lower()) <= ord('я'):
        return symb
    if symb.isupper():
        num = ord(symb) - ord('А')
        return PREF + TLB[num // MOD] + TU[num % MOD]
    else:
        num = ord(symb) - ord('а')
        return PREF + TLM[num // MOD] + TU[num % MOD]
# ==============================================================================
def encode_text(text):
    res = ''
    for symb in text:
        res += encode_symb(symb)
    return res
# ==============================================================================
def decode_text(code):
    code_lis = code.split(PREF)
    res = code_lis.pop(0)
    for elem in code_lis:
        is_upper = elem[0] in TLB
        if is_upper:
            ord_symb = MOD * TLB.index(elem[0]) + TU.index(elem[1])
            symb = chr(ord('А') + ord_symb)
        else:
            ord_symb = MOD * TLM.index(elem[0]) + TU.index(elem[1])
            symb = chr(ord('а') + ord_symb)
        res += symb + elem[SYMB_CODE_LEN:]
    return res
# ==============================================================================
while True:
    print()
    input('Нажмите Enter: ')
    text_1 = '!!!!!В траве!!!! сидел?????????????????????............кузнечик, КУЗНЕЧИК.......'
    text_2 = encode_text(text_1)
    text   = ( text_1, text_2 )[randint(0,1)]
 
    if PREF in text:
        print( decode_text(text) )
    else:
        print( encode_text(text) )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2022, 16:10
Помогаю со студенческими работами здесь

кодер/декодер
здравствуйте. есть небольшой проект - консольное приложение кодера/декодера (сишные файлы датируются 1992 годом). удалось...

Кодер-Декодер Хемминга.
Кодер: #include &lt;iostream&gt; unsigned char xr (unsigned char c) { int d; unsigned char s=0; for (d=0;d&lt;8;d++) s^=(c...

UUE кодер\декодер
Доброго времени суток! Возникла потребность написать на C# кодер и декорер UUE, но я не представляю как это делать... Может кто знает?

Декодер и Кодер Морзе
Господа форумчане! Необходимо написать кодер и декодер на дельфи. Сигнал принимается с микрофона и печатается в виде текста. И набираемый...

Сверточный кодер-декодер
Всем доброго времени суток! Пишу дипломную работу на тему Сверточного кодирования, и соответственно декодирования данных. Кодер и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru