Descrizione del compito
A volte, devi davvero adattare qualcosa che stai scrivendo in un piccolo spazio. Potrebbe essere allettante lasciare cadere le vocali e scriverle - e, in mancanza, chi ha davvero bisogno di spazi? Thssprfctlrdbl! †
Scrivere una funzione o un programma che rimuova le vocali minuscole aeiou
, quindi gli spazi e quindi tutti i caratteri da una stringa di input . Inoltre, ogni volta che rimuovi un personaggio, questo deve essere il personaggio più a destra idoneo per la rimozione. Deve ripetere questo processo fino a quando la stringa non è più lunga di una determinata lunghezza di input .
† "Questo è perfettamente leggibile!" Ma se stai leggendo questa nota, probabilmente non lo è, davvero ... :)
Esempi
Qui puoi vedere questo processo applicato per dimensioni di input successivamente inferiori:
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.)
Dopo aver schiacciato la stringa fino a 17 caratteri, esauriamo le vocali da rimuovere, quindi il carattere successivo che rimuoviamo è lo spazio più a destra; quando colpiamo 14 caratteri, abbiamo rimosso tutte le vocali e gli spazi, quindi iniziamo semplicemente a sgranocchiare la corda da destra a sinistra.
Ecco alcuni pseudocodici codice Python che risolve questa sfida:
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
Regole
Questo è code-golf , quindi vince il codice più breve in byte.
La stringa di input sarà composta dai caratteri ASCII stampabili dallo spazio (
, decimale 32) fino alla tilde inclusa (
~
, decimale 126). Non ci saranno vocali maiuscoleAEIOU
nella stringa. In particolare, non ci saranno Unicode, tab o newline coinvolti.Chiamare la stringa di input s e la lunghezza target di input t . Quindi è garantita 0 <t ≤ lunghezza ( s ) ≤ 10000. (In particolare, la stringa di input non sarà mai vuota. Se t = length ( s ), dovresti semplicemente restituire la stringa non modificata.)
Casi 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
sono vocali e AEIOU
non accadranno, per semplicità. (L'intera cosa maiuscola / minuscola non è ciò su cui voglio concentrarmi.) Ho aggiunto chiarimenti.
w
(per esempio, nella parola co w , w
è una vocale!) Naturalmente, che ha optato per questo, ma per cui non è detto che l'insieme delle vocali è aeiou
, si dovrebbe a volte includere y
e w
. : -O
for index, char in enumerate(string)
invece il range(len(str))
costrutto
y
una vocale?