Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.11.2019, 16:58
Новичок на форуме
Отправить личное сообщение для Hokage777 Посмотреть профиль Найти все сообщения от Hokage777
 
Регистрация: 06.11.2019
Сообщений: 4

Определить минимальное количество символов,по которым можно разлечить слова.
Строка состоит из нескольких слов, разделенных пробелом. Определить минимальное количество первых символов слов, по которым можно различить слова в строке.
Входные данные:
abc5 abc0 abcde abcfg
Выходные данные:
4

Вот наработки:
let words = [];
let res = [];
let i;
let counter = 0;
let matrix = [];

    let val1 = "abc5 abc0 abcde abcfg";
    if ($('#val1').val() == '') alert('Введите данные')
    else {
        words = val1.split(' ');
        for (let i = 0; i < words.length; i++) {
            for (let j = 0; j < words[i].length; j++) {
                matrix[i] = words[i].split('');
            }
        }
        let matrxLength = matrix.length;
        for (let word = 0; word <=matrxLength+1; word++) {
            for (let sym = 0; sym < matrix[word].length; sym++) {
                console.log(matrix[word][sym]);
                if (matrix[word][sym] == matrix[word+1][sym]) {
                    if (res.includes(matrix[word][sym]) != true) {
                       console.log(res);
                        res.push(matrix[word][sym])
                    }

                }
            }
        }
      //  console.log(matrix);
      //  console.log(res);
    }
});

и еще один вариант:
for (let i = 0; i < words.length; i++) {
            for (let j = 0; j < words[i].length; j++) {
                matrix[i] = words[i].split('');
            }
      }
      console.log(matrix[0][0]);
      for (let word in matrix) {
          for (let symbol in matrix[word]) {
              if (matrix[word][symbol]==matrix[++word][symbol]){
                  if (res.includes(matrix[word][symbol])!=true){
                      console.log(res);
                      res.push(matrix[word][symbol])
                  }

          }


      }
    }
};
console.table(matrix);
console.log(res);
});
Ответить с цитированием
  #2 (permalink)  
Старый 06.11.2019, 17:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,309

Hokage777,
вариант ...
let val1 = "abc5 abc0 abcde abcfg";
const fn = str => {
    let words = str.split(/\s+/).sort((a,b)=> a.length - b.length);
    let word = words[0];
    for(let a of words){
        a = [...a];
        let temp = "";
      for(b of word){
        if(b == a.shift()) temp += b;
        else break;
      }
       if(temp) word = temp;
       else return 0
    }
    return word.length + 1
}
console.log(fn(val1))
Ответить с цитированием
  #3 (permalink)  
Старый 06.11.2019, 21:40
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 715

Сообщение от Hokage777
Определить минимальное количество первых символов слов, по которым можно различить слова в строке.
различить хотя бы одну пару слов, или различить любую пару слов?
вариант рони соответствует первому условию, т.е. для строки 'a5 abc0 abcde abcfg' он вернет 2, чего достаточно, чтобы различить первое и второе слово, но не хватит при сравнении 2 и 3 слов
Ответить с цитированием
  #4 (permalink)  
Старый 06.11.2019, 22:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,309

Сообщение от Alexandroppolus
различить любую пару слов
let val1 = "abc5 abc0 abcde abcfg";
let val2 = "a5 abc0 abcde abcfg";
const fn = str => {
    let words = str.split(/\s+/);
    let length = Math.max(...words.map(_=>_.length)), i = 0;
    k: for (; i < length; i++) {
        let temp = "";
    for(let a of words){
       if (a[i] !== void 0){
       if(temp.includes(a[i]))  continue k;
       temp += a[i];
       }

       }
       return ++i
    }
    return i
}
console.log(fn(val1))
console.log(fn(val2))
Ответить с цитированием
  #5 (permalink)  
Старый 06.11.2019, 23:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,409

var s = ' abcde abc5 abc0 abcfg'.trim(), 
    w = s.split(/\s+/); 

for(var i=1; i < w[0].length; ++i) if(s.match(new RegExp('\\b'+w[0].substr(0, i), 'g')).length < w.length) break;

console.log(i)

Последний раз редактировалось laimas, 07.11.2019 в 05:00.
Ответить с цитированием
  #6 (permalink)  
Старый 07.11.2019, 01:01
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,310

И ещё один вариант:
var str = " abc5 abc0 abcde abcfg";
var match = str.match(/^\s*(\S*)\S*(?:\s+\1\S*)*\s*$/);
var length = match ? match[1].length + 1 : 0;
console.log(length);

Последний раз редактировалось Malleys, 07.11.2019 в 01:08. Причина: Регулярное выражение сокращено!
Ответить с цитированием
  #7 (permalink)  
Старый 07.11.2019, 01:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,309

Malleys,
var str = " abc5 abc0 abcde abcdg";
var match = str.match(/^\s*(\S*)\S*(?:\s+\1\S*)*\s*$/);
var length = match ? match[1].length + 1 : 0;
console.log(length); //4 а нужно 5
Ответить с цитированием
  #8 (permalink)  
Старый 07.11.2019, 03:36
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,310

Сообщение от рони
//4 а нужно 5
А почему тогда, если у laimas получается 4, то он молодец? (Сообщение №5) Или у тебя? (Сообщение №2)

Получается нужно найти длину не наименьшей части подстроки, которая встречается в каждом слове, а такую длину L подстроки, которая однозначно определяла бы любое слово, в случае, если взять в нём не менее L символов.

Если пример от laimas запустить с s = ' w abcde abc5 abc0 abcfg', то он тоже показывает удивительнейшие вещи! Например, то, что человек, пропагандирующий уникальные идентификаторы, может продвигать решение, где они как раз-таки и не уникальные! (Нужно ведь идентифицировать слово)

Если поглядеть в пример от рони то совершенно не понятно, почему там получается 4, когда рони упорно провозглашает, что
Сообщение от рони
//4 а нужно 5
Видимо проповедники не всегда живут как учат!

Сообщение от рони
//4 а нужно 5
Почему тогда в начале темы пишут, что «Входные данные: abc5 abc0 abcde abcfg Выходные данные: 4»?
И laimas опубликовал решение раньше, а вы превзошли в правдивости всех!

рони, так значит в сообщениях №2, 5 и 6 находят длину наименьшей части подстроки, которая встречается в каждом слове?

рони, а вы потрясающе деструктурируете!
Вот вычисление такой длины L подстроки, которая однозначно определяла бы любое слово, в случае, если взять в нём не менее L символов... (без деструктуризации!)

function fn(str) {
	var length = 0;
	str.trim().split(/\s+/).sort(function(as, bs) {
		var i = Array.prototype.findIndex.call(as, (a,i) => bs[i] !== a)
		length = Math.max(length, 1 + i)
		return as > bs ? 1 : -1
	})
	return length
}

console.log(
	fn("abc5 abc0 abcde abcfg"),
	fn("a5 abc0 abcde abcfg"), 
	fn(" abcde abc5 abc0 abcfg")
) // включает все строки, упоминавшиеся в теме

Удивительно, упорно получается 4.
Ответить с цитированием
  #9 (permalink)  
Старый 07.11.2019, 04:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,409

Сообщение от Malleys
человек, пропагандирующий уникальные идентификаторы
Это в мой адрес? Вы ошиблись, я атеист.
Ответить с цитированием
  #10 (permalink)  
Старый 07.11.2019, 07:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 27,309

Сообщение от Malleys
А почему тогда, если у laimas получается 4, то он молодец? (Сообщение №5) Или у тебя? (Сообщение №2)
потому что неверно понял условие задачи первоначально.
Сообщение от Malleys
Если поглядеть в пример от рони то совершенно не понятно, почему там получается 4, когда рони упорно провозглашает, что
Сообщение от рони
//4 а нужно 5
Видимо проповедники не всегда живут как учат!

Сообщение от рони
//4 а нужно 5
Почему тогда в начале темы пишут, что «Входные данные: abc5 abc0 abcde abcfg Выходные данные: 4»?
бред какой-то.
что не так с результатом 5!!!
если ваш новый код даёт тоже 5!!!
function fn(str) {
	var length = 0;
	str.trim().split(/\s+/).sort(function(as, bs) {
		var i = Array.prototype.findIndex.call(as, (a,i) => bs[i] !== a)
		length = Math.max(length, 1 + i)
		return as > bs ? 1 : -1
	})
	return length
}

console.log(
	fn(" abc5 abc0 abcde abcdg")
) // 5

P.S.
Malleys,
вероятно вы не заметили разницу в строке пост #7 и пост #6

Последний раз редактировалось рони, 07.11.2019 в 07:51.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просмотрела исходик jQuery Откорректируйте где не верно taksebe jQuery 5 23.11.2018 22:42