Description de la tâche
Parfois, vous devez vraiment adapter quelque chose que vous écrivez dans un petit espace. Il peut être tentant de laisser tomber les voyelles et les mots - et à défaut, qui a vraiment besoin d'espaces? Thssprfctlrdbl! †
Écrivez une fonction ou un programme qui supprime les voyelles minuscules aeiou
, puis les espaces, puis tous les caractères d'une chaîne d'entrée . De plus, chaque fois que vous supprimez un personnage, il doit être le personnage le plus à droite éligible pour la suppression. Il doit répéter ce processus jusqu'à ce que la chaîne ne dépasse pas une certaine longueur d'entrée donnée .
† "C'est parfaitement lisible!" Mais si vous lisez cette note, ce n'est probablement pas vraiment ... :)
Exemples
Ici, vous pouvez voir ce processus appliqué pour des tailles d'entrée successivement plus petites:
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.)
Après avoir réduit la chaîne à 17 caractères, nous manquons de voyelles à supprimer, donc le caractère suivant que nous supprimons est l'espace le plus à droite; lorsque nous frappons 14 caractères, nous avons supprimé toutes les voyelles et les espaces, donc nous commençons simplement à grignoter la chaîne de droite à gauche.
Voici un code Python pseudocode qui résout ce défi:
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
Règles
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
La chaîne d'entrée sera constituée des caractères ASCII imprimables de l'espace (
, décimal 32) jusqu'au tilde inclus (
~
, décimal 126). Il n'y aura pas de voyelles majusculesAEIOU
dans la chaîne. En particulier, aucun Unicode, onglet ou nouvelle ligne ne sera impliqué.Appelez la chaîne d'entrée s et la longueur cible d'entrée t . Alors 0 <t ≤ longueur ( s ) ≤ 10000 est garanti. (En particulier, la chaîne d'entrée ne sera jamais vide. Si t = longueur ( s ), vous devez simplement renvoyer la chaîne non modifiée.)
Cas de test
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
sont des voyelles, et AEIOU
ne se produiront pas, pour plus de simplicité. (Le tout en majuscules / minuscules n'est pas ce sur quoi je veux me concentrer.) J'ai ajouté une clarification.
w
(par exemple, dans le mot co w , w
est une voyelle!) Bien sûr, c'est réglé pour celle-ci, mais pour les cas où il n'est pas indiqué que l'ensemble des voyelles est aeiou
, vous devez parfois inclure y
et w
. : -O
for index, char in enumerate(string)
place de la range(len(str))
construction
y
une voyelle?