Pour ce défi, vous devez implémenter le Abbrevmodule Ruby dans le moins de code possible.
Défi
L'entrée sera tout ce que votre langue a comme un tableau (tableau, liste, séquence, etc.) de chaînes. Vous pouvez écrire une fonction ou accepter des mots séparés par des virgules sur STDIN.
Vous devez ensuite calculer l'ensemble de préfixes non ambigus pour ces chaînes. Cela signifie que vous devez renvoyer un hachage (ou une carte, un objet, etc.) d'abréviations à leurs chaînes d'origine.
Un "préfixe" est une sous-chaîne de la chaîne d'origine commençant au début de la chaîne. Par exemple, "pref" est un préfixe du mot "prefix".
Un préfixe non ambigu est celui qui ne peut signifier qu'un seul mot. Par exemple, si votre entrée est
car,cat, cecan'est pas un préfixe sans ambiguïté, car cela pourrait signifier «voiture» ou «chat».L'exception à cette règle est qu'un mot est toujours un préfixe de lui-même. Par exemple, si vous avez une entrée telle que
car,carpet,car:cardoit être dans votre sortie.
Vous pouvez ensuite renvoyer le hachage / map / objet / etc. à partir de votre fonction (ou faites l'équivalent dans votre langue), ou imprimez-le par
key:valuepaire sous STDOUT sous la forme def:foo,fo:foo,.... (Les paires clé-valeur peuvent également être séparées par des espaces si cela raccourcit votre code.)
Cas de test
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
Règles
L'entrée ne contiendra pas d'éléments en double.
Votre sortie peut être dans n'importe quel ordre; vous n'avez pas à le trier.
Vous ne pouvez pas utiliser un
Abbrevmodule / fonction / chose intégré comme Ruby.Il s'agit de code-golf , donc le code le plus court en octets gagnera!
key:value\nkey:value\nkey:value...?