Sebuah komentar yang saya buat dalam obrolan dan percakapan berikutnya menginspirasi saya untuk membuat tantangan ini.
Apakah saya satu-satunya yang dirujuk oleh inisial di sekitar sini? Kita semua tentang bermain golf. Kita dapat memiliki MB dan D-nob dan ... O.
Jika saya dikenal sebagai "CH" maka saya pikir semua orang harus memiliki nama panggilan berbasis awal juga.
Berikut daftar top 100 pengguna Programming Puzzles & Code Golf menurut reputasinya:
Martin Büttner
Doorknob
Peter Taylor
Howard
marinus
Dennis
DigitalTrauma
David Carraher
primo
squeamish ossifrage
Keith Randall
Ilmari Karonen
Quincunx
Optimizer
grc
Calvin's Hobbies
ugoren
Mig
gnibbler
Sp3000
aditsu
histocrat
Ventero
xnor
mniip
Geobits
J B
Joe Z.
Gareth
Jan Dvorak
isaacg
edc65
Victor
steveverrill
feersum
ace
Danko Durbić
xfix
PhiNotPi
user23013
manatwork
es1024
Joey
daniero
boothby
nneonneo
Joey Adams
Timwi
FireFly
dansalmo
grovesNL
breadbox
Timtech
Flonk
algorithmshark
Johannes Kuhn
Yimin Rong
copy
belisarius
professorfish
Ypnypn
trichoplax
Darren Stone
Riot
ProgramFOX
TheDoctor
swish
minitech
Jason C
Tobia
Falko
PleaseStand
VisioN
leftaroundabout
alephalpha
FUZxxl
Peter Olson
Eelvex
marcog
MichaelT
w0lf
Ell
Kyle Kanos
qwr
flawr
James_pic
MtnViewMark
cjfaure
hammar
bitpwner
Heiko Oberdiek
proud haskeller
dan04
plannapus
Mr Lister
randomra
AShelly
ɐɔıʇǝɥʇuʎs
Alexandru
user unknown
( ini adalah bagaimana saya mendapatkannya )
Tantangan
Tulis sebuah program atau fungsi yang memasukkan daftar string dan menampilkan daftar string lain, minimal, unik, nama panggilan berbasis awal, memberikan preferensi kepada mereka yang lebih dekat dengan awal daftar.
Terapkan metode ini ke setiap string S dalam daftar dalam urutan yang diberikan untuk membuat nama panggilan:
- Membagi S menjadi kata-kata yang dipisahkan oleh spasi, menghapus semua spasi dalam proses.
- Daftar awalan nonempty dari string huruf pertama dari kata-kata di S, dari yang terpendek ke yang terpanjang.
misalnyaJust Some Name
→J
,JS
,JSN
- Pilih item pertama dalam daftar ini yang tidak identik dengan nama panggilan yang sudah dipilih sebagai nama panggilan untuk S. Hentikan jika nama panggilan itu dipilih, lanjutkan ke langkah 4 jika tidak.
misal jikaJust Some Name
tadi string pertama makaJ
dijamin menjadi julukan. - Buat daftar awalan lagi, tetapi kali ini sertakan huruf kedua dari kata pertama di tempat asalnya.
misalnyaJust Some Name
→Ju
,JuS
,JuSN
- Lakukan hal yang sama seperti pada langkah 3 untuk daftar ini, berhenti jika nama panggilan unik ditemukan.
- Ulangi proses ini dengan sisa huruf dari kata pertama, akhirnya memasukkan huruf ke dalam kata kedua, kemudian yang ketiga, dan seterusnya, hingga nama panggilan unik ditemukan.
misalnya string unik pertama yang tercantum di sini akan julukan:
Jus
,JusS
,JusSN
Just
,JustS
,JustSN
Just
,JustSo
,JustSoN
(catatan bahwao
tidak ditambahkan setelahJust
)
Just
,JustSom
,JustSomN
Just
,JustSome
,JustSomeN
Just
,JustSome
,JustSomeNa
Just
,JustSome
,JustSomeNam
Just
,JustSome
,JustSomeName
Pada akhirnya semua string input harus diakhiri dengan nama panggilan unik (berpotensi identik dengan string). Anda dapat mengasumsikan bahwa tidak ada string input yang akan dipetakan ke nama panggilan yang sama menggunakan metode ini.
Contoh
Diperbarui untuk memperbaiki kesalahan saya!
Untuk input
Martin Buttner
Doorknob
Peter Taylor
Howard
marinus
Dennis
DigitalTrauma
David Carraher
Martin Bitter
Martin Butter
Martin Battle
Martini Beer
Mart Beer
Mars Bar
Mars Barn
julukan itu akan
M
D
P
H
m
De
Di
DC
MB
Ma
MaB
Mar
MarB
Mars
MarsB
Detail
- Input dapat berasal dari file (satu nama per baris), atau satu nama pada suatu waktu melalui stdin / baris perintah, atau sebagai argumen fungsi dari daftar string, atau sebagai argumen fungsi string tunggal dengan baris baru di antara nama.
- Output harus dicetak ke stdout (satu nama panggilan per baris) atau dikembalikan oleh fungsi sebagai daftar string, atau sebagai satu string dengan baris baru di antara nama panggilan.
- Idealnya program akan berfungsi untuk nama yang mengandung karakter apa pun kecuali terminator baris . Namun, Anda dapat mengasumsikan bahwa semua nama hanya berisi ASCII yang dapat dicetak . (Nama-nama PPCG tidak.)
- Hanya karakter spasi reguler yang dianggap sebagai pemisah kata. Ruang depan dan belakang dapat diabaikan.
Mencetak gol
Pengajuan terpendek dalam byte menang. Tiebreaker pergi ke jawaban yang diposting paling awal.