При наличии списка строк замените каждую строку одной из ее непустых подстрок, которая не является подстрокой ни одной из других строк в списке, и настолько короткой, насколько это возможно.
пример
Учитывая список ["hello","hallo","hola"]
, "hello"
должен быть заменен так же, "e"
как эта подстрока не содержится в "hallo"
и "hola"
и это как можно короче. "hallo"
может быть заменен либо "ha"
или "al"
и "hola"
любой из "ho"
, "ol"
или "la"
.
правила
- Вы можете предположить, что строки будут непустыми и содержат только алфавитные символы одного и того же регистра.
- Можно предположить, что такая подстрока существует для каждой строки в списке, т.е. ни одна строка в списке не будет подстрокой любой из других строк.
- Ввод и вывод могут быть в любом разумном формате.
- Это код-гольф , поэтому старайтесь использовать как можно меньше байтов на выбранном вами языке.
Тестовые случаи
В большинстве случаев дается только один возможный вывод.
["ppcg"] -> ["p"] (or ["c"] or ["g"])
["hello","hallo","hola"] -> ["e","ha","ho"]
["abc","bca","bac"] -> ["ab","ca","ba"]
["abc","abd","dbc"] -> ["abc","bd","db"]
["lorem","ipsum","dolor","sit","amet"] -> ["re","p","d","si","a"]
["abc","acb","bac","bca","cab","cba"] -> ["abc","acb","bac","bca","cab","cba"]
Связанный: Кратчайшая Идентифицирующая Подстрока - похожая идея, но более сложные правила и громоздкий формат.
code-golf
string
code-golf
string
code-golf
array-manipulation
code-golf
quine
code-golf
array-manipulation
integer
matrix
classification
code-golf
quine
code-golf
string
matrix
conversion
code-golf
string
number
code-golf
string
code-golf
number
sequence
integer
code-golf
decision-problem
matrix
code-golf
string
code-golf
math
code-golf
math
array-manipulation
combinatorics
code-golf
random
code-golf
code-golf
alphabet
code-golf
python
c
code-golf
base-conversion
code-golf
string
counting
code-challenge
code-generation
fastest-code
code-golf
kolmogorov-complexity
matrix
code-golf
string
code-golf
array-manipulation
decision-problem
random
sudoku
code-golf
chess
code-golf
card-games
encode
code-golf
decision-problem
code-golf
code-golf
math
array-manipulation
matrix
Laikoni
источник
источник
""
(пустая строка) однозначно идентифицирует для одного"ppcg"
случая?Ответы:
Желе ,
129 байтПопробуйте онлайн! Или посмотрите набор тестов (занимает ~ 35 с)
источник
Python 2 , 116 байт
Попробуйте онлайн!
источник
Pyth , 12 байт
Попробуй это здесь!
Как это работает
В основном фильтрует подстроки каждой из них, которые встречаются только в одной из строк в списке (то есть она уникальна для этой строки), и получает первую.
источник
Пролог (SWI) ,
175163 байтаПопробуйте онлайн!
Большинство вещей здесь должно быть довольно очевидным, но:
объяснение
Подписи: (
+
= вход,?
= необязательно,-
= выход,:
= выражение)sub_string(+String, ?Before, ?Length, ?After, ?SubString)
string_length(+String, -Length)
member(?Elem, ?List)
between(+Low, +High, ?Value)
findall(+Template, :Goal, -Bag)
forall(:Cond, :Action)
\+ \+
простоnot not
(т.е. преобразует совпадение в логическое значение (в этом случае предотвращает сопоставление обоихp
s поppcg
отдельности))источник
APL (Дьялог) , 25 байт
Спасибо ngn за сохранение одного байта
Попробуйте онлайн!
источник
J ,
30 2925 байтПопробуйте онлайн!
источник
Желе , 10 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 93 байта
Попробуйте онлайн!
Как?
Для каждой строки s длины L во входном массиве a [] и начиная с n = 0 , мы используем рекурсивную функцию g () для генерации всех подстрок u из s с помощью:
Например, с s = "abc" и L = 3 :
Некоторые подстроки генерируются несколько раз, но это не имеет значения. Важно то, что все подстроки длины N были сгенерированы перед любой подстрокой длины N + 1 .
Мы остановить процесс , как только у не может быть найдено в любой другой строки S в а [] , который гарантированно произойдет , когда у == S в худшем случае, как правило , на вызов # 2:
Следовательно, в приведенном выше примере этапы 7 и 8 фактически никогда не будут обработаны.
источник
PowerShell , 107 байт
Попробуйте онлайн!
объяснение
Для каждой предоставленной строки (и назначить весь массив
$a
):for
цикл по каждой длине подстроки (на основе 1) строки (назначая саму строку$s
и длину$g
)$i
):$i
, затем для каждого индекса:$s
) в позиции$_
(индекс) и длины$i
Where-Object
(?
) и верните ее, если:$a
), которое не содержит текущей строки$s
, не соответствует текущей подстроке$_
Вернемся к строковому уровню, у нас есть все подстроки этой строки, которые не были найдены в других, поэтому возьмите первую,
[0]
поскольку нам нужна только одна из них, затем перейдите к следующей строке.источник
C # (интерактивный компилятор Visual C #) , 149 байт
Попробуйте онлайн!
Менее гольф ...
источник