Вот один для всех вас словесников! Напишите программу или функцию, которая берет список слов и создает список всех возможных конкатенативных разложений для каждого слова. Например:
(Примечание: это только небольшая выборка для иллюстративных целей. Фактический результат гораздо более объемный.)
afterglow = after + glow
afterglow = aft + erg + low
alienation = a + lie + nation
alienation = a + lien + at + i + on
alienation = a + lien + at + ion
alienation = alien + at + i + on
alienation = alien + at + ion
archer = arc + her
assassinate = ass + as + sin + ate
assassinate = ass + ass + in + ate
assassinate = assassin + ate
backpedalled = back + pedal + led
backpedalled = back + pedalled
backpedalled = backpedal + led
goatskin = go + at + skin
goatskin = goat + skin
goatskin = goats + kin
hospitable = ho + spit + able
temporally = tempo + rally
windowed = win + do + wed
windowed = wind + owed
weatherproof = we + at + her + pro + of
yeasty = ye + a + sty
Хорошо, вы поняли идею. :-)
правила
- Используйте любой язык программирования по вашему выбору. Самый короткий код за счет количества символов для каждого языка выигрывает. Это означает, что есть один победитель для каждого используемого языка. Абсолютным победителем будет просто самый короткий код из всех представленных.
- Список ввода может быть текстовым файлом, стандартным вводом или любой структурой списка, которую обеспечивает ваш язык (список, массив, словарь, набор и т. Д.). Слова могут быть английским или любым другим естественным языком. (Если список состоит из английских слов, вам нужно игнорировать или предварительно отфильтровывать однобуквенные элементы, за исключением «a» и «i». Аналогично, для других языков вы захотите игнорировать бессмысленные элементы, если они появляются в файле.)
- Список вывода может быть текстовым файлом, стандартным выводом или любой структурой списка, которую использует ваш язык.
- Вы можете использовать любой входной словарь, который вам нравится, но вы, вероятно, захотите использовать тот, который предоставляет разумные слова, а не тот, который содержит слишком много неясных, загадочных или однотонных слов. Этот файл, который я использовал: список Corncob из более чем 58000 английских слов
Вопросов
Эта задача, прежде всего, заключается в написании кода для выполнения задачи, но также интересно просматривать результаты ...
- Какие подслова встречаются чаще всего?
- Какое слово можно разложить на наибольшее количество подслов?
- Какое слово можно разложить самыми разными способами?
- Какие слова состоят из самых больших подслов?
- Какие декомпозиции вы нашли наиболее забавными?
code-golf
string
natural-language
Тодд Леман
источник
источник
alienation
когда я вырезал и вставил это. Исправлено сейчас. Что касается других, приведенный выше список является лишь небольшой выборкой. Моя тестовая программа вызвала десятки тысяч ответов при получении списка Corncob.Ответы:
Python 186
Не особенно эффективно, но на самом деле не ужасно медленно. Это просто наивно (я полагаю, что это возможно, хотя я думаю, что маловероятно, что python делает некоторые умные оптимизации) проверяет, что подслов находятся в словаре кукурузного початка и рекурсивно находит столько слов, сколько может. Конечно, этот словарь довольно обширный, и вы можете попробовать тот, который не включает в себя различные сокращения и сокращения (приводя к таким вещам, как
bedridden: be dr id den
). Также в связанном словаре не было слов «A» или «I» в качестве слов, поэтому я добавил их вручную.Редактировать:
Теперь первым вводом является имя используемого словаря, а каждый дополнительный - слово.
источник
print f
должно бытьprint(f)
echo archer|python2 filename.py
выводит EOFError для последней строкиfor f in W(raw_input()):print f
=>''.join(W(raw_input())
;a=open('c').read().split('\n')
=>a=open('c').readlines()
readlines
символы перевода строки будут находиться в конце строк, поэтому я сделал это так, как сделал.join
все элементы должны быть строками, и я не могу получить их в форме, меньшей, чем у меня уже есть.Кобра - 160
Это функция (сортировка двух функций), которая принимает
List<of String>
* и печатает строки, содержащие возможные расположения подслов для каждой строки в списке аргументов.* тип на самом деле
List<of dynamic?>
, но предоставление чего-либо другогоList<of String>
, вероятно, сломает его.источник
Скала,
132129Редактировать: немного короче, чем цикл чтения из стандартного ввода, чем функция
беги как
(или используйте более длинный список слов :))
Оригинал:
Функция от Seq [String] до Seq [Seq [List [String]]]. Принимает словарь в качестве аргументов командной строки.
Ungolfed:
Подход состоит в том, чтобы сгенерировать все возможные списки подстрок и отфильтровать те, которые содержат строку, отсутствующую в словаре. Обратите внимание, что некоторые из сгенерированных подстрок содержат дополнительную пустую строку, я предполагаю, что пустая строка не будет в словаре (в любом случае ее нельзя передать в командной строке).
источник