UniLecs #145. Разгаданный кроссворд

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# задача решается буквально в пару строк. Детали реализации смотрите в коде.

Реализация:

C#

https://gist.github.com/unilecs/f404fbaf8ec3384b79aaf2763b93bfdd

Test: https://dotnetfiddle.net/LUQeLr

Report Page