![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 22.04.2010
Сообщений: 6
|
![]()
Создать алгоритм шифрования по правилу шифра "поворотной решётки": изготавливается трафарет из прямоугольного листа бумаги размера 2m*2n клеток. В трафарете вырезано mn клеток так, что при наложении его на чистый лист того же размера четырьмя возможными способами, его вырезы полностью покрывают всю площадь листа. Буквы сообщения последовательно вписываются в вырезы трафарета (по строкам слева направо) при каждом из четырёх его возможных положений. Просто интересен этот алгоритм и как его написать .... ?
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
1) расскажите, как можно 4-рьмя способами наложить прямоугольный трафарет на прямоугольный лист ? (схемку или рисунок набросайте, плиз... - и Вам полезно будет, и для непонимающих (вроде меня) более понятно.
2) способов реализации подобного трафарета может быть много. Думаю, что банальная матрица нужного размера решает Вашу проблему. (в тех местах, где есть прорези - поместите особое значение. Например, 0 - нет прорези, 1-есть прорезь. Ну или вообще boolean значение хранить.. Поворот трафарета - это либо осуществить перенос значений в матрице по заданному алгоритму. Либо в алгоритме чтения последовательно изменять порядок обращения к данной матрице... |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 23.11.2010
Сообщений: 530
|
![]()
ну в принципе то можно... наложить трафарет на лист(1й вариант), повернуть трафарет на 180 в плоскости параллельной листу(2й вариант). перевернуть трафарет другой стороной и повторить. как раз 4 варианта выходит.
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
ну, если честно, я тоже представлял себе такой вариант (а других я и не смог придумать - для прямоугольного трафарета!). кстати, очевидно, что для поля размером 2m*2n прорезей в трафарете должно быть m*n. Но, имхо, этого мало. расположение всех прорезей не может быть произвольным - нужно, чтобы при поворотах они не перекрывали друг друга... Т.е. для каждой прорези строго не должно быть прорези симметричной ей относительно центра шаблона. |
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 26.01.2009
Сообщений: 125
|
![]()
насколько я понял простейший трафарет будет для поля 2х2 и будет из одной вырезаной ячейки в четверть трафарета.
По сути вопроса - помоему всё более менее просто. Сам трафарет я представляю так: ты проходишься по четверти площади трафарета и беря рэндомное значение от 1 до 4 для каждой ячейки в зависимости от этого значения "делаешь прокол" в трафарете - либо в оригинальной четверти, либо в повёрнутой на 180 градусов, либо в перевёрнутых двух вариантах трафарета. А дальше запомнив полученый трафарет я думаю тоже всё несложно. я бы сделал два вложенных цикла с переменными 1 и -1 и прикрутить к этому всему перебор по координатам трафарета, переменные циклов взяв как коэфициенты. Кажись готовый алгоритм... |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 23.11.2010
Сообщений: 530
|
![]()
насколько я понял текст пишется подряд( построчно, слева-направо) т.е. если по очереди поставить трафарет во все 4 варианта должен получиться связный текст...
набросал в блокноте примерно следующее * 0 0 * 0 * * 0 0 1 * 0 1 0 0 * 4х4=16 2х2=4 * 0 0 0 0 0 0 * 0 * 0 0 0 0 * 0 0 0 * 0 0 * 0 0 0 0 0 * * 0 0 0 0 0 0 1 * 0 0 0 0 0 1 0 0 * 0 0 0 1 0 0 0 0 * 0 1 0 0 0 0 0 0 * 8х8=64 4х4=16 вообщем можно мысленно все поле разбить на квадраты... половина нужного количества проколов делается в углах этих квадратов... остальные на их сторонах. текст разбить на 4 части. и проколы соответствующие каждой части текста делать в одном выбранном положении трафарета. составить что-то типо ключа... напр 3 2 1 4. только надо условиться какое положение трафарета будет под каким номером. матрица 8х8 ставишь первый прокол в координатах [5,4] значит координаты 4,4;4,5;5,5 - нельзя использовать дальше ставишь в координатах [6,3] координаты 3,3;3,6;6,6; нельзя использовать дальше ставишь напр 5,3 или 5,6 и т.д. Последний раз редактировалось unbanned; 27.04.2011 в 16:23. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как обойти "преобразование типа из "string" в "float" невозможно" | lexluter1988 | Помощь студентам | 1 | 07.08.2010 12:23 |
"Двухслойное" шифрование | necroant | Общие вопросы C/C++ | 1 | 16.06.2010 20:31 |
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. | Каравай | Microsoft Office Excel | 13 | 17.02.2010 09:53 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |