Para este desafío, debe implementar el Abbrevmó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, entoncescano 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:cardebe 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:valuepares 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
Abbrevmó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...?