По заданной строке s
и массиву / списку l
определите, s
можно ли создавать детали из l
.
Например, если строка есть, "Hello, world!"
а список есть [' world!', 'Hello,']
, то программа / функция должна вернуть истинное значение, потому что вы можете упорядочить список для формирования строки. Следующий список будет также возвращать значение truthy: ['l', 'He', 'o, wor', 'd!']
. Просто представьте, 'l'
где он должен заполнить строку. Так что да, вы можете повторить элементы списка, чтобы сформировать строку. Если он не может сформировать строку, он должен вернуть ложное значение. Применяются стандартные методы ввода-вывода, стандартные лазейки.
Тестовые случаи:
Input (In the form of s, l)
Output (1 if possible, 0 if impossible)
"Hello, world!", ["l", "He", "o, wor", "d!"]
1
"la lal al ", ["la", " l", "al "]
1
"this is a string", ["this should return falsy"]
0
"thi is a string", ["this", "i i", " a", " string"]
0
"aaaaa", ["aa"]
0
"foo bar foobar", ["foo", "bar", " ", "spam"]
1
"ababab", ["a","ba","ab"]
1
"", ["The string can be constructed with nothing!"]
1
code-golf
string
decision-problem
subsequence
Товарищ Спаркл Пони
источник
источник
"ababab", ["a","ba","ab"]
Ответы:
Брахилог , 8 байт
Попробуйте онлайн!
Это действительно медленно. Потребовалось около 37 секунд для «Привет, мир!» контрольный пример на моем ПК и тайм-аут на TIO.
Это берет строку через переменную Input и список через переменную Output
объяснение
источник
["la", " l", "al "]
списком он завершился на моем компьютере и правильно ответилfalse.
через 6800 секунд, и «только» 113 миллиардов выводов.Mathematica, 29 байт
Объяснение:
Пограничный читерский раствор, 21 байт
Поскольку Mathematica является символическим языком программирования, нет никакой разницы между выражениями
List[a,b,...]
иAlternatives[a,b,...]
другими, кроме того, как они взаимодействуют с другими символами и как они отображаются ({a,b,...}
иa|b|...
, соответственно). При использовании второго аргументаStringMatchQ
,Alternatives
выражение трактуется как строка рисунок, и , таким образом , мы можем сохранить8
байты над моим выше решением, взяв второй аргумент в качествеAlternatives
выражения.* Технически
List
такжеLocked
, что не позволяет пользователям использоватьUnprotect
его и изменять его поведение.источник
{x,y,z}
обрабатывается так же, как иx|y|z
при сопоставлении с образцом строки. Я думаю, что вы можете заменить""|##&@@#2..
просто#2..
.Pyth, 23 байта
Принимает участие как
[['string'],['list', 'of', 'parts']]
. Выходными данными является либо пустой список, либо список со значениями внутри. В Pyth список, содержащий что-либо, даже пустую строку (['']
), оценивается как true.Попробуйте онлайн!
Объяснение:
Это решение непрерывно пытается удалить каждую возможную часть из начала строки и отслеживает, какие значения ему еще нужно просмотреть.
Если мы посмотрим на значение
G
в тестовом примере[['ababab'],['a','ba','ab']]
после каждой итерации цикла while, мы получим следующее:И в тестовом примере
[['aaaaa'],['aa']]
это то, что мы получаем:Я создал еще один тестовый пример,
[['aaaaaa'],['a','aa','aaa']]
и результат был такой:Выходной список содержит кучу мусора внутри него, но это все еще истинное значение.
источник
Perl 5 , 39 байт
38 байт кода +
-p
флаг.Попробуйте онлайн!
Для ввода
"Hello, world!", ["l", "He", "o, wor", "d!"]
(фактически разделенного символом новой строки) он создает шаблонl|He|o, wor|d!|
(с экранированными метасимволами, спасибо\Q..\E
), а затем проверяет, соответствует ли первая строка этому шаблону/^($v)*$/
.На TryItOnline обратите внимание, что должен быть завершающий перевод строки.
источник
undef
это ложное значение, возвращаемое большинством встроенных функций. И при печати это фактически ничего не печатает. И это именно то, что я делаю. Печать «1/0» естественна для языков, подобных C, но для Perl «1 / undef» естественен.PHP, 69 байт
Testcases
источник
["", ["The string can be constructed with nothing!"]]
Python 2, 141 байт
Попробуйте онлайн!
Крайне неэффективно. Первый тестовый случай истекает на TIO.
источник
JavaScript (ES6), 59 байт
Принимает массив подстрок
a
и строкуs
в синтаксисе каррирования(a)(s)
. Возвращаетfalse
/true
.комментарии
Контрольные примеры
Показать фрагмент кода
источник
Haskell , 35 байт
#
принимаетString
и списокString
s, и возвращаетBool
.Попробуйте онлайн!
Только не берите в голову тестовый пример, который я пропустил, потому что он побил мой скудный ноутбук, даже с -O2. Я подозреваю, что GHC не расплавляет этот промежуточный список элементов 30517578125, у него слишком много общего доступа, чтобы быстро собрать мусор, и поскольку тестовый случай ложный, программа должна генерировать все это ... не стесняйтесь пробовать, если можете справиться с этим.
mapM("":)(l<$s)
список всех способов составленияlength s
списка элементов, которые являются либо пустыми строками, либо строками изl
.источник
Pyth,
17151114 байтТребование к пустой строке изменилось, добавив 3 байта.
объяснение
Старые версии
Более короткие и бежит в жизни вселенной!
объяснение
Это ужасно медленно, но это работает для моих (тривиально маленьких) тестовых случаев.
объяснение
источник
Желе ,
14128 байтПопробуйте онлайн!
Как это работает
Исправление в случае,
"", ["The string can be constructed with nothing"]
благодаря @JonathanAllanисточник
"", ["The string can be constructed with nothing!"]
;FŒṖḟ⁹$€Ạ¬
исправит это.ḟ
, так что вам не нужны$
или⁹
:;FŒṖḟ€Ạ¬
.¬
их операцией, которая всегда возвращает истину с правильным аргументом "".R, 49 байт
Попробуйте онлайн!
источник
('x', '.')
, но неPyth, 10
8байтТестирование
Это займет список в первой строке STDIN и строку (без кавычек) во второй.
Для начала список сохраняется в
Q
, а строка сохраняется вz
. Далее мы формируем все возможные разделыz
. Каждый раздел будет отфильтрован (f
), чтобы проверить, использует ли он только частиQ
. Для этого мы удаляем все элементыQ
изT
раздела, который мы разбиваем, и логически отрицаем результат!
, так чтоQ
сохраняются только те разделы, в которых был каждый элемент .Чтобы решить проблему, в
''
которой нет разделов, мы добавляем первое слово словаря к z, чтобы оно не было пустой строкой.источник
""
кажется, что это не так."", [""]
и"", []
не были охвачены - давайте неPowerShell,
615857 байтПопробуйте онлайн!
Старые решения:
источник
Python 2, 64 байта
Попробуйте это онлайн!
источник
("aaaaaaa",["aa","aaa"])
.('x', '.')
, я думаю, но это не так."Hello", ["\w"]
др.PowerShell, 78
Довольно простой подход на основе регулярных выражений.
источник
CJam (16 байт)
Это анонимный блок (функция), принимающий строку и массив строк в стеке. Online demo.
It uses the obvious algorithm:
The return value is an empty array/string (falsy) if
str
can't be made, or an array containingstr
(truthy, even ifstr
is itself the empty string) if it can be made.источник
C++(Bcc), 287 bytes
because i do not wrote or used too much the next_permutation() i don't know if is all ok. I don't know 100% if it is a solution too possibly this is out of quality... One list of string is here one array of pointers to char; NULL terminated The algo is easy, there is one algo that linearity try if all string in the list fit with argument "a" string there is one other algo that permute the index of the list of string so it try all possible combination.
ungolf it, test code and results here
this would compile in gcc C++ compiler
источник
Python, 66 байт
Ungolfed:
источник
Microsoft Sql Server, 353 байта
Проверьте это онлайн.
Читаемая версия:
источник
C, 140 байтов
Я уверен, что есть более короткий способ сделать это в C, но я хотел создать решение, которое тестирует все возможные комбинации подстрок вместо обычного метода поиска / замены.
Попробуйте онлайн
Ungolfed:
источник