ใน APL คุณสามารถเขียนฟังก์ชั่นโดยปริยายเรียกว่ารถไฟ พวกเขาทำงานอย่างไรไม่เกี่ยวข้องกับความท้าทายนี้ นี่คือวิธีที่แตกต่างกันที่พวกเขาสามารถจัดกลุ่มโดยใช้⍴
เป็นฟังก์ชั่น:
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴⍴))
...
คำสั่งซื้อยังคงเหมือนเดิม ขั้นตอนคือตราบใดที่มีมากกว่า 3 ฟังก์ชั่นอย่างเข้มงวดฟังก์ชั่น 3 ครั้งสุดท้ายจะถูกจัดกลุ่มเป็นหนึ่งฟังก์ชั่น หากเราพบรถไฟซ้อนกันเราจะวงเล็บเป็นอันดับแรกก่อนดำเนินการต่อ นี่คือขั้นตอนที่ใช้กับ⍴⍴⍴⍴⍴⍴
:
Step 0: ⍴⍴⍴⍴⍴⍴
There are strictly more than 3 functions, repeat.
Step 1: ⍴⍴⍴(⍴⍴⍴)
There are strictly more than 3 functions, repeat.
Step 2: ⍴(⍴⍴(⍴⍴⍴))
There are 3 or less functions, we're done.
นี่เป็นขั้นตอนเดียวกันกับ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
:
Step 0: ⍴⍴⍴(⍴⍴)⍴(⍴⍴⍴⍴(⍴⍴⍴))⍴⍴
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴⍴⍴(⍴⍴⍴)
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴⍴
There are 3 or less functions, we're done.
Step 1: ⍴⍴(⍴⍴(⍴⍴⍴))
There are 3 or less functions, we're done.
Step 1: ⍴⍴⍴(⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴)
There are strictly more than 3 functions, repeat.
We have met a nested train, applying procedure to that first:
Step 0: ⍴⍴
There are 3 or less functions, we're done.
Step 2: ⍴⍴⍴((⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴))
There are strictly more than 3 functions, repeat.
Step 3: ⍴(⍴⍴((⍴⍴)⍴((⍴⍴(⍴⍴(⍴⍴⍴)))⍴⍴)))
There are 3 functions or less, we're done.
อินพุต
สำหรับความท้าทายนี้อินพุตจะง่ายขึ้น ซึ่งหมายความว่าคุณสามารถเลือก 2 ตัวอักษรที่แตกต่างกันสำหรับการเปิดและปิดวงเล็บและ 1 อักขระสำหรับฟังก์ชั่นซึ่งแตกต่างจากที่เลือกไว้สำหรับวงเล็บ ตัวอักษรที่คุณเลือกจะต้องสอดคล้องกัน อินพุตจะไม่ว่างเปล่าและจะไม่มีวงเล็บที่ไม่มีเนื้อหา (เช่น()
)
เอาท์พุต
อีกครั้งคุณอาจเลือก 3 ตัวอักษรที่แตกต่างกัน 2 สำหรับวงเล็บและ 1 สำหรับฟังก์ชั่น โปรดทราบว่าพวกเขาไม่จำเป็นต้องเหมือนกันกับที่เลือกสำหรับการป้อนข้อมูล แต่พวกเขาจะต้องสอดคล้อง
กฎระเบียบ
- หากมีวงเล็บที่ล้อมรอบเพียงหนึ่งฟังก์ชันภายในฟังก์ชันนั้นในอินพุตคุณต้องลบออกในเอาต์พุต ผลลัพธ์ของคุณอาจไม่มีวงเล็บที่ไม่จำเป็น (เช่นล้อมรอบเพียงหนึ่งฟังก์ชันหรือล้อมรอบเอาต์พุตทั้งหมด)
- คุณไม่จำเป็นต้องใช้อัลกอริทึมที่ใช้ที่นี่ตราบใดที่โซลูชันของคุณใช้ได้กับการท้าทายนี้
- อินพุตและเอาต์พุตเป็นสตริงในรูปแบบที่อธิบายไว้ในส่วนอินพุตและเอาต์พุต อินพุตจะมีอักขระอย่างน้อยหนึ่งตัว
- ห้ามใช้ช่องโหว่มาตรฐานโดยเด็ดขาด
- นี่คือรหัสกอล์ฟคำตอบที่สั้นที่สุดจึงชนะ อย่างไรก็ตามจะไม่มีคำตอบที่ยอมรับได้เนื่องจากนี่เป็นการแข่งขันแบบต่อภาษาและเพื่อสนับสนุนการตอบรับเป็นภาษาซึ่งงานนี้จะส่งผลให้โค้ดยาวขึ้นเมื่อเทียบกับโค้ดที่เขียนในภาษาอื่น
กรณีทดสอบ
ตัวอักษรที่ใช้ที่นี่คือ()⍴
คุณควรแทนที่ด้วยตัวอักษรที่คุณเลือก
⍴ -> ⍴
⍴ -> ⍴
⍴⍴ -> ⍴⍴
⍴⍴⍴ -> ⍴⍴⍴
⍴⍴⍴⍴ -> ⍴(⍴⍴⍴)
⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴⍴ -> ⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴(⍴⍴⍴))))))
⍴⍴⍴⍴⍴(⍴⍴⍴)⍴⍴(⍴(⍴⍴⍴)⍴⍴⍴)⍴⍴⍴ -> ⍴(⍴⍴(⍴⍴((⍴⍴⍴)⍴(⍴(⍴(⍴⍴⍴)(⍴⍴⍴))(⍴⍴⍴)))))
(⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴) -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
(⍴⍴⍴)(⍴⍴⍴)⍴⍴⍴ -> (⍴⍴⍴)(⍴⍴⍴)(⍴⍴⍴)
⍴⍴(⍴)⍴⍴ -> ⍴⍴(⍴⍴⍴)
((⍴⍴)) -> ⍴⍴
⍴⍴((⍴⍴))⍴⍴ -> ⍴⍴((⍴⍴)⍴⍴)
ความท้าทายนี้ได้รับการโพสต์ใน Sandbox หากคุณมีสิทธิ์ที่จำเป็นคุณสามารถดูโพสต์จาก sandbox ที่นี่