У меня есть кодовый замок, в котором вместо цифр есть буквы. Это выглядит так: http://pictures.picpedia.com/2012/09/Word_Combination_Padlock.jpg Есть 5 барабанов, на каждом из которых есть 10 разных букв.
Большинству людей нравится использовать слово для их комбинации, а не произвольную строку букв. (Конечно, менее надежно, но проще для запоминания.) Поэтому при изготовлении замка было бы неплохо создать его, чтобы иметь комбинацию букв, которые можно использовать для создания максимально возможного количества 5-буквенных английских слов.
Ваша задача, если вы решите принять ее, - найти назначение букв барабанам, которые позволят создать как можно больше слов. Например, ваше решение может быть
ABCDEFGHIJ DEFGHIJKLM ZYXWVUTSR ABCDEFGHIJ ABCDEFGHIJ
(Если вы не чувствовали себя слишком изобретательно).
Для согласованности, пожалуйста, используйте список слов на http://www.cs.duke.edu/~ola/ap/linuxwords
Любое 5-буквенное слово в этом списке в порядке, включая собственные имена. Не обращайте внимания на китайско- и львовские слова и любые другие слова в списке, которые содержат не-азный символ.
Программа-победитель - это та, которая производит самый большой набор слов. Если несколько программ находят один и тот же результат, выигрывает первая из них. Программа должна быть запущена менее чем за 5 минут.
Изменить: так как активность прекратилась, и лучшие решения не вышли, я объявляю Питера Тейлора победителем! Спасибо всем за ваши изобретательские решения.
источник
Ответы:
1275 слов простым жадным восхождением
Код это C #. Решение получено
Я использую этот формат вывода, потому что это действительно легко проверить:
источник
Main
метод для вызова разных_Main
методов.Питон (3), 1273 ≈ 30,5%
Это действительно наивный подход: подсчитывайте частоту каждой буквы в каждой позиции, затем устраняйте «худшую» букву, пока оставшиеся буквы не поместятся на барабанах. Я удивлен, что это, кажется, так хорошо.
Что самое интересное, у меня почти такой же вывод, как у решения C # 1275, за исключением того, что
N
вместо этого у меня на последнем барабанеA
. ЭтоA
было мое 11-ое к последнему устранению, даже прежде, чем выбросить aV
и aG
.Производит:
источник
Mathematica , 1275 слов снова и снова ...
Этот код не Golf, так как вопрос, кажется, не требует этого.
Количество слов быстро (менее 10 секунд) увеличивается до 1275 на большинстве трасс, но никогда не выходит за рамки этого. Я пытался возмущать буквы более чем по одному за раз, пытаясь выйти из теоретического локального максимума, но это никогда не помогало. Я сильно подозреваю, что 1275 является пределом для данного списка слов. Вот полный прогон:
Вот некоторые другие "выигрышные" выборы:
Как комментирует Питер, на самом деле это одно и то же решение в разных порядках. Сортировка:
источник
shortlist
кажется длинным, и хотя это не Golf, я бы хотел кое-что покороче. Вы можете помочь?Python, 1210 слов (~ 29%)
Если на этот раз я правильно посчитал слова, это немного лучше, чем решение FakeRainBrigand. Единственное отличие состоит в том, что я добавляю каждый барабан по порядку, а затем удаляю из списка все слова, которые не соответствуют барабану, поэтому я получаю немного лучшую раздачу для следующих барабанов. Из-за этого он дает точно такой же первый барабан.
Программа выводит
источник
iPython (
273210 байт, 1115 слов)1115/4176 * ~ 27%
Я рассчитал их в iPython, но моя история (обрезанная для удаления отладки) выглядела так.
Если мы собираемся для краткости; Я мог бы подрезать это к этому.
Укороченный:
Мои результаты:
['sbcapfdtmg', 'aoeirulhnt', 'aironeluts', 'etnlriaosc', 'seyrdtnlah']
.* Моя математика на 4176 может быть немного короткой из-за пропущенных слов с дефисами или апострофами
источник
Q
? (todo) слова
Слова должны храниться в файле с именем
words
Работает около 170 мс на моем i7. Он анализирует список слов, ищет наиболее распространенные буквы в каждой позиции (очевидно, отфильтровывая всех кандидатов). Это ленивое наивное решение, но дает достаточно хороший результат с минимальным кодом.
Результаты:
источник
Изменить: Теперь, когда правила были изменены, этот подход дисквалифицирован. Я собираюсь оставить это здесь на тот случай, если кому-то будет интересно, пока я, наконец, не смогу изменить его для новых правил.
Питон: 277 символов
Я почти уверен, что обобщенной версией этой проблемы является NP-Hard, и этот вопрос не требовал нахождения самого быстрого решения, так что вот метод грубой силы:
Обратите внимание, что я переименовал файл списка слов в «w», чтобы сохранить несколько символов.
Выходными данными является количество слов, которые возможны из данной конфигурации, за которыми следует сама конфигурация:
Последняя строка вывода перед завершением программы гарантированно будет оптимальным решением.
источник