Mô tả công việc
Đôi khi, bạn thực sự cần phải phù hợp với những gì bạn đang viết trong một không gian nhỏ. Nó có thể hấp dẫn để thả các nguyên âm và viết lk ths - và thất bại rằng, ai thực sự cần không gian? Thssprfctlrdbl! †
Viết hàm hoặc chương trình loại bỏ các nguyên âm chữ thường aeiou
, rồi khoảng trắng và sau đó bất kỳ ký tự nào từ chuỗi đầu vào . Hơn nữa, mỗi khi bạn loại bỏ một ký tự, nó phải là ký tự ngoài cùng bên phải đủ điều kiện để loại bỏ. Nó phải lặp lại quá trình này cho đến khi chuỗi không dài hơn một số độ dài đầu vào đã cho .
† Điều này hoàn toàn có thể đọc được!, Nhưng nếu bạn đang đọc chú thích này, có lẽ nó không, thực sự ... :)
Ví dụ
Tại đây, bạn có thể thấy quy trình này được áp dụng cho các kích cỡ đầu vào nhỏ hơn liên tiếp:
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.)
Sau khi ép chuỗi xuống còn 17 ký tự, chúng tôi hết nguyên âm để xóa, vì vậy ký tự tiếp theo chúng tôi loại bỏ là khoảng trống ngoài cùng bên phải; Khi chúng tôi đạt 14 ký tự, chúng tôi đã xóa tất cả các nguyên âm và dấu cách, vì vậy chúng tôi chỉ cần bắt đầu nhai chuỗi từ phải sang trái.
Dưới đây là một số mã Python giả để giải quyết thách thức này:
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
Quy tắc
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.
Chuỗi đầu vào sẽ bao gồm các ký tự ASCII có thể in từ khoảng trắng (
, thập phân 32) cho đến và bao gồm dấu ngã (
~
, thập phân 126). Sẽ không có nguyên âm viết hoaAEIOU
trong chuỗi. Đặc biệt, sẽ không có Unicode, tab hoặc dòng mới liên quan.Gọi chuỗi đầu vào s và độ dài mục tiêu đầu vào t . Sau đó, 0 <t ≤ chiều dài ( s ) ≤ 10000 được đảm bảo. (Đặc biệt, chuỗi đầu vào sẽ không bao giờ trống. Nếu t = length ( s ), bạn chỉ nên trả về chuỗi không được sửa đổi.)
Các trường hợp thử nghiệm
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
là nguyên âm, và AEIOU
sẽ không xảy ra, vì đơn giản. (Toàn bộ chữ hoa / chữ thường không phải là thứ tôi muốn tập trung vào.) Tôi đã thêm làm rõ.
w
(ví dụ: trong từ co w , w
là một nguyên âm!) Tất nhiên, điều đó được giải quyết cho cái này, nhưng đối với trường hợp không nói rằng bộ nguyên âm là aeiou
, đôi khi bạn nên bao gồm y
và w
. : -O
for index, char in enumerate(string)
thay vì range(len(str))
xây dựng
y
một nguyên âm?