Escriba una función o programa que, cuando se le da una lista de nombres, genera o devuelve una lista donde los duplicados de nombres de pila tienen una versión abreviada única de su apellido.
Entrada:
Una lista de nombres, donde un nombre se define por un nombre y un apellido separados por un espacio. Los nombres son cadenas no vacías que contienen solo letras mayúsculas y minúsculas. La lista puede ser una matriz de cadenas, o los nombres separados por un carácter constante no alfa, sin espacio, pero la salida debe estar en el mismo formato que la entrada.
Salida:
Una lista de los nombres ingresados en el mismo orden y formato que la entrada que han sido modificados por estas reglas:
- Para nombres de pila únicos, escriba solo el nombre de pila
- Para nombres que comparten el mismo nombre de pila:
- Además de su nombre de pila, agregue la versión única más corta de su apellido que no sea compartida por otro nombre, seguido de un punto. Por ejemplo: se
John Clancy, John Smith
convierteJohn C.,John S.
y seJames Brown, James Bratte
convierte enJames Bro.,James Bra.
- Si un apellido es un subconjunto de otro, por ejemplo
Julian King,Julian Kingsley
, devuelve el apellido completo del más pequeño sin un punto. El ejemplo se convertiríaJulian King,Julian King.
- Además de su nombre de pila, agregue la versión única más corta de su apellido que no sea compartida por otro nombre, seguido de un punto. Por ejemplo: se
- Básicamente, un punto representa la expresión regular
.+
, donde solo un nombre debe coincidir. - Puede suponer que nadie compartirá el mismo nombre de pila y el mismo apellido.
- Los nombres distinguen entre mayúsculas y minúsculas
Casos de prueba:
John Clancy,Julie Walker,John Walker,Julie Clancy
->John C.,Julie W.,John W.,Julie C.
Julian King,Jack Johnson,Julian Kingsley
>Julian King,Jack,Julian King.
Jack Brown,Jack Black,Jack Blue
>Jack Br.,Jack Bla.,Jack Blu.
John Storm,Jon Snow,Johnny Storm
>John,Jon,Johnny
Jill DeSoma,Jill Desmond
>Jill DeS.,Jill Des.
XxXnO sCOppeXxX,XxXNO MERCYXxX
>XxXnO,XxXNO
Este es el código de golf , por lo que gana el conteo de bytes más bajo para cada idioma.
Angela C.
viene el en el caso de prueba?Julie
, gracias. SolucionadoRespuestas:
Jalea ,
34 33 3230 bytesUn enlace monádico que toma una lista de listas de caracteres (es decir, una lista de "cadenas") y devuelve las abreviaturas en el mismo formato y orden relativo.
Pruébalo en línea! (un conjunto de pruebas de programa completo)
¿Cómo?
fuente
Python 2 , 130 bytes
Pruébalo en línea!
Primero genera todos los apodos, de la siguiente manera:
A continuación, selecciona el primero * de cada lista que es menos frecuente en
sum(n,[])
. Este siempre será el primer apodo único.Tenga en cuenta que
n
incluye los apodos erróneos'John .'
, etc., pero nunca se elegirán.(* CPython 2.7
min
lo hace, de todos modos. ¡Este código puede no ser portátil !)fuente
Ruby
165 162 161160 bytesIncluye 1 espacio final si solo se devuelve el nombre de pila, p. Ej.
"John "
Pruébalo en línea!
163 bytes si no quieres el espacio final
Pruébalo en línea!
fuente