Para este desafío, debe implementar el Abbrev
módulo de Ruby en el menor código posible.
Desafío
La entrada será lo que su idioma tenga como una matriz (matriz, lista, secuencia, etc.) de cadenas. Puede escribir una función, o puede aceptar palabras separadas por comas en STDIN.
Luego debe calcular el conjunto de prefijos inequívocos para esas cadenas. Esto significa que debe devolver un hash (o mapa, objeto, etc.) de abreviaturas a sus cadenas originales.
Un "prefijo" es una subcadena de la cadena original que comienza al principio de la cadena. Por ejemplo, "pref" es un prefijo de la palabra "prefijo".
Un prefijo inequívoco es uno que solo puede significar una palabra. Por ejemplo, si su entrada es
car,cat
, entoncesca
no es un prefijo inequívoco porque podría significar "auto" o "gato".La excepción a esta regla es que una palabra es siempre un prefijo de sí misma. Por ejemplo, si tiene una entrada como
car,carpet
,car:car
debe estar en su salida.
Luego puede devolver el hash / map / object / etc. desde su función (o haga el equivalente en su idioma), o imprímalo en STDOUT en
key:value
pares en forma def:foo,fo:foo,...
. (Los pares clave-valor también pueden estar separados por espacios en blanco si acorta el código).
Casos de prueba
Input code,golf,going
Output c:code,co:code,cod:code,code:code,gol:golf,golf:golf,goi:going,goin:going,going:going
Input pie
Output p:pie,pi:pie,pie:pie
Input pie,pier,pierre
Output pie:pie,pier:pier,pierr:pierre,pierre:pierre
Input a,dog
Output a:a,d:dog,do:dog,dog:dog
Reglas
La entrada no contendrá elementos duplicados.
Su salida puede estar en cualquier orden; No tienes que ordenarlo.
No puede usar un
Abbrev
módulo / función / cosa incorporada como Ruby's.Este es el código de golf , ¡así que el código más corto en bytes ganará!
key:value\nkey:value\nkey:value
...?