Dada una lista de cadenas, reemplace cada cadena por una de sus subcadenas no vacías, que no es una subcadena de ninguna de las otras cadenas de la lista y lo más corta posible.
Ejemplo
Teniendo en cuenta la lista ["hello","hallo","hola"]
, "hello"
debe ser reemplazado por igual "e"
ya que esta subcadena no está contenida en "hallo"
e "hola"
y es lo más corta posible. "hallo"
podría ser reemplazado por cualquiera de "ha"
o "al"
y "hola"
por cualquiera de "ho"
, "ol"
o "la"
.
Reglas
- Puede suponer que las cadenas no estarán vacías y solo contendrán caracteres alfabéticos del mismo caso.
- Puede suponer que existe una subcadena para cada cadena de la lista, es decir, ninguna cadena de la lista será una subcadena de ninguna de las otras cadenas.
- La entrada y salida pueden estar en cualquier formato razonable.
- Este es el código de golf , así que trate de usar la menor cantidad de bytes posible en el idioma que elija.
Casos de prueba
Solo se proporciona una salida posible para la mayoría de los casos.
["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"]
Relacionado: Subcadena de identificación más corta : idea similar, pero reglas más complicadas y formato engorroso.
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
fuente
fuente
""
identifica (cadena vacía) de forma única para el"ppcg"
caso único ?Respuestas:
Jalea ,
129 bytesPruébalo en línea! O vea el conjunto de pruebas (tarda ~ 35s)
fuente
Python 2 , 116 bytes
Pruébalo en línea!
fuente
Pyth , 12 bytes
Pruébalo aquí!
Cómo funciona
Básicamente filtra las subcadenas de cada una que solo ocurren en una de las cadenas de la lista (es decir, es única para esa cadena) y obtiene la primera.
fuente
Prólogo (SWI) ,
175163 bytesPruébalo en línea!
La mayoría de las cosas aquí deberían ser bastante obvias, pero:
Explicación
Firmas: (
+
= entrada,?
= opcional,-
= salida,:
= expresión)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)
\+ \+
es justonot not
(es decir, convierte una coincidencia en booleana (en este caso, evita que coincida con ambasp
s porppcg
separado))fuente
APL (Dyalog) , 25 bytes
Gracias por guardar un byte
Pruébalo en línea!
fuente
J ,
30 2925 bytesPruébalo en línea!
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 93 bytes
Pruébalo en línea!
¿Cómo?
Para cada cadena s de longitud L en la matriz de entrada a [] y comenzando con n = 0 , usamos la función recursiva g () para generar todas las subcadenas u de s con:
Por ejemplo, con s = "abc" y L = 3 :
Algunas subcadenas se generan varias veces, pero no importa. Lo importante es que todas las subcadenas de longitud N se hayan generado antes de cualquier subcadena de longitud N + 1 .
Nos detenemos el proceso tan pronto como u no se puede encontrar en cualquier otra cadena de S en un [] , que está garantizado que ocurra cuando u == s en el peor de los casos, de acuerdo con la regla desafío # 2:
Por lo tanto, en el ejemplo anterior, los pasos 7 y 8 en realidad nunca se procesarán.
fuente
Potencia Shell , 107 bytes
Pruébalo en línea!
Explicación
Para cada cadena suministrada (y asigne toda la matriz a
$a
):for
bucle sobre cada longitud de subcadena (basada en 1) de la cadena (asignando la cadena$s
y la longitud a$g
)$i
):$i
, luego para cada índice:$s
) en la posición$_
(índice) y de longitud$i
Where-Object
(?
) y devuélvala si:$a
) que no contiene la cadena actual$s
, no tiene una coincidencia para la subcadena actual$_
De vuelta al nivel de la cadena, tenemos todas las subcadenas de esta cadena que no se encontraron en las demás, así que tome la primera
[0]
ya que solo necesitamos una de ellas, luego continúe con la siguiente cadena.fuente
C # (compilador interactivo de Visual C #) , 149 bytes
Pruébalo en línea!
Menos golf ...
fuente