บทนำและเครดิต
วันนี้ได้โดยไม่ต้องโหมโรงแฟนซี: takewhile
โปรดดำเนินการ
ความแตกต่างของสิ่งนี้ (ในโครงสร้างข้อมูลที่ไม่สำคัญ) เป็นการกำหนดหลักสูตรการเขียนโปรแกรมเชิงปฏิบัติการของมหาวิทยาลัย ตอนนี้งานนี้ปิดและมีการพูดคุยกันในชั้นเรียนและฉันได้รับอนุญาตจากอาจารย์ให้โพสต์ไว้ที่นี่ (ฉันถามอย่างชัดเจน)
สเปค
อินพุต
อินพุตจะเป็นรายการ (หรือแนวคิดที่เทียบเท่ากับภาษาของคุณ) ของจำนวนเต็มบวก
เอาท์พุต
ผลลัพธ์ควรเป็นรายการ (หรือแนวคิดที่เทียบเท่ากับภาษาของคุณ) ของจำนวนเต็มบวก
จะทำอย่างไร?
งานของคุณคือการนำไปใช้takewhile
(อนุญาตให้ใช้ภาษาที่มีอยู่ในเครื่อง) พร้อมคำอธิบายว่าหมายเลขที่อยู่ระหว่างการพิจารณาจะเท่ากัน (เพื่อเน้นไปที่ takewhile)
ดังนั้นคุณจึงวนซ้ำรายการตั้งแต่ต้นจนจบและในขณะที่เงื่อนไข (เท่ากับ) คุณคัดลอกไปยังรายการผลลัพธ์และทันทีที่คุณกดองค์ประกอบที่ไม่ทำให้เงื่อนไขเป็นจริงคุณจะยกเลิกการดำเนินการและเอาท์พุท (ตัวอย่างทีละขั้นตอนอยู่ด้านล่าง) ฟังก์ชันการสั่งซื้อที่สูงกว่านี้เรียกว่า takeWhile ( takewhile
)
กรณีมุมที่อาจเกิดขึ้น
ลำดับของรายการที่ส่งออกเมื่อเทียบกับรายการการป้อนข้อมูลที่อาจจะไม่สามารถเปลี่ยนแปลงได้เช่นอาจจะไม่กลายเป็น[14,42,2]
[42,14]
รายการที่ว่างเปล่าคือ in- and output ที่ถูกต้อง
ใครชนะ?
นี่คือ code-golf ดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ!
ใช้กฎมาตรฐานแน่นอน
ทดสอบเวกเตอร์
[14, 42, 2324, 97090, 4080622, 171480372] -> [14, 42, 2324, 97090, 4080622, 171480372]
[42, 14, 42, 2324] -> [42, 14, 42, 2324]
[7,14,42] -> []
[] -> []
[171480372, 13, 14, 42] -> [171480372]
[42, 14, 42, 43, 41, 4080622, 171480372] -> [42, 14, 42]
ตัวอย่างทีละขั้นตอน
Example Input: [42, 14, 42, 43, 41, 4080622, 171480372]
Consider first element: 42
42 is even (21*2)
Put 42 into output list, output list is now [42]
Consider second element: 14
14 is even (7*2)
Put 14 into output list, output list is now [42,14]
Consider third element: 42
42 is even (21*2)
Put 42 into output list, output list is now [42,14,42]
Consider fourth element: 43
43 is not even (2*21+1)
Drop 43 and return the current output list
return [42,14,42]