Слово BANANA
появляется только один раз в этом поиске слова :
B A N A A N B B
A B A N A B A N
A N A B N N A A
N N B A A A N N
N A A N N N B A
A N N N B A N A
N A A B A N A N
B A N A N B B A
Слово для поиска выше , содержит только одно вхождение слова , BANANA
глядя вверх, вниз, влево, вправо, или по диагонали, но она имеет много подобных слов, как BANANB
, BANNANA
, BNANA
и т.д.
Ваша задача состоит в том, чтобы создать программу, которая будет генерировать ужасные поиски слов, как этот.
Ваша программа примет в качестве входных данных:
Одно слово из всех заглавных букв, содержащее от трех до семи уникальных букв, по крайней мере, из четырех букв.
Одно число, чтобы представить размер квадратной сетки для поиска слова. Число должно быть не меньше количества букв в слове.
А затем выведите слово для поиска, используя только буквы в слове, которое содержит ровно одно вхождение входного слова, и максимально возможное количество инфуриаторов .
Инфуриатор определяется как строка, которая имеет расстояние Дамерау-Левенштейна от целевого слова и начинается с той же буквы, что и слово. Ибо BANANA
это будет включать в себя такие слова, как:
BANBNA
где была заменена одна из букв.BANNANA
илиBANAANA
, где было добавлено дополнительное письмо.BANAN
,BNANA
где письмо было удалено, но нетANANA
, так как больше нетB
.BAANNA
илиBANAAN
, где две последовательные буквы были переключены.
При подсчете инфуриаторов в сетке поиска слов они могут перекрываться, но вы не можете сосчитать большую строку, если она полностью содержит меньшую строку, которую вы уже посчитали, или наоборот. (Если у вас есть BANANB
, вы не можете посчитать его снова, если вы уже посчитали BANAN
или наоборот BNANA
в нем.) Вы также не можете сосчитать любые строки, которые полностью содержат или полностью содержатся самим целевым словом (вы не можете сосчитать конкретное BANAN
это часть BANANA
, ни BANANAA
или BANANAN
.)
Ваша программа будет протестирована по определенному списку слов, составленному из слов, которые соответствуют требованию входного слова (будет дано позже, когда я его сгенерировал), по размеру сетки, равному удвоенной длине слова, и будет оценен на количество присутствующих в каждой сетке инфузоров. Пожалуйста , оставьте свои результаты для входов BANANA 12
, ELEMENT 14
и ABRACADABRA 22
для проверки.
источник
MURMURS
похоже на хороший тестовый пример, так как я думаю, что оптимальный ответ будет включать в себя сбросS
Ответы:
Java Script
Бонус: вы можете начать поиск слова. Семя по умолчанию: "codechallenge"
БАНАНА - 12:
ЭЛЕМЕНТ - 14:
Удачи: АБРАКАДАБРА - 22:
Дополнительно: MISSISSIPPI - 32:
источник
C ++
Я написал это сегодня. Это не самый эффективный способ и не всегда генерирует наиболее случайный поиск слов, но он выполняет свою работу и делает это относительно быстро.
Бонус: поддерживает Палиндромов тоже !!!
Это работает, принимая ввод для слова и размер слова поиска. Затем он генерирует инфураторы, сбрасывая буквы, вставляя буквы или подбрасывая буквы. Затем он добавляет их в сетку, а также правильное слово. Затем он проверяет все вхождения первой буквы в каждом направлении для слова. Если 1 экземпляр не найден (2 для палиндромов), он перебирает цикл. Затем он выводит поиск слова в консоль, а также в файл.
Здесь он содержит 213 строк кода с пробелами и комментариями.
Я далеко не эксперт по C ++, поэтому я уверен, что есть места, где этот код можно улучшить, но я был доволен тем, как он закончился.
Вот результаты.
Я могу обновить это, чтобы генерировать немного более «случайный» поиск слов.
источник
Excel VBA
Он работает, сначала случайным образом помещая слово в электронную таблицу, случайным образом как по положению, так и по направлению, затем заполняя непустые пробелы в окружающей сетке, случайным образом выбирая из всех, кроме последней буквы слова.
BANANA Выход (2, 1):
Выход ЭЛЕМЕНТА (6, 5):
Выход АБРАКАДАБРА (2, 3):
источник