Опис завдання
Іноді вам дійсно потрібно помістити те, що ви пишете, на невеликому просторі. Можливо, спокусити скинути голосні і wrt lk ths - і якщо цього не зробити, кому справді потрібні пробіли? Thssprfctlrdbl! †
Напишіть функцію або програму, яка видаляє малі голосні aeiou, а потім пробіли, а потім будь-які символи з вхідного рядка . Крім того, щоразу, коли ви видаляєте символ, він повинен бути самим правильним символом, придатним до видалення. Він повинен повторювати цей процес, поки рядок не перевищить задану довжину введення .
† "Це ідеально читабельно!" Але якщо ви читаєте цю виноску, це, мабуть, ні, насправді ... :)
Приклади
Тут ви можете бачити цей процес, застосований для послідовно менших розмірів введення:
23: Hello, Code Golf World!
22: Hello, Code Golf Wrld!
21: Hello, Code Glf Wrld!
20: Hello, Cod Glf Wrld!
19: Hello, Cd Glf Wrld!
18: Hell, Cd Glf Wrld!
17: Hll, Cd Glf Wrld!
16: Hll, Cd GlfWrld!
15: Hll, CdGlfWrld!
14: Hll,CdGlfWrld!
13: Hll,CdGlfWrld
12: Hll,CdGlfWrl
11: Hll,CdGlfWr
(etc.)
Після стискання рядка до 17 символів у нас не вистачає голосних для видалення, тому наступний символ, який ми видаляємо, - це правий край; коли ми потрапили в 14 символів, ми видалили всі голосні і пробіли, тому просто починаємо перебирати рядок справа наліво.
Ось псевдокод Python-коду, який вирішує цю проблему:
def crunch_string(string, to_length):
while len(string) > to_length:
# Store the best candidate index for deletion here.
best = None
# First, find the rightmost vowel's index.
for i in range(len(string)):
if string[i] in 'aeiou':
best = i
# If there were no vowels, find the rightmost space's index.
if best is None:
for i in range(len(string)):
if string[i] == ' ':
best = i
# If there were no spaces either, use the final index.
if best is None:
best = len(string) - 1
# Remove the selected character from the string.
string = string[:best] + string[best + 1:]
# Return the string once `len(string) <= to_length`.
return string
Правила
Це код-гольф , тому найкоротший код у байтах виграє.
Вхідний рядок буде складатися з символів для друку ASCII від пробілу (
, десяткової 32) до включаючи тильду (~десятковий 126). УAEIOUрядку не буде великих гласних . Зокрема, не буде задіяно Unicode, вкладок чи нових рядків.Викличте вхідний рядок s , а довжина введення - t . Тоді 0 <t ≤ довжина ( и ) ≤ 10000 гарантована. (Зокрема, рядок вводу ніколи не буде порожньою. Якщо t = length ( s ), вам слід просто повернути рядок без змін.)
Тестові кейси
Input: 50, Duis commodo scelerisque ex, ac consectetur metus rhoncus.
Output: Duis commodo scelerisque ex, ac cnscttr mts rhncs.
Input: 20, Maecenas tincidunt dictum nunc id facilisis.
Output: Mcnstncdntdctmnncdfc
Input: 150, golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf golf
Output: glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glf glfglfglfglfglfglfglfglfglfglf
aeiouголосні є і AEIOUне виникнуть для простоти. (Вся справа у верхньому / малому регістрі - це не те, на чому я хочу зосередити увагу.) Я додав уточнення.
w(наприклад, в слові зі ш , wгласний!) Звичайно, це залагоджено для цього, але там , де це не вказано , що безліч голосних aeiou, ви повинні іноді включати yі w. : -O
for index, char in enumerate(string)range(len(str))
yголосний?