- 22, Oct 2024
- #1
А комментарий, который я оставил в чате и последовавший за этим разговор вдохновил меня на этот вызов.
Я единственный, кого здесь называют инициалами? Мы все стремимся к тому, чтобы все было в гольфе. У нас могут быть и МБ и Д-ноб и... О.
Если я известен как «CH», то, думаю, всем остальным тоже следует иметь прозвище, основанное на начальной букве.
Вот список 100 лучших пользователей Programming Puzzles & Code Golf по репутации, с которыми можно играть:
M D P H m De Di DC MB Ma MaB Mar MarB Mars MarsB
Испытание
Напишите программу или функцию, которая принимает список строк и выводит другой список строк с их минимальными уникальными псевдонимами, основанными на инициалах, отдавая предпочтение тем, которые находятся ближе к началу списка.
Примените этот метод к каждой строке S в списке в порядке, указанном для создания псевдонимов:
- Разделите S на слова, разделенные пробелами, удалив при этом все пробелы.
- Перечислите непустые префиксы строки первых букв слов из S, от самого короткого до самого длинного.
например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
→JustSomeName
,JustSome
,Just
- В качестве псевдонима для S выберите первый элемент в этом списке, который не идентичен уже выбранному псевдониму. Если псевдоним был выбран, остановитесь, в противном случае перейдите к шагу 4.
например еслиJustSomeNam
was the first string thenJustSome
гарантированно будет ником. - Перечислите префиксы еще раз, но на этот раз включите вторую букву первого слова на свое естественное место.
напримерJust
→JustSomeNa
,JustSome
,Just
- Сделайте то же самое, что и в шаге 3 для этого списка, останавливаясь, если найден уникальный псевдоним.
- Повторите этот процесс с оставшимися буквами первого слова, постепенно вставляя буквы во второе слово, затем в третье и так далее, пока не будет найден уникальный никнейм.
например Первой уникальной строкой, указанной здесь, будет псевдоним:
JustSomeN
,JustSome
,Just
JustSomN
,JustSom
,Just
Just
,o
,JustSoN
(note thatJustSo
не был добавлен послеJust
)
JustSN
,JustS
,Just
JusSN
,JusS
,Jus
JuSN
,JuS
,Ju
Just Some Name
,J
,Just Some Name
JSN
,JS
,J
В конце концов, все входные строки должны иметь уникальный псевдоним (потенциально идентичный строке). Вы можете предположить, что при использовании этого метода ни одна из входных строк не будет соответствовать одному и тому же псевдониму.
Пример
Обновлено, чтобы исправить мою ошибку!
Для ввода
Just Some Name
прозвища были бы
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
Подробности
- Ввод может быть из файла (одно имя в строке), или по одному имени за раз через стандартный ввод/командную строку, или как аргумент функции списка строк, или как аргумент функции одной строки с символами новой строки между именами.
- Вывод должен быть выведен на стандартный вывод (по одному псевдониму в строке) или возвращен функцией в виде списка строк или одной строки с символами новой строки между псевдонимами.
- В идеале программы будут работать с именами, содержащими любые символы, кроме терминаторы линии. Однако вы можете предположить, что все имена содержат только печатный ASCII. (Имена PPCG этого не делают.)
- Только обычный пробел считается разделителем слов. Ведущие и конечные пробелы можно игнорировать.
Подсчет очков
Самая короткая подача в байтах побеждает. Тай-брейк переходит к ответу, опубликованному раньше всех.
#код-гольф #строка