Deskripsi tugas
Terkadang, Anda benar-benar perlu memasukkan sesuatu yang Anda tulis di ruang kecil. Mungkin tergoda untuk menjatuhkan huruf vokal dan menulisnya - dan gagal itu, siapa yang benar-benar membutuhkan ruang? Thssprfctlrdbl! †
Tulis fungsi atau program yang menghilangkan vokal huruf kecil aeiou
, lalu spasi, lalu karakter apa pun dari string input . Selanjutnya, setiap kali Anda menghapus karakter, itu harus karakter paling kanan yang memenuhi syarat untuk dihapus. Ini harus mengulangi proses ini sampai string tidak lebih dari beberapa panjang input yang diberikan .
† “Ini benar-benar bisa dibaca!” Tetapi jika Anda membaca catatan kaki ini, mungkin tidak, sungguh ... :)
Contohnya
Di sini, Anda dapat melihat proses ini diterapkan untuk ukuran input yang lebih kecil secara berturut-turut:
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.)
Setelah menekan string ke 17 karakter, kita kehabisan vokal untuk dihapus, jadi karakter berikutnya yang kita hapus adalah ruang paling kanan; ketika kami menekan 14 karakter, kami telah menghapus semua vokal dan spasi, jadi kami mulai mengunyah string dari kanan ke kiri.
Berikut adalah beberapa kode pseudocode Python yang memecahkan tantangan ini:
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
Aturan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
String input akan terdiri dari karakter ASCII yang dapat dicetak dari luar angkasa (
, desimal 32) hingga dan termasuk tilde (
~
, desimal 126). Tidak akan ada vokal huruf besarAEIOU
dalam string. Secara khusus, tidak akan ada Unicode, tab, atau baris baru yang terlibat.Panggil string input s , dan panjang target input t . Maka 0 <t ≤ panjang ( s ) ≤ 10000 dijamin. (Secara khusus, input string tidak akan pernah kosong. Jika t = panjang ( s ), Anda hanya harus kembali string yang tidak dimodifikasi.)
Uji kasus
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
adalah vokal, dan AEIOU
tidak akan muncul, untuk kesederhanaan. (Seluruh huruf besar / huruf kecil bukan apa yang ingin saya fokuskan.) Saya menambahkan klarifikasi.
w
(misalnya, dalam kata co w , w
adalah vokal!) Tentu saja, itu cocok untuk yang satu ini, tetapi untuk yang tidak menyatakan bahwa rangkaian vokal adalah aeiou
, Anda terkadang harus memasukkan y
dan w
. : -O
for index, char in enumerate(string)
alih-alih range(len(str))
konstruksi
y
vokal?