Aufgabenbeschreibung
Manchmal müssen Sie wirklich etwas anbringen, das Sie auf kleinem Raum schreiben. Es mag verlockend sein, die Vokale fallen zu lassen und diese zu schreiben - und wenn das nicht gelingt, wer braucht dann wirklich Leerzeichen? Thssprfctlrdbl! †
Schreibe eine Funktion oder Programm , das entfernt Kleinbuchstaben Vokale aeiouund dann Leerzeichen und dann alle Zeichen aus einem Eingabezeichenfolge . Außerdem muss jedes Mal, wenn Sie einen Charakter entfernen, dieser Charakter der am weitesten rechts stehende Charakter sein, der zum Entfernen berechtigt ist. Dieser Vorgang muss wiederholt werden, bis die Zeichenfolge nicht länger als eine bestimmte Eingabelänge ist .
† „Das ist perfekt lesbar!“ Aber wenn Sie diese Fußnote lesen, ist es wahrscheinlich nicht wirklich ... :)
Beispiele
Hier sehen Sie diesen Vorgang für sukzessive kleinere Eingabegrößen:
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.)
Nachdem wir die Zeichenfolge auf 17 Zeichen reduziert haben, gehen uns die zu entfernenden Vokale aus, sodass das nächste Zeichen, das wir entfernen, das am weitesten rechts stehende Leerzeichen ist. Wenn wir 14 Zeichen erreicht haben, haben wir alle Vokale und Leerzeichen entfernt, sodass wir einfach anfangen, die Zeichenfolge von rechts nach links zu kauen.
Hier ist ein Pseudocode- Python-Code, der diese Herausforderung löst:
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
Regeln
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Die Eingabezeichenfolge besteht aus den druckbaren ASCII-Zeichen von Leerzeichen (
Dezimalzahl 32) bis einschließlich Tilde (~Dezimalzahl 126). Es werden keine Vokale in Großbuchstaben angezeigtAEIOUDie Zeichenfolge enthält in . Insbesondere handelt es sich nicht um Unicode, Tabulatoren oder Zeilenumbrüche.Rufen Sie die Eingabezeichenfolge s und die Eingabe-Ziellänge t auf . Dann ist 0 <t ≤ Länge ( n ) ≤ 10000 garantiert. (Insbesondere wird die Eingabezeichenfolge niemals leer sein. Wenn t = Länge ( s ), sollten Sie die Zeichenfolge nur unverändert zurückgeben.)
Testfälle
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
aeiousind Vokale und AEIOUwerden der Einfachheit halber nicht vorkommen. (Die ganze Groß- / Kleinschreibung ist nicht das, worauf ich mich konzentrieren möchte.) Ich fügte eine Klarstellung hinzu.
w(zum Beispiel in dem Wort co w , wist ein Vokal!) Natürlich, die für diesen abgemacht, aber für , wo es nicht angegeben ist , dass der Satz von Vokalen ist aeiou, sollten Sie manchmal enthalten yund w. : -O
for index, char in enumerate(string)statt des range(len(str))Konstrukts
yein Vokal?