UniLecs #145. Разгаданный кроссворд
UniLecsЗадача: в газетке дан кроссворд, ктр задан таблицей N*N, где в каждой клетке таблицы указана какая-то буква. По правилам этого кроссворда нужно найти определенные слова, причем они должны быть расположены так, чтобы клетка, в ктр расположена след.буква слова, была соседней с клеткой, в ктр записана предыдущая буква. И кто-то уже выписал все слова из этого кроссворда.
Но после того, как кроссворд разгадан, оставшиеся (неиспользованные буквы) образуют пасхалку, ктр и нужно найти.
Входные данные: arr[N][N] - символьная матрица, ктр задает таблицу кроссворда, где N от 1 до 100.
keys[M] - разгаданные слова кроссворда.
Гарантируется, что в кроссворде можно найти по описанным правилам все разгаданные слова.
Вывод: оставшиеся буквы кроссворда.
Пример:
{ { 'U', 'T', 'H', 'E' },
{ 'N', 'A', 'S', 'K' },
{ 'I', 'L', 'E', 'C' },
{ 'L', 'L', 'O', 'S' } }
Keys: [ "TASK", "UNILECS"]
Answer:
HELLO
Идея: так как по условию, все разгаданные слова гарантировано можно найти в исходной таблице, то задачу можно решить очень просто. Нам достаточно удалить все символы разгаданных слов их исходной таблицы, т.к. порядок этих символов нам не важен. После этого в таблице останутся искомые символы, ктр и будут ответом. Используя функции LINQ из C# задача решается буквально в пару строк. Детали реализации смотрите в коде.
Реализация:
https://gist.github.com/unilecs/f404fbaf8ec3384b79aaf2763b93bfdd