Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ascii encrypter (реализация на перл)  (Прочитано 16786 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vika
Постоялец

ru
Offline Offline
Пол: Женский

« : 09-11-2012 01:32 » 

Собственно, прошу помочь и ткнуть носом, где косяк. Довольно интересное решение нашла, вот пробую перевести на перл, вроде ничего сложного нету, массивы, а че то голова не фурычит.
Код: (Perl)
sub unEncrypt(theText) {
output = new String;
Temp = new Array();
Temp2 = new Array();
TextSize = theText.length;
for (i = 0; i < TextSize; i++) {
Temp[i] = theText.charCodeAt(i);
Temp2[i] = theText.charCodeAt(i + 1);
}
for (i = 0; i < TextSize; i = i+2) {
output += String.fromCharCode(Temp[i] - Temp2[i]);
}
return output;
}

Код: (Perl)
function unEncrypt(theText) {
$output;
@Temp;
@Temp2;
$TextSize = length( theText);
for ($i = 0; $i < $TextSize; $i++) {
$Temp[i] = theText.charCodeAt(i);
$Temp2[i] = theText.charCodeAt(i + 1);
}
for ($i = 0; $i < TextSize; $i = $i+2) {
$output += String.fromCharCode($Temp[i] - $Temp2[i]);
}
return $output;
}
« Последнее редактирование: 12-11-2012 16:22 от McZim » Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 09-11-2012 04:59 » 

charCodeAt, charCodeAt, "+="   кто будет к перлу приводить?

Что в этом решении интересного - не понятно. Также не понятно - зачем тут, вообще, два цикла и временные массивы?
Записан

Удачного всем кодинга! -=x[PooH]x=-
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 09-11-2012 07:13 » 

vika, чтобы портировать программу с одного языка на другой, надо не заменять функции и операторы, а разобрать алгоритм. Опиши его на бумаге словами, попробуй выполнить прогон в уме, проверь результат. Только после этого у тебя получится написать что-то работоспособное.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
vika
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #3 : 09-11-2012 22:15 » 

Смысл то более менее понятен. Не понятно только вот, что

а) в яваскрипте функция string.charCodeAt(index) возврашает юникодное представление строки, где index - длина строки, в перле вроде функция ord что то подобное делает, только не

совсем. Есть ли аналоги этой функции на перле, идентично яваскриптовой

б) fromCharCode из яваскрипта наоборот, в зависимости от уникод числа вернет строку. аналога в перле путного что то не найду. Подскажите, пожалуйста, решение
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 10-11-2012 08:11 » 

a) Длина строки? Ну-ну.
б) Судя по твоим вопросам, за год в изучении программирования ты нисколько не прогрессировала. Документацию то читала? Описание конструкций языка, внутреннее представление строки, встроенные функции работы со строками.

Вика, не пойму, чего ты прицепилась к Perl и Javascript? Это не самые подходящие кандидаты для изучения программирования. Да и задачу выбрала специфическую — не для начинающего.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 10-11-2012 08:35 » 

RXL, все правильно
>Опиши его на бумаге словами...

Не имеет значения какой язык взят в качестве рабочего.
Первое и самое основное...
Читай вслух свою(чужую) программу.

Впрочем Vika уже ответила на один вопрос для себя (о многобайтовых кодировках). Вот только продолжения она не видит.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
vika
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #6 : 14-11-2012 15:48 » 

А ларчик то открывается просто Класс!

Код: (Perl)
$txt =  ' ' ;

$TextSize = length ($txt);

for ($i = 0; $i < $TextSize; $i = $i+2) {

$Temp[i] = ord (substr($txt, $i));

$Temp2[i] = ord (substr($txt, $i + 1));

$output .= chr($Temp[i]-$Temp2[i]);

Всем спасибо за внимание. Жаль, что пакер Дэна Эдвордса не так прост
« Последнее редактирование: 14-11-2012 16:58 от McZim » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 14-11-2012 18:02 » 

vika, ты считаешь, что задача решена? Не поняв алгоритма? Не говоря уже про страшный код...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #8 : 15-11-2012 07:44 » 

vika, а зачем тебе $Temp и $Temp2 ? Ага

Почему, например, не так?
Код: (Perl)
$txt =  ' ' ;
for ($i = 0; $i < length ($txt); $i = $i+2) { $output .= chr(ord (substr($txt, $i))-ord (substr($txt, $i + 1))); }
« Последнее редактирование: 15-11-2012 07:48 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 15-11-2012 09:25 » 

>а зачем тебе $Temp и $Temp2

я бы переспросил зачем массив Temp'ов


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
vika
Постоялец

ru
Offline Offline
Пол: Женский

« Ответ #10 : 16-11-2012 19:17 » 

vika, ты считаешь, что задача решена? Не поняв алгоритма? Не говоря уже про страшный код...
Ну почему же не поняв алгоритм, все понятно более менее. Пробегаем строку циклом, каждый символ сначала переводя в ascii код функцией ord, затем, с помощью функции chr переводим ascii код в символ. А по поводу корявости кода, ну в стране у нас тоже бардак творится, воры кругом, причем, начиная с верха и заканчивая всякими "срочными обновлениями броузеров", но живем ведь. Так и тут, работает, свою задачу выполняет и ладно.

Добавлено через 1 минуту и 21 секунду:
vika, а зачем тебе $Temp и $Temp2 ? Ага

Почему, например, не так?
Код: (Perl)
$txt =  ' ' ;
for ($i = 0; $i < length ($txt); $i = $i+2) { $output .= chr(ord (substr($txt, $i))-ord (substr($txt, $i + 1))); }
А это промежуточные переменные, чтобы не усложнять, ну и , хотелось посмотреть, что они вернут

Добавлено через 44 секунды:
>а зачем тебе $Temp и $Temp2
я бы переспросил зачем массив Temp'ов
По аналогии с яваскриптом делала, проверяла построчно там и тут
« Последнее редактирование: 16-11-2012 19:19 от vika » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 16-11-2012 21:12 » new

vika, ты считаешь, что задача решена? Не поняв алгоритма? Не говоря уже про страшный код...
Ну почему же не поняв алгоритм, все понятно более менее. Пробегаем строку циклом, каждый символ сначала переводя в ascii код функцией ord, затем, с помощью функции chr переводим ascii код в символ. А по поводу корявости кода, ну в стране у нас тоже бардак творится, воры кругом, причем, начиная с верха и заканчивая всякими "срочными обновлениями броузеров", но живем ведь. Так и тут, работает, свою задачу выполняет и ладно.

Ты о чем? Мы не ели твой мозг — ты ела наши Улыбаюсь
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines