我是这里唯一的缩写缩写人吗?我们都在打高尔夫球。我们可以有MB和D-nob以及...O。
如果我被称为“ CH”,那么我认为其他所有人也应该有一个以缩写开头的昵称。
以下是按声誉使用的排名前100位的编程难题和代码高尔夫用户的列表:
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
(这就是我的方法)
挑战
编写一个程序或函数,该程序或函数接受一个字符串列表,然后输出另一个字符串列表,这些字符串的最小,唯一,基于初始的昵称,优先于列表开头的那些。
按照给定创建昵称的顺序,将此方法应用于列表中的每个字符串S:
- 将S拆分为用空格分隔的单词,删除该过程中的所有空格。
- 列出S中单词的第一个字母的字符串的非空前缀,从最短到最长。
例如Just Some Name
→J
,JS
,JSN
- 在列表中选择与已经选择的昵称不同的第一项作为S的昵称。如果选择了昵称,请停止,否则继续执行步骤4。
例如,如果Just Some Name
是第一个字符串,则J
保证是昵称。 - 再次列出前缀,但是这自然包括第一个单词的第二个字母。
例如Just Some Name
→Ju
,JuS
,JuSN
- 为此列表执行第3步中的操作,如果找到唯一的昵称,则停止。
- 对第一个单词的其余字母重复此过程,最后将字母插入第二个单词,然后第三个单词,依此类推,直到找到唯一的昵称。
例如,在这里列出的第一个唯一的字符串将是绰号:
Jus
,JusS
,JusSN
Just
,JustS
,JustSN
Just
,JustSo
,JustSoN
(注意,o
后不加Just
)
Just
,JustSom
,JustSomN
Just
,JustSome
,JustSomeN
Just
,JustSome
,JustSomeNa
Just
,JustSome
,JustSomeNam
Just
,JustSome
,JustSomeName
最后,所有输入字符串应以唯一的昵称结尾(可能与字符串相同)。您可以假定使用此方法,没有任何输入字符串将映射到相同的昵称。
例
更新以解决我的错误!
对于输入
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
昵称是
M
D
P
H
m
De
Di
DC
MB
Ma
MaB
Mar
MarB
Mars
MarsB
细节
- 输入可以来自文件(每行一个名称),也可以一次通过stdin /命令行输入一个名称,或者作为字符串列表的函数自变量,或者作为单个字符串的函数arg,名称之间带有换行符。
- 输出应打印到标准输出(每行一个昵称),或者由函数以字符串列表形式返回,或者作为一个在昵称之间带有换行符的字符串返回。
- 理想情况下,程序将适用于包含除行终止符之外的任何字符的名称。但是,您可以假定所有名称仅包含可打印的ASCII。(PPCG名称没有。)
- 只有常规空格字符才算作单词分隔符。前导和尾随空格可以忽略。
计分
以字节为单位的最短提交获胜。Tiebreaker转到最早发布的答案。