Descrição da tarefa
Às vezes, você realmente precisa ajustar algo que está escrevendo em um espaço pequeno. Pode ser tentador abandonar as vogais e escrever coisas erradas - e na falta disso, quem realmente precisa de espaços? Thssprfctlrdbl! †
Escreva uma função ou programa que remova vogais em minúsculas aeiou
, espaços e, em seguida, qualquer caractere de uma sequência de entrada . Além disso, cada vez que você remove um personagem, ele deve ser o personagem mais à direita elegível para remoção. Ele deve repetir esse processo até que a string não tenha mais que um determinado comprimento de entrada .
† “Isso é perfeitamente legível!” Mas se você está lendo esta nota de rodapé, provavelmente não é, realmente ... :)
Exemplos
Aqui, você pode ver esse processo aplicado para tamanhos de entrada sucessivamente menores:
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.)
Depois de espremer a string para 17 caracteres, ficamos sem vogais para removê-las, portanto o próximo caractere que removemos é o espaço mais à direita; quando atingimos 14 caracteres, removemos todas as vogais e espaços, então começamos a mastigar a corda da direita para a esquerda.
Aqui está um código Python com pseudocódigo que resolve esse desafio:
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
Regras
Isso é código-golfe , então o código mais curto em bytes vence.
A sequência de entrada consistirá nos caracteres ASCII imprimíveis do espaço (
, decimal 32) até e incluindo o til (
~
, decimal 126). Não haverá vogais maiúsculasAEIOU
na string. Em particular, não haverá Unicode, guias ou novas linhas envolvidas.Chame a sequência de entrada s e o comprimento do destino de entrada t . Então 0 <t ≤ comprimento ( s ) ≤ 10000 é garantido. (Em particular, a sequência de entrada nunca estará vazia. Se t = comprimento ( ões ), você deve retornar a sequência sem modificação.)
Casos de teste
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
são vogais e AEIOU
não ocorrerão por simplicidade. (A coisa toda em maiúsculas / minúsculas não é o que eu quero focar.) Adicionei esclarecimentos.
w
(por exemplo, na palavra co w , w
é uma vogal!) É claro que isso está resolvido para esta, mas para onde não está declarado que o conjunto de vogais é aeiou
, às vezes você deve incluir y
e w
. : -O
for index, char in enumerate(string)
, em vez da range(len(str))
construção
y
uma vogal?