Tulis fungsi atau program yang, ketika diberi daftar nama, mengeluarkan atau mengembalikan daftar di mana duplikat nama yang diberikan memiliki versi singkat yang unik dari nama mereka.
Memasukkan:
Daftar nama, di mana nama didefinisikan oleh nama yang diberikan dan nama belakang yang dipisahkan oleh spasi. Nama adalah string non-kosong yang hanya berisi huruf besar dan kecil. Daftar dapat berupa array string, atau nama-nama yang dipisahkan oleh karakter non-alpha, non-spasi konstan, tetapi output harus dalam format yang sama dengan input.
Keluaran:
Daftar nama yang dimasukkan dalam urutan dan format yang sama dengan input yang telah dimodifikasi oleh aturan ini:
- Untuk nama yang diberikan unik, output hanya nama yang diberikan
- Untuk nama yang memiliki nama yang sama:
- Serta nama yang diberikan, tambahkan versi unik terpendek dari nama keluarga mereka yang tidak dibagikan dengan nama lain, diikuti dengan tanda titik. Misalnya:
John Clancy, John Smith
menjadiJohn C.,John S.
danJames Brown, James Bratte
menjadiJames Bro.,James Bra.
- Jika satu nama keluarga adalah subset dari yang lain, seperti
Julian King,Julian Kingsley
, kembalikan nama lengkap dari yang lebih kecil tanpa tanda titik. Teladan akan menjadiJulian King,Julian King.
- Serta nama yang diberikan, tambahkan versi unik terpendek dari nama keluarga mereka yang tidak dibagikan dengan nama lain, diikuti dengan tanda titik. Misalnya:
- Pada dasarnya suatu periode mewakili regex
.+
, di mana hanya satu nama yang cocok dengan itu. - Anda dapat berasumsi bahwa tidak ada yang akan berbagi nama yang diberikan dan nama keluarga yang sama
- Nama bersifat case-sensitive
Kasus uji:
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
Ini adalah kode-golf , sehingga jumlah byte terendah untuk setiap bahasa menang.
Angela C.
dalam kasus uji?Julie
oops, terima kasih. DiperbaikiJawaban:
Jelly ,
34 33 3230 byteTautan monadik yang mengambil daftar daftar karakter (yaitu daftar "string") dan mengembalikan singkatan dalam format dan urutan relatif yang sama.
Cobalah online! (paket uji program lengkap)
Bagaimana?
sumber
Python 2 , 130 byte
Cobalah online!
Pertama menghasilkan semua nama panggilan, sebagai berikut:
Kemudian pilih yang pertama * dari setiap daftar yang paling jarang masuk
sum(n,[])
. Ini akan selalu menjadi nama panggilan unik pertama.Catatan yang
n
mencakup nama panggilan yang salah'John .'
dll, tetapi mereka tidak akan pernah dipilih.(* Bagaimanapun juga, CPython 2.7
min
melakukannya. Kode ini mungkin tidak portabel !)sumber
Ruby
165 162 161160 160 byteTermasuk 1 spasi tambahan jika hanya nama yang diberikan dikembalikan, mis.
"John "
Cobalah online!
163 byte jika Anda tidak ingin ruang tambahan
Cobalah online!
sumber