Napisz funkcję lub program, który otrzyma listę imion, wyświetli lub zwróci listę, w której duplikaty imion mają unikalną skróconą wersję ich nazwiska.
Wejście:
Lista nazwisk, w której nazwa jest zdefiniowana przez dane imię i nazwisko oddzielone spacją. Nazwy to niepuste ciągi znaków zawierające tylko wielkie i małe litery. Lista może być tablicą ciągów lub nazw oddzielonych stałym znakiem innym niż alfa, spacją, ale dane wyjściowe muszą być w tym samym formacie co dane wejściowe.
Wynik:
Lista wprowadzonych nazw w tej samej kolejności i formacie, co dane zmodyfikowane przez te reguły:
- W przypadku unikalnych podanych nazw wyślij tylko podaną nazwę
- W przypadku nazw o tej samej podanej nazwie:
- Oprócz ich imienia i nazwiska dodaj najkrótszą unikalną wersję ich nazwiska, która nie jest współdzielona przez inne nazwisko, a następnie kropka. Na przykład:
John Clancy, John Smith
staje sięJohn C.,John S.
iJames Brown, James Bratte
stajeJames Bro.,James Bra.
- Jeśli jedno nazwisko jest podzbiorem drugiego, na przykład
Julian King,Julian Kingsley
zwróć pełne nazwisko mniejszego bez kropki. Przykład stałby sięJulian King,Julian King.
- Oprócz ich imienia i nazwiska dodaj najkrótszą unikalną wersję ich nazwiska, która nie jest współdzielona przez inne nazwisko, a następnie kropka. Na przykład:
- Zasadniczo kropka reprezentuje regex
.+
, przy czym tylko jedna nazwa powinna do niego pasować. - Możesz założyć, że nikt nie będzie miał tego samego imienia i nazwiska
- W nazwach rozróżniana jest wielkość liter
Przypadki testowe:
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
To jest golf golfowy , więc wygrywa najniższa liczba bajtów dla każdego języka.
Angela C.
pochodzi przypadek testowy?Julie
ups, dzięki. NaprawionoOdpowiedzi:
Galaretka ,
34 33 3230 bajtówMonadyczny link pobierający listę list znaków (tj. Listę „ciągów”) i zwracający skróty w tym samym formacie i kolejności względnej.
Wypróbuj online! (pełny pakiet testowy programu)
W jaki sposób?
źródło
Python 2 , 130 bajtów
Wypróbuj online!
Najpierw generuje wszystkie pseudonimy, jak następuje:
Następnie wybiera pierwsze * Jeden z każdej listy, która jest najrzadziej w
sum(n,[])
. To zawsze będzie pierwszy unikalny pseudonim.Pamiętaj, że
n
zawiera błędne pseudonimy'John .'
itp., Ale nigdy nie zostaną wybrane.(* CPython 2.7
min
tak czy inaczej. Ten kod może nie być przenośny !)źródło
Rubinowy
165 162 161160 bajtówObejmuje 1 spację końcową, jeśli zwracana jest tylko podana nazwa, np.
"John "
Wypróbuj online!
163 bajty, jeśli nie chcesz końcowej spacji
Wypróbuj online!
źródło