Каков самый короткий способ узнать, является ли ввод словаинским с использованием какого-либо языка программирования?
Wordinian - это слово, которое содержит слова длиной от 1 до длины исходного слова. Например,
бункер
«Я» - это слово
«в» - это слово
«бин» - это слово
Или,
сцена
«a» - это слово
«ta» - это слово ( да, это так );
«age» - это слово.
«stag» - это слово.
«stage» - это слово.
вход
Ваш код должен принимать слово и словарь в качестве входных данных в любом разумном формате.
Выход
Выходными данными должно быть значение, указывающее true или false, чтобы сказать нам, является ли слово wordinian.
Для получения дополнительной информации о Wordinians нажмите здесь .
Вот список слов, которые я буду использовать в качестве входных данных и подслов. Кроме того, в ответ на @xnor он должен содержать подслова каждой длины, а не цепочку подслов. Обратите внимание, что в качестве входных данных будет использоваться только одно слово.
источник
Ответы:
Pyth,
2016151311 байтСпасибо Leaky Nun за сохранение 4 байта! К сожалению, я изменил весь метод впоследствии, но он все же помог.
Ожидается ввод в виде словаря с последующим словом. Выходы True или False.
Попробуй это здесь!
Объяснение:
Это не работает, если пустая строка
""
является допустимым словом.источник
.E
может быть заменено наs
m}kH
может быть заменено на}RH
Python, 52 байта
Анонимная функция, которая принимает слово
w
и словарьd
. Он принимает словаd
, являющиеся подстрокамиw
, устанавливает набор их длин, а затем проверяет, что существует столько разных длин, сколько есть буквw
.источник
[
вместо{
.{...}
это набор понимания (так же, какset([...])
).Python 3, 108 байт
Анонимная функция, которая принимает через аргумент ввод слова
w
в виде строки и словарьd
в виде списка строк и возвращаетTrue
илиFalse
.Как это устроено
Первым шагом является понимание списка, который генерирует список списков всех подстрок
w
исключенияw
, сгруппированных по длине. Например, для'stage'
, список[['s', 't', 'a', 'g', 'e'], ['st', 'ta', 'ag', 'ge'], ['sta', 'tag', 'age'], ['stag', 'tage']]
генерируется. Это достигается за счет зацикливания всех допустимых начальных индексовi
для каждой длины подстрокиs
и разрезания каждойs
подстроки с использованиемw[i:i+s]
. Для каждого списка в этом списке проверяется наличие каждой подстроки в словаре; Вызовany
возвращает попадание, если найдено хотя бы одно совпадение для заданной длины. Наконец, вызовall
проверяет, найдено ли совпадение для всех длин подстрок, и возвращается результат этого.Попробуйте это на Ideone
источник
Рубин, 44 байта
w[x]&.size
:)Это анонимная функция, которая берет слово
w
и словарь (массив слов)d
. Создает два массива: первый, содержащий числа от 1 до, включая длинуw
; Во втором массивеd
каждое слово сопоставляется с их размером, если они являются подстрокойw
, в противном случаеnil
. Затем он устанавливает вычитание, чтобы проверить, содержит ли второй массив все элементы первого массива.источник
w[x]&.size==i
вместоx.size==i&&w[x]
.uniq
и-[p]
и используя множество вычитания вместо этого:[*1..w.size]-d.map{...}==[]
PowerShell
v3 +v2 +,1271107065 байт(Теперь я вижу, что мой подход похож на @ xnor's, хотя я разработал его независимо)
Принимает входное слово
$a
и словарь$d
, ожидая$d
в виде массива (см. Примеры ниже). Перебирает всю полноту$d
и выполняет выборкуWhere-Object
для извлечения записей, где текущее слово$_
является регулярным выражением-match
для входного слова$a
(то есть является ли текущее слово подстрокой входного слова).Мы собираем все эти слова подстроки и направляем их
Select-Object
наlength
параметр и-U
ограничение nique. Это вытянет уникальные длины каждой подстроки. Например, для входного словаcomb
это будет массив(4,2)
для('comb','om')
.Мы берем
.count
этот результирующий массив и сравниваем его с входным словом.length
. Если оно равно, это означает, что каждая длина подстроки находится в словаре, так что$TRUE
, в противном случае мы пропускаем хотя бы одну, поэтому$FALSE
. Это логическое значение остается в конвейере, а вывод неявным.NB. Это должно работать в v2 +, поскольку
-in
оператора больше нет, но я не тестировал эту версию.Примеры
источник
Perl, 86 байт
Требуется
-E
без каких-либо дополнительных затрат.Принимает все ввод через STDIN. Первый ввод - целевое слово, остальная часть ввода - словарь. Печать
1
при успехе, пустая строка при ошибке.использование
источник
Mathematica, 90 байт
Использует встроенную Mathematica
DictionaryWordQ
.Принятие ввода в
d
качестве словаря на 5 байт короче, но намного длиннее для длинных списков:источник
MATL , 15 байт
1 байт сохранен с использованием идеи из ответа @ xnor .
Выходы
1
или0
для правдивых или фальшивых.Попробуйте онлайн!
источник
Perl,
4241 байтВключает +2 для
-p0
Дайте слово, за которым следует словарь на STDIN:
(При тестировании в Unix убедитесь, что словарь dictionary.txt используется в
\n
качестве ограничителя строки, а не\r\n
)wordinian.pl
:источник
JavaScript (Firefox 30-57), 68 байт
Использование генератора понимания позволяет избежать создания промежуточного массива. 73-байтовая версия ES6:
источник
05AB1E , 8 байтов
Слово в качестве первого ввода, словарь-список в качестве второго ввода.
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
Котлин , 51 байт
Попробуйте онлайн!
источник
SQF , 147 байт
Использование формата «функция как файл»:
Звоните как:
["WORD", DICTIONARY] call NAME_OF_COMPILED_FUNCTION
Ungolfed:
источник