チャットで行ったコメントとそれに続く会話に触発されて、この挑戦をしました。
この辺りのイニシャルで言及されているのは私だけですか?私たちはすべてゴルフをすることについてです。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
、ニックネームが保証されます。 - 接頭辞を再度リストしますが、今回は自然な場所に最初の単語の2番目の文字を含めます。
例えばJust Some Name
→Ju
、JuS
、JuSN
- このリストに対して手順3と同じ操作を行い、一意のニックネームが見つかったら停止します。
- 最初の単語の残りの文字でこのプロセスを繰り返し、最終的に2番目の単語に文字を挿入し、次に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
詳細
- 入力は、ファイル(行ごとに1つの名前)、stdin /コマンドライン経由で一度に1つの名前、または文字列のリストの関数引数として、または名前の間に改行がある単一の文字列の関数引数として指定できます。
- 出力はstdout(行ごとに1つのニックネーム)に出力されるか、文字列のリストとして、またはニックネーム間に改行がある1つの文字列として関数によって返される必要があります。
- 理想的には、プログラムは行末記号以外の文字を含む名前に対して機能します。ただし、すべての名前に印刷可能なASCIIのみが含まれていると想定できます。(PPCG名はそうではありません。)
- 通常のスペース文字のみが単語の区切りとしてカウントされます。先頭と末尾のスペースは無視できます。