Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 20.02.2011, 17:38
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

B@rmaley.e><e,
Верно подмечено. (-:
Ответить с цитированием
  #32 (permalink)  
Старый 20.02.2011, 18:06
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от with-love-from-siberia
Задача действительно решается в один цикл
Почему???
Это явный бред! Или может здесь кто-то панически боится циклов и микробов?
Сообщение от B@rmaley.e><e
Кто еще верит, что все так просто?
В моем варианте все верно, хотя он предельно прост, так что я - верю!
Ответить с цитированием
  #33 (permalink)  
Старый 20.02.2011, 18:23
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

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

Sweet, таково условие - один цикл.
Vulkan, это все ерунда. Под одним циклом подразумевалась сложность O(n) (простой цикл по всем элементам строки). А поиск лазеек и дыр в правилах оставим юристам.

Последний раз редактировалось B@rmaley.e><e, 20.02.2011 в 19:03.
Ответить с цитированием
  #35 (permalink)  
Старый 20.02.2011, 19:26
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Ой, извините! Я думал про один цикл - это не изначальное условие.
Впрочем, есть не один способ перебора без цикла, например, вот (внизу). Или вот, например:
String.prototype.index = function(x){  
  var string = this, l1 = this.length, l2 = x.length;

  for(var i = 0; i < l1; i++) if(this[i] === x[0] && (function(){
    var count = 0;
  
    return (function(){
      if( count === l2 ) return true;
      if( string[i + count] === x[count++] ) return arguments.callee();
      return false;
    })();
    
  }())) return i;
  return -1;
};
Ответить с цитированием
  #36 (permalink)  
Старый 20.02.2011, 19:30
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Sweet,
Сообщение от B@rmaley.e><e Посмотреть сообщение
Под одним циклом подразумевалась сложность O(n) (простой цикл по всем элементам строки). А поиск лазеек и дыр в правилах оставим юристам.
Ответить с цитированием
  #37 (permalink)  
Старый 20.02.2011, 21:47
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Продолжаю утверждать, что это простой алгоритм, который не требует особых хаков в стиле JS и который решается одним циклом.

Пусть даны СТРОКА1 и СТРОКА2. Найти позицию вхождения СТРОКА2 в СТРОКА1

Выполните цикл не более чем i < (длина СТРОКА1 - (длина СТРОКА2 / 2))
Сравнивайте начальный (0) и конечный символы (длина СТРОКА2 - 1) из СТРОКА2 с текущими позициями в СТРОКА1 (i) и (i + длина СТРОКА2 - 1), соответственно. Повторяйте сравнение.
Ответить с цитированием
  #38 (permalink)  
Старый 20.02.2011, 21:59
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Т.к. теоретически точка начала совпадений мот быть в любой(каждой) позиции простым циклом нельзя(без встроенных функций[любых]).
Мой вариант:
String.prototype.at = function(str) {
	var tl = this.length, sl = str.length;
	if(tl >= sl) {
		for(var i=0, j=0; i<tl; i++) {
			if(this[i] == str[j]) {
				++j; if(sl == j) {return ++i-j;}
			}
			else{
				if(this[i] == str[0]) {j=1;}
				else {i-=j; j=0;}
			}
		}
		return -1;
	}
	else {
		return -1;
	}
}

var s1 = 'aababababaO_o', l1 = 'ababaO', l2 = 'abac', l3 = 'aa', l4 = 'O_o';

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

Последний раз редактировалось float, 20.02.2011 в 22:11.
Ответить с цитированием
  #39 (permalink)  
Старый 20.02.2011, 22:17
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от float
Т.к. теоретически точка начала совпадений мот быть в любой(каждой) позиции простым циклом нельзя(без встроенных функций[любых]).
Раскройте смысл сказанного? То что Вы написали здесь противоречит Вашему же примеру.
Ответить с цитированием
  #40 (permalink)  
Старый 20.02.2011, 22:20
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
То что Вы написали здесь противоречит Вашему же примеру.
Не противоречит, т.к. в примере итераций больше чем букв в строке. Line 10

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка на смекалку 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