Комментарий , который я сделал в чате и последующий разговор вдохновил меня , чтобы сделать этот вызов.
Я единственный, кого здесь называют инициалы? Мы все о гольфе. У нас могут быть MB и D-nob и ... O.
Если я известен как «CH», то я думаю, что все остальные также должны иметь псевдоним, основанный на начальной букве.
Вот список из 100 лучших программистов и пользователей Code Golf, по репутации которых можно поиграть:
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
Детали
- Входные данные могут быть из файла (одно имя на строку) или по одному имени за раз через стандартный ввод / командную строку, либо в качестве аргумента функции списка строк, либо в виде аргумента функции из одной строки с символами новой строки между именами.
- Вывод должен быть напечатан на стандартный вывод (один псевдоним на строку) или возвращен функцией в виде списка строк или в виде одной строки с символами новой строки между псевдонимами.
- В идеале программы будут работать с именами, содержащими любые символы, кроме разделителей строк . Однако вы можете предположить, что все имена содержат только печатный ASCII . (Названия PPCG нет.)
- Только обычный символ пробела считается разделителем слов. Начальные и конечные пробелы можно игнорировать.
счет
Победит самая короткая подача в байтах . Tiebreaker отправляется на ответ, отправленный раньше всего.
Ответы:
CJam,
5853 байтаЭто может быть много в гольф .. Но для начала:
Расширение кода :
Попробуйте онлайн здесь
источник
JavaScript (ES6) 159
Следуя спецификациям, а не примеру.
Я генерирую псевдонимы-кандидаты, имеющие текущее среднее слово (в начале, первое слово). Слова перед текущим используются как есть. Слова после текущего слова вносятся без или только с первым символом. Текущее слово добавляет еще 1 символ для каждого цикла.
Пример 'Просто некоторые Name' => 'Просто', 'Некоторые', 'Name'
Cw
Just
, положение1
, попробуйтеJ
,JS
,JSN
Cw
Just
, положение2
, попробуйтеJu
,JuS
,JuSN
Cw
Just
, положение3
, попробуйтеJus
,JusS
,JusSN
Cw
Just
, положение4
, попробуйтеJust
,JustS
,JustSN
сейчас
Just
исчерпан ,Some
становится Cw, позиция перезапускается до 2 (для позиции 1, все уже пробовал)Cw
Some
, положение2
, попыткаJust
,JustSo
,JustSoN
Cw
Some
, положение3
, попробуйтеJust
,JustSom
,JustSomN
Cw
Some
, положение4
, попробуйтеJust
,JustSome
,JustSomeN
сейчас
Some
исчерпан,Name
становится Cw, положение перезапустить 2Cw
Name
, положение2
, попыткаJust
,JustSome
,JustSomeNa
Cw
Name
, положение3
, попробуйтеJust
,JustSome
,JustSomeNam
Cw
Name
, положение4
, попробуйтеJust
,JustSome
,JustSomeName
Это все люди!
Код
(q - текущая позиция слова, p - позиция среза)
Тест в консоли Firefox / FireBug
источник
PHP,
327289275274270Там еще может быть небольшой потенциал для игры в гольф.
php -d error_reporting=0 golfnicks.php < nicknames.txt
cat <<EOF | php -d error_reporting=0 golfnicks.php
+ список имен +EOF
// FUNC
и прокомментируйте строку, отмеченную значком//PROG
. Пытатьсяf(array_fill(0,21,'Just Some Name'));
сломать
источник