Пьяный дядя (извините меня и AUS за блокировку региона) - вымышленный персонаж из Saturday Night Live. Он часто путает слова для других, которые звучат как они. Для этого задания вам необходимо преобразовать обычную речь в пьяный.
Алгоритм
Для перевода в drunkspeak требуется поменять порядок слов в тексте. Обмен основан на сходстве пьянства двух слов. Сходство с пьянством определяется как количество букв, встречающихся у двух слов с одинаковыми показателями . Тем не менее, два идентичных слова имеют сходство пьянства -1 . Например, tree
и friend
имеют сходство пьянства 2, потому что они оба имеют «r» в индексе 1 и «e» в индексе 3.
Все, что вам нужно сделать, это найти два слова в тексте с наибольшим сходством пьянства, а затем поменять их местами. Как только вы меняете два термина, они больше не двигаются. Затем вы смотрите на остальные заменяемые термины и меняете местами два, которые имеют наибольшее сходство пьянства. Вы продолжаете делать это до тех пор, пока не сможете больше поменяться местами. Затем вы выводите (или возвращаете для функции) обновленный текст.
конкретика
- Для простоты ввод - это список слов, состоящий из символов в [A-Za-z]
- Каждый вход содержит хотя бы одно слово
- Буква соответствия нечувствительно к регистру:
A
матчи сa
( Примечание: В связи с этим правиломDog
иdog
являются идентичными, и , следовательно , имеют DS от -1) - Если несколько пар имеют наибольшее сходство пьянства:
- Из слов, которые могут максимизировать сходство пьянства, выберите слово с самым низким индексом в списке
- Соедините это слово с словом с самым низким индексом, которое максимизирует сходство пьянства
Примеры
Drunk Uncle needs your help
(заглавие)- S 1 : Пьяный <=> твой (DS: 1)
your Uncle needs Drunk help
- S 2 : нужна <=> помощь (DS: 1)
your Uncle help Drunk needs
- Вывод:
your Uncle help Drunk needs
- S 1 : Пьяный <=> твой (DS: 1)
I love fidget spinners
(скучный пример)- S 1 : я <=> люблю (DS: 0)
love I fidget spinners
- S 2 : непоседа <=> спиннеры (DS: 0)
love I spinners fidget
- S 1 : я <=> люблю (DS: 0)
dog eat dog ear
- S 1 : есть <=> ухо (DS: 2)
dog ear dog eat
- S 2 : собака <=> собака (DS: -1)
dog ear dog eat
(этот шаг просто формальность)
- S 1 : есть <=> ухо (DS: 2)
Let me tell you a story
- S 1 : Позвольте <=> мне (DS: 1)
me Let tell you a story
- S 2 : расскажу <=> вам (DS: 0)
me Let you tell a story
- S 3 : <=> история (DS: 0)
me Let you tell story a
- S 1 : Позвольте <=> мне (DS: 1)
Too many money and purple people
- S 1 : фиолетовый <=> человек (DS: 4)
Too many money and people purple
- S 2 : много <=> денег (DS: 2)
Too money many and people purple
- S 3 : слишком <=> и (DS: 0)
and money many Too people purple
- S 1 : фиолетовый <=> человек (DS: 4)
Дайте мне знать, если вы хотите, чтобы я привел еще несколько примеров.
источник
Ответы:
JavaScript -
286279 байтВы можете попробовать это на JSFiddle .
источник
Python 3,
285277270267 байт, не работаетЯ пытался сделать вывод совпадающим с задачей, а не с контрольными случаями, так как пара контрольных примеров противоречит задаче.
Редактировать: игра в гольф "нижняя" вещь
Изменить: изменил split ("") на split ()
Изменить: я понял, что это на самом деле не завершает все вещи, и хотя я мог бы получить полный рабочий ответ, тем временем я мог бы также добавить, что это завершает только одну итерацию.
источник
g = str.lower
или то,g = lambda s: s.lower()
что вы можете использовать таким образом ..split(' ')
можно заменить.split()
.