คำอธิบายงาน
บางครั้งคุณต้องพอดีกับสิ่งที่คุณเขียนในพื้นที่เล็ก ๆ มันอาจจะเป็นการดึงดูดให้ทิ้งสระและ wrt lk ths - และความล้มเหลวนั้นใครต้องการช่องว่างจริงๆ? Thssprfctlrdbl! †
เขียนฟังก์ชั่นหรือโปรแกรมที่เอาตัวพิมพ์เล็กสระaeiou
และช่องว่างแล้วและจากนั้นใด ๆตัวละครจากสายป้อน นอกจากนี้ทุกครั้งที่คุณลบตัวอักษรมันจะต้องเป็นตัวละครที่เหมาะสมที่สุดที่จะถูกลบ มันจะต้องทำซ้ำขั้นตอนนี้จนกว่าสตริงคือไม่เกินระยะเวลาในการป้อนข้อมูลบางส่วนที่ได้รับ
†“ นี่อ่านได้อย่างสมบูรณ์แบบ!” แต่ถ้าคุณอ่านเชิงอรรถนี่อาจจะไม่ใช่ ... จริง ๆ :)
ตัวอย่าง
ที่นี่คุณสามารถเห็นกระบวนการนี้ใช้กับขนาดอินพุตที่เล็กลงอย่างต่อเนื่อง:
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.)
หลังจากบีบสตริงลงเหลือ 17 ตัวอักษรเราจะใช้เสียงสระเพื่อเอาออกดังนั้นตัวละครตัวถัดไปที่เราลบคือช่องว่างด้านขวาสุด เมื่อเรากดอักขระ 14 ตัวเราได้ลบสระและช่องว่างทั้งหมดออกไปดังนั้นเราจึงเริ่มเคี้ยวสตริงจากขวาไปซ้าย
นี่คือรหัส Python ของpseudocodeที่แก้ปัญหานี้:
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
กฎระเบียบ
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ
สตริงอินพุตจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้จากช่องว่าง (
ทศนิยม 32) จนถึงและรวมตัวหนอน (
~
ทศนิยม 126) จะไม่มีสระตัวใหญ่AEIOU
ในสตริง โดยเฉพาะอย่างยิ่งจะไม่มี Unicode แท็บหรือการขึ้นบรรทัดใหม่ที่เกี่ยวข้องโทรสายป้อนsและการป้อนข้อมูลความยาวเป้าหมายที แล้ว 0 <T ≤ยาว ( s ) ≤ 10000 มีการประกัน (โดยเฉพาะอย่างยิ่งสายป้อนจะไม่เป็นที่ว่างเปล่า. ถ้าT = ความยาว ( s ), คุณก็ควรจะกลับสตริงแปร.)
กรณีทดสอบ
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
เป็นเสียงสระและAEIOU
จะไม่เกิดขึ้นเพื่อความเรียบง่าย (สิ่งที่เป็นตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็กทั้งหมดไม่ใช่สิ่งที่ฉันต้องการมุ่งเน้น) ฉันเพิ่มความกระจ่าง
w
(ตัวอย่างเช่นในการร่วมคำW , w
เป็นเสียงสระ!) ซึ่งแน่นอนว่าตัดสินสำหรับการนี้ แต่ที่มันไม่ได้ระบุว่าชุดของสระคือaeiou
บางครั้งคุณควรจะรวมถึงและy
w
: -O
for index, char in enumerate(string)
แทนที่จะrange(len(str))
สร้าง
y
สระเสียง?