parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Поиграем в слова :)

Ipo 18.05.2006 14:14

Есть два слова, назовем их ГЛАВНОЕ и ПРИСЛАНОЕ
задача сверить эти слова, чтобы буквы из присланного слова находились в главном слове. (или наоборот :) неважно)


вот мой код, но ! Всегда есть одно НО ...
возможно, ли сделать код лаконичнее и увеличить его быстродействие?
@_word_detect[w_send;w_main]

# создание таблицы букв главного слова
$W_M_Split[^table::create{piece}]
^for[i](0;^w_main.length[]-1){
    ^W_M_Split.append{^w_main.mid($i;1)}
}

# создание таблицы букв введенного слова
$W_S_Split[^table::create{piece}]
^for[i](0;^w_send.length[]-1){
    ^W_S_Split.append{^w_send.mid($i;1)}
}

# временный хеш для отбора проверенных букв
$W_T[^hash::create[]]

# типа счетчик числа совпадений
$W_C(0)

# перебераем введенное слово по буквам и сверяем его с заданным словом
^W_S_Split.menu{
# если у нас несколько одинаковых букв то надо проверить только одну, а вследующий раз другую
$Ti(0)
$It(0)
    ^W_M_Split.menu{
      ^if(($W_M_Split.piece eq $W_S_Split.piece) && ($W_T.$It ne 1) && ($Ti == 0)){
        $Ti(1) ^W_C.inc[] 
        $W_T.$It[1]
      }
      ^It.inc[]
     }
}

^if($W_C == ^w_send.length[]){$result(1)}{$result(0)}
}