Лехко! Аффтар не читает HIG!!! Alert на возврате результата - мастдай. Надо возвращать строчку, которую потому втюхивать в какой-нибудь innerHtml, дабы не вводить пользователя в заблуждение, в коем он может впасть, машинально посчитав выскочившее сообщение с результатом сообщением об ошибке! :-)
Какой фонт?
Хочется тоже отрубить антиалиас для мелких фонтов, но как отрубаю, так шрифты полным отстоем начинают выглядеть.
Юзаю дебиан сарж, ни каких патчей и тд не прикручивал.
1. Чем j-- отличается от --j не знаешь.
2. 3 копирования строки на один вызов. За такое руки надо отрывать и вставлять в плечи.
3. Ну про глобальную j уже написали по аське.
4. Поведение у функции reverse при str.length == 0 очень забавное.
5. Проверка диапазона производится без оглядки на тип. То есть если придет строка параметром - будет весело.
6. ...
по теории инженерии ГУИ, alert - бестолковая функция, кою вообще нельзя использовать: при получении информации, юзера обязывают ввести дополнительную инфу - клик по кнопке, что реально не нужно и необходимо обходить.
> 2. 3 копирования строки на один вызов. За такое руки надо отрывать и вставлять в плечи.
> 3. Ну про глобальную j уже написали по аське.
> 4. Поведение у функции reverse при str.length == 0 очень забавное.
Будет возвращено parseInt(""); 0?
> 5. Проверка диапазона производится без оглядки на тип. То есть если придет строка параметром - будет весело.
если вкратце, то конкатенацию лучше делать через массив:
var x = new Array();
x.push('ff')
f.push('zz')
var o = x.join('')
работает существенно быстрей. На мелких объемах, конечно, роли не играет,
но когда нужно собрать большую таблицу или даже целую страничку -
очень даже реальный выйгрыш получается
От 1 до 10000
В данном случае твой способ проиграл:
reverse: 1.2 сек в среднем (не работает в IE доступ к строке через random access)
reverse2: 1.8 сек в среднем
reverse3: 1.1 сек в среднем (работает в IE)
Не знаю, может быть на более длинных строках твой способ и выиграет. У меня на это времени нет. В любом случае оптимизировать надо, но только тогда, когда сценарий уже написан.
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="Content; charset=windows-1251" >
<script language="javascript" type="text/javascript">
function reverse(str)
{
str = str.toString();
var str2 = "";
for(j=str.length; j>0; j--)
{
str2 += str[j-1];
}
return parseInt(str2);
}
function reverse3(str)
{
str = str.toString();
var str2 = "";
for(j=str.length; j>0; j--)
{
str2 += str.substr(j-1, 1);
}
return parseInt(str2);
}
function reverse2(str)
{
str = str.toString();
var str2 = new Array();
for(j=str.length; j>0; j--)
{
str2.push(str[j-1]);
}
return parseInt(str2.join(''));
}
function doit()
{
var b = new Date();
var sec = b.getSeconds();
var msec = b.getMilliseconds();
var from = parseInt(document.getElementById("from").value);
var to = parseInt(document.getElementById("to").value);
var res = "";
if(to < from)
{
alert("Неправильный диапазон!");
return;
}
res += "Полиндромы: \n";
for(i=from; i<=to; i++)
{
if(i==reverse(i))
{
res += i + " ";
}
}
var a = new Date();
var sec2 = a.getSeconds();
var msec2 = a.getMilliseconds();
var raznica = (sec2+msec2/1000)-(sec+msec/1000);
alert(raznica);
//alert(res);
}
</script>
</head>
<body>
От: <input type="text" id="from"/><br/>
До: <input type="text" id="to"/><br/>
<input type="submit" value="Найти полиндромы" onclick="doit();"/>
</body>
</html>
я же написал, на мелких массивах смысла нет:
лучше попробуй так
var res = new Array();
for(i=from; i<=to; i++)
res.push(i.toString())
res = res.join('');
и вот так
var res = "";
for(i=from; i<=to; i++)
res += i.toString()
Первый вариан - 0.9, второй - 11