Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск слова в матрице (https://javascript.ru/forum/misc/77235-poisk-slova-v-matrice.html)

noterindas 09.04.2019 13:38

Поиск слова в матрице
 
Всем привет. Помогите решить задачу на поиск слова в матрице. Например, дан массив из слов
[
"альфа",
"гамма",
"омега"
]

а также слово, которое надо найти, например, "мал".
Слово должно читаться в любых направлениях (вверх, вниз, вправо, влево), и не должно изгибаться в процессе чтения.

рони 09.04.2019 13:48

noterindas,
что должно быть результатом поиска?

noterindas 09.04.2019 13:59

true

Dilettante_Pro 09.04.2019 15:34

Ничего не понял насчет
Цитата:

Сообщение от noterindas
Слово должно читаться в любых направлениях (вверх, вниз, вправо, влево), и не должно изгибаться в процессе чтения.

<style>
span { font-weight:bold; }
</style>
<div id='cont'></div>
<script>
var arr= ["альфа","гамма","омега"];
var model = "га";
for(var i = 0; i<arr.length;i++) {
  var place = arr[i].indexOf(model);

  if(place >= 0) {
      cont.innerHTML += arr[i].substring(0,place ) + '<span>' 
      + arr[i].substring(place ,place + model.length) + '</span>' 
       + arr[i].substring(place+model.length ) + '<br>';
   }
}
</script>

рони 09.04.2019 15:48

Dilettante_Pro,
массив дополняется "словами" столбцов "аго" и т.д., всего 8 слов получается, если из них хотябы одно содержит или "мал" или "лам" вернуть true.

рони 09.04.2019 16:13

noterindas,
let ar = [
"альфа",
"гамма",
"омега"
 ];
function fn(ar, str)
{  const a = [...str], b = a.slice(0).reverse().join("");
   return ar.some((v,i) => {
       if(v.indexOf(str) !== -1 || v.indexOf(b) !== -1) return true;
       let idx = v.indexOf(a[0]);
       if(idx === -1) return false;
       return a.every((s,k) => ar[i + k] && s === ar[i + k][idx]) || a.every((s,k) => ar[i - k] && s === ar[i - k][idx])
   })
}

alert(fn(ar, "мал"));

laimas 09.04.2019 16:39

рони, может проще проверять - если крайние символы входного значения не равны символам первого и последнего элемента, то продолжаем, и только если есть равенство, то проверяем средний?

рони 09.04.2019 16:55

laimas,
вангую образец любой длины

laimas 09.04.2019 16:59

Цитата:

Сообщение от рони
вангую образец любой длины

Ну тогда да.


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