Schreiben Sie eine Funktion oder ein Programm, das bei Angabe einer Liste von Namen eine Liste ausgibt oder zurückgibt, in der Duplikate von Vornamen eine eindeutige verkürzte Version ihres Nachnamens haben.
Eingang:
Eine Liste von Namen, bei der ein Name durch einen bestimmten Namen und ein durch ein Leerzeichen getrennter Nachname definiert ist. Namen sind nicht leere Zeichenfolgen, die nur Groß- und Kleinbuchstaben enthalten. Die Liste kann ein Array von Zeichenfolgen oder die Namen sein, die durch ein konstantes Nicht-Alpha-Zeichen ohne Leerzeichen getrennt sind. Die Ausgabe muss jedoch dasselbe Format wie die Eingabe haben.
Ausgabe:
Eine Liste der eingegebenen Namen in derselben Reihenfolge und demselben Format wie die Eingabe, die durch diese Regeln geändert wurden:
- Geben Sie für eindeutige Vornamen nur den Vornamen aus
- Für Namen mit demselben Vornamen:
- Fügen Sie neben dem Vornamen die kürzeste eindeutige Version ihres Nachnamens hinzu, die nicht von einem anderen Namen geteilt wird, gefolgt von einem Punkt. Zum Beispiel:
John Clancy, John Smith
wirdJohn C.,John S.
undJames Brown, James Bratte
wirdJames Bro.,James Bra.
- Wenn ein Nachname eine Teilmenge eines anderen ist, z. B.
Julian King,Julian Kingsley
den vollständigen Nachnamen des kleineren ohne Punkt zurückgeben. Das Beispiel würde werdenJulian King,Julian King.
- Fügen Sie neben dem Vornamen die kürzeste eindeutige Version ihres Nachnamens hinzu, die nicht von einem anderen Namen geteilt wird, gefolgt von einem Punkt. Zum Beispiel:
- Grundsätzlich stellt ein Punkt den regulären Ausdruck dar
.+
, bei dem nur ein Name mit ihm übereinstimmen sollte. - Sie können davon ausgehen, dass niemand denselben Vor- und Nachnamen hat
- Bei Namen wird zwischen Groß- und Kleinschreibung unterschieden
Testfälle:
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
Dies ist Code-Golf , daher gewinnt die niedrigste Byteanzahl für jede Sprache.
Angela C.
im Testfall?Julie
Hoppla sein, danke. BehobenAntworten:
Gelee ,
34 33 3230 BytesEin monadischer Link, der eine Liste von Zeichenlisten (dh eine Liste von "Zeichenfolgen") enthält und die Abkürzungen im gleichen Format und in derselben relativen Reihenfolge zurückgibt.
Probieren Sie es online aus! (eine vollständige Programmtestsuite)
Wie?
quelle
Python 2 , 130 Bytes
Probieren Sie es online aus!
Generiert zuerst alle Spitznamen wie folgt:
Dann nimmt die erste * eine aus jeder Liste , die ist seltensten in
sum(n,[])
. Dies ist immer der erste eindeutige Spitzname.Beachten Sie, dass
n
die fehlerhaften Spitznamen'John .'
usw. enthalten sind, diese jedoch niemals ausgewählt werden.(* CPython 2.7
min
tut dies sowieso. Dieser Code ist möglicherweise nicht portabel !)quelle
Ruby
165 162 161160 BytesBeinhaltet 1 nachfolgendes Leerzeichen, wenn nur der angegebene Name zurückgegeben wird, z.
"John "
Probieren Sie es online aus!
163 Bytes, wenn Sie den nachgestellten Speicherplatz nicht möchten
Probieren Sie es online aus!
quelle