Görev tanımı
Bazen küçük bir alana yazdığınız bir şeye gerçekten uymanız gerekir. Ünlüleri bırakmak ve lk thk - ve başarısız olmak, gerçekten kim boşluklara ihtiyaç duyar? Thssprfctlrdbl! †
Kaldırır ünlüleri küçük harfli bir işlev veya program yazın aeiou
ve sonra boşluk ve ardından herhangi bir karakterleri girdi dizesi . Ayrıca, bir karakteri her kaldırışınızda , kaldırmaya uygun en doğru karakter olmalıdır . Dize verilen giriş uzunluğundan daha uzun olmayana kadar bu işlemi tekrarlamalıdır .
† “Bu mükemmel bir şekilde okunuyor!” Ama eğer bu dipnotu okuyorsanız, muhtemelen değil ... :)
Örnekler
Burada art arda daha küçük giriş boyutları için uygulanan bu işlemi görebilirsiniz:
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.)
Dizeyi 17 karaktere kadar sıktıktan sonra, çıkarmamız için sesli harfler tükenir, bu yüzden kaldırdığımız bir sonraki karakter en sağdaki boşluktur; 14 karaktere bastığımızda , tüm ünlü harfleri ve boşlukları kaldırdık , bu yüzden ipi sağdan sola doğru çekmeye başlıyoruz.
İşte bu meydan okuma çözen bazı sözde kod Python kodu:
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
kurallar
Bu kod golf , yani bayt cinsinden en kısa kod kazanır.
Giriş dizesi, boşluktan (
, ondalık 32) ve tilde (
~
, ondalık 126) içeren basılabilir ASCII karakterlerinden oluşacaktır .AEIOU
Dize hiçbir büyük harf olmaz . Özellikle, hiçbir Unicode, sekme veya yeni satır eklenmeyecektir.Giriş dizesini s ve giriş hedef uzunluğunu t arayın . Daha sonra, 0 <t ≤ uzunluğu ( ler ) ≤ 10000 garanti edilir. (Özellikle, girdi dizesi boş olmayacak. Eğer t uzunluğunu (= ler ), sadece değiştirilmemiş dize dönmelidir.)
Test durumları
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
ünlüler ve AEIOU
basitlik için oluşmayacak. (Büyük / küçük harflerin tümü odaklanmak istediğim şey değil.) Açıklama ekledim.
w
(kelime eş, örneğin w , w
Tabii ki, bu biri için anlaştık sesli harf!), ama o ünlülerinin kümesidir belirtti değil nereye aeiou
, bazen içermelidir y
ve w
. : -O
for index, char in enumerate(string)
yerine düşününrange(len(str))
y
bir sesli harf?