Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.02.2011, 21:17
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Vulkan

Вот как, например, должна выглядеть вторая функция:

String.prototype.index = function (str) {
	var j = -1, c = false, L1 = this.length, L2 = str.length - 1;
	for (var i = 0; i < L1; i++) {
		if (str.charAt(0) === this.charAt(i))
			c = true, j = i;
		if (c && i === j + L2)
			return j;
		if (c && str.charAt(i) != this.charAt(i + j))
			c = false;
	}
	return j;
};


К своему стыду могу сказать, что эта задача потребовала от меня много усилий, это наверно из-за рисперидона. Оставляю Вам возможность решить первую задачу и вернуть звание дурачка обратно мне.
Ответить с цитированием
  #12 (permalink)  
Старый 19.02.2011, 21:28
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Зачем все так усложнять?
String.prototype.sepa = function(str, sep) {
     return this.replace(new RegExp(str, 'g'), sep);
};

alert('1 2 3 4 5'.sepa(' ', '-'));


Сообщение от Matre
Вот как, например, должна выглядеть вторая функция:
String.prototype.index = function(str) {
    return [this].join().search(str);
};

alert('1 2 3 4 5'.index('4'));

Последний раз редактировалось monolithed, 19.02.2011 в 21:43.
Ответить с цитированием
  #13 (permalink)  
Старый 19.02.2011, 21:33
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Matre
Вот как, например, должна выглядеть вторая функция:
Это функция
Сообщение от Matre
разделения строки на массив по разделителю (аналог String.prototype.split)
? В то же время это ни разу не аналог String.prototype.indexOf
String.prototype.index = function (str) {
	var j = -1, c = false, L1 = this.length, L2 = str.length - 1;
	for (var i = 0; i < L1; i++) {
		if (str.charAt(0) === this.charAt(i))
			c = true, j = i;
		if (c && i === j + L2)
			return j;
		if (c && str.charAt(i) != this.charAt(i + j))
			c = false;
	}
	return j;
};

var s1 = 'aababaO_o',
     l1 = 'aba', l2 = 'abac', l3 = 'aa', l4 = 'O_o';

alert( [
 [s1.index(l1), s1.indexOf(l1)],
 [s1.index(l2), s1.indexOf(l2)],
 [s1.index(l3), s1.indexOf(l3)],
 [s1.index(l4), s1.indexOf(l4)]
].join('\n') )

Последний раз редактировалось B@rmaley.e><e, 19.02.2011 в 21:36.
Ответить с цитированием
  #14 (permalink)  
Старый 20.02.2011, 10:58
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

monolithed

Цитата:
Встроенные функции использовать запрещено
B@rmaley.e><e

Всё ведь работает.
Ответить с цитированием
  #15 (permalink)  
Старый 20.02.2011, 11:06
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

По поводу своих вариантов - и правда забыл что в качестве параметров могут ещё и строки из нескольких символов передаваться, как время будет исправлю.
Matre, результаты работы твоей функции отличаются от результатов работы встроенной.
Ответить с цитированием
  #16 (permalink)  
Старый 20.02.2011, 11:31
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Matre
Всё ведь работает.
Где работает? Результаты совпали только в одном случае.
Ответить с цитированием
  #17 (permalink)  
Старый 20.02.2011, 12:10
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Цитата:
результаты работы твоей функции отличаются от результатов работы встроенной.
Цитата:
Где работает? Результаты совпали только в одном случае.
Не понял... Вы это имеете ввиду?
Ответить с цитированием
  #18 (permalink)  
Старый 20.02.2011, 12:50
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Это.
Ответить с цитированием
  #19 (permalink)  
Старый 20.02.2011, 13:14
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Какой-то чудной у Вас браузер.
Ответить с цитированием
  #20 (permalink)  
Старый 20.02.2011, 14:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Вариант...
String.prototype.index = function (b) {
    for (var a = -1, d = this.length, c = 0; c < d; c++) {
        if (b.length > d) break;
        a++;
        a = b.charAt(a) === this.charAt(c) ? a : b.charAt(0) === this.charAt(c) ? 0 : -1;
        if (a == b.length - 1) return c - b.length + 1
    }
    return a
};
var s1 = 'aababaO_o',
     l1 = 'aba', l2 = 'abac', l3 = 'aa', l4 = 'O_o';
alert( [
 [s1.index(l1), s1.indexOf(l1)],
 [s1.index(l2), s1.indexOf(l2)],
 [s1.index(l3), s1.indexOf(l3)],
 [s1.index(l4), s1.indexOf(l4)]
].join('\n') )

Последний раз редактировалось рони, 20.02.2011 в 14:46.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка на смекалку subzey Общие вопросы Javascript 52 16.08.2013 21:39
задачка по геометрии js lammeR Общие вопросы Javascript 16 02.02.2011 16:01
Небольшая задачка Maksim jQuery 4 30.09.2009 19:43
задачка на подумать x-yuri Оффтопик 16 11.06.2009 12:39
Задачка: вывод div по ссылке alt5000 Элементы интерфейса 19 28.10.2008 21:21