Descripción de la tarea
A veces, realmente necesitas adaptar algo que estás escribiendo en un espacio pequeño. Puede ser tentador abandonar las vocales y las palabras, y en su defecto, ¿quién realmente necesita espacios? Thssprfctlrdbl! †
Escriba una función o programa que elimine las vocales en minúsculas aeiou, y luego los espacios, y luego los caracteres de una cadena de entrada . Además, cada vez que eliminas un personaje, debe ser el personaje más adecuado para eliminarlo. Debe repetir este proceso hasta que la cadena no supere una longitud de entrada determinada .
† “¡Esto es perfectamente legible!” Pero si estás leyendo esta nota al pie, probablemente no lo sea, realmente ... :)
Ejemplos
Aquí, puede ver este proceso aplicado para tamaños de entrada sucesivamente más pequeños:
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.)
Después de apretar la cadena hasta 17 caracteres, nos quedamos sin vocales para eliminar, por lo que el siguiente carácter que eliminamos es el espacio más a la derecha; Cuando llegamos a 14 caracteres, hemos eliminado todas las vocales y espacios, por lo que simplemente comenzamos a masticar la cadena de derecha a izquierda.
Aquí hay un código pseudocódigo de Python que resuelve este desafío:
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
Reglas
Este es el código de golf , por lo que gana el código más corto en bytes.
La cadena de entrada consistirá en los caracteres ASCII imprimibles desde el espacio (
decimal 32) hasta tilde (inclusive~, decimal 126). No habrá vocales mayúsculasAEIOUen la cadena. En particular, no habrá Unicode, pestañas o nuevas líneas involucradas.Llame a la cadena de entrada s , y la longitud del objetivo de entrada t . Entonces 0 <t ≤ longitud ( s ) ≤ 10000 está garantizado. (En particular, la cadena de entrada nunca estará vacía. Si t = longitud ( s ), simplemente debe devolver la cadena sin modificar).
Casos de prueba
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
aeiouson vocales, y AEIOUno ocurrirán, por simplicidad. (Todo el asunto en mayúsculas / minúsculas no es en lo que quiero centrarme). Agregué una aclaración.
w(por ejemplo, en la palabra co w , ¡ wes una vocal!) Por supuesto, eso está resuelto para este, pero para donde no se dice que el conjunto de vocales es aeiou, a veces debes incluir yy w. : -O
for index, char in enumerate(string)lugar de la range(len(str))construcción
yuna vocal?