Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Шифрование по квадрату Полибия (https://javascript.ru/forum/misc/28236-shifrovanie-po-kvadratu-polibiya.html)

bes 12.05.2012 21:11

Цитата:

Сообщение от nerv_
Это твоя проблема, что ты не можешь придумать хорошие имена. Не вникая в суть - stepСolumn

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

Цитата:

Сообщение от nerv_
snake - первая функция в листинге

В твоём примере используется один push в цикле, в моём придётся использовать три, то есть 3 push() vs 2 concat(), если concat намного более затратная операция по сравнению с push, тогда, конечно смысл есть, а если нет, то у меня получилось не сложнее (за сам способ спасибо).

Цитата:

Сообщение от B@rmaley.e><e
Замыкания.

Можете пояснить, не совсем понятно как замыкания могут заменить глобальные переменные.

B@rmaley.e><e 12.05.2012 21:27

(function(){
  var localVariable = 5;

  window.getLocalVar = function () { return localVariable; };
  window.setLocalVar = function (val) { localVariable = val; };
})();

alert( typeof localVariable);
alert( getLocalVar() );
setLocalVar(10);
alert( getLocalVar() );

nerv_ 12.05.2012 22:11

из этого кода следует, что ты прав ;) Прикольное кино :) Даже если явно задать длину массива new Array(count) и при записи обращаться непосредственно к каждому элементу Array[index] ситуация почти аналогична. Вру )
var repeatCount = 100000;
var pattern = "text";
var arrayFixSize = new Array( repeatCount );
var startTime;
var counter;
var line = "";
var arr = [];


for( startTime = new Date(), counter = repeatCount; counter > 0; counter-- ) {
	line += pattern;
}

alert(
	'concatenate - ' + ( new Date() - startTime )
);

/*********************************************************/

for( startTime = new Date(), counter = repeatCount; counter > 0; counter-- ) {
	arr.push( pattern );
}

arr.join( '' );
alert(
	'array + push - ' + ( new Date() - startTime )
);

/*********************************************************/

for( startTime = new Date(), counter = repeatCount; counter > 0; counter-- ) {
	arrayFixSize[ counter ] = pattern;
}

arrayFixSize.join( '' );
alert(
	'array[ index ] - ' + ( new Date() - startTime )
);


Итог: во всех браузерах разное время, с точностью до наоборот :)

StelZ 12.05.2012 22:15

bes, не пойму по какому принципу работает данная программа. она же должна присваивать букве определенное число, равное номеру ряда и столбца (первый ряд(1) и первый столбец(1) - буква а - 11), и выводить переведенный текст в другое окошко

bes 12.05.2012 22:28

Получается что к глобальным переменным придётся обращаться не напрямую, а через get/set методы, наподобие того как в Delphi обращаются к полям через свойства, только без сохранения синтаксиса обращения.
И всё это, как я понимаю, из-за того что не обеспечена модульность (весь скрипт по каким бы он файлам не был разбросан воспринимается как единый модуль).

bes 12.05.2012 22:35

Цитата:

Сообщение от StelZ
bes, не пойму по какому принципу работает данная программа. она же должна присваивать букве определенное число, равное номеру ряда и столбца (первый ряд(1) и первый столбец(1) - буква а - 11), и выводить переведенный текст в другое окошко

Можно, конечно, и так сделать, то есть считать конечным шифром числа.
Я взял за основу описанный в википедии метод 2, когда получают координаты, затем к строке x-координат приписывают строку y-координат, а затем последовательно берут пары из строки, считают их координатами и переводят в буквы по той же таблице, то есть конечный шифр - слова.

B@rmaley.e><e 12.05.2012 22:48

Цитата:

Сообщение от bes
Получается что к глобальным переменным придётся обращаться не напрямую, а через get/set методы, наподобие того как в Delphi обращаются к полям через свойства, только без сохранения синтаксиса обращения.

Нет, неправильно получается. get и set функции приведены для примера, вместо них можно было реализовать любые другие функции, работающие с нужной переменной.

bes 12.05.2012 22:56

Цитата:

Сообщение от B@rmaley.e><e
Нет, неправильно получается. get и set функции приведены для примера, вместо них можно было реализовать любые другие функции, работающие с нужной переменной.

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

B@rmaley.e><e 12.05.2012 23:18

А Вам нигде из клиентского кода не нужно ею пользоваться.

bes 12.05.2012 23:24

nerv_, IE8 вообще подвисает на этом скрипте (потом отвисает выдавая результаты).
Хотя concat чаще выигрывает, изредка push немного опережает.

Цитата:

Сообщение от B@rmaley.e><e
А Вам нигде из клиентского кода не нужно ею пользоваться.

В смысле??


Часовой пояс GMT +3, время: 06:52.