Описание задания
Иногда вам действительно нужно разместить что-то, что вы пишете, на небольшом пространстве. Может быть заманчиво отбросить гласные и без них - и если это не удастся, кому действительно нужны пробелы? 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 ≤ length ( s ) ≤ 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
гласный?