Escreva uma função ou programa que, ao receber uma lista de nomes, produza ou retorne uma lista em que duplicatas de nomes próprios tenham uma versão abreviada exclusiva de seu sobrenome.
Entrada:
Uma lista de nomes, onde um nome é definido por um nome e um sobrenome separados por um espaço. Os nomes são cadeias não vazias que contêm apenas letras maiúsculas e minúsculas. A lista pode ser uma matriz de seqüências de caracteres ou os nomes separados por um caractere não-alfa e não-espaço constante, mas a saída deve estar no mesmo formato da entrada.
Resultado:
Uma lista dos nomes inseridos na mesma ordem e formato que a entrada que foi modificada por estas regras:
- Para nomes exclusivos, digite apenas o nome
- Para nomes que compartilham o mesmo nome:
- Além do nome fornecido, adicione a versão mais curta e exclusiva do sobrenome, que não seja compartilhada por outro nome, seguida por um ponto. Por exemplo:
John Clancy, John Smith
torna - seJohn C.,John S.
eJames Brown, James Bratte
torna - seJames Bro.,James Bra.
- Se um sobrenome for um subconjunto de outro, como, por exemplo
Julian King,Julian Kingsley
, retorne o sobrenome completo do menor sem um período. O exemplo se tornariaJulian King,Julian King.
- Além do nome fornecido, adicione a versão mais curta e exclusiva do sobrenome, que não seja compartilhada por outro nome, seguida por um ponto. Por exemplo:
- Basicamente, um ponto representa a regex
.+
, onde apenas um nome deve corresponder a ele. - Você pode assumir que ninguém compartilhará o mesmo nome e o mesmo sobrenome
- Os nomes diferenciam maiúsculas de minúsculas
Casos de teste:
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
Isso é código-golfe , então a contagem de bytes mais baixa para cada idioma vence.
Angela C.
vem o caso de teste?Julie
oops, obrigado. CorrigidoRespostas:
Geléia ,
34 33 3230 bytesUm link monádico que obtém uma lista de listas de caracteres (ou seja, uma lista de "strings") e retorna as abreviações no mesmo formato e ordem relativa.
Experimente online! (um conjunto completo de testes do programa)
Quão?
fonte
Python 2 , 130 bytes
Experimente online!
Primeiro gera todos os apelidos, da seguinte maneira:
Depois pega o primeiro * um de cada lista que é menos frequente no
sum(n,[])
. Este sempre será o primeiro apelido exclusivo.Observe que
n
inclui os apelidos errados'John .'
, etc., mas eles nunca serão escolhidos.(* O CPython 2.7 o
min
faz de qualquer maneira. Esse código pode não ser portátil !)fonte
Ruby
165 162 161160 bytesInclui 1 espaço à direita se apenas o nome for retornado, por exemplo.
"John "
Experimente online!
163 bytes se você não quiser o espaço à direita
Experimente online!
fonte