ในการเรียงแพนเค้กการดำเนินการที่อนุญาตเท่านั้นคือการย้อนกลับองค์ประกอบของคำนำหน้าบางส่วนของลำดับ หรือคิดว่าเป็นแพนเค้กกอง: เราใส่ไม้พายเข้าไปในกองและหมุนแพนเค้กทั้งหมดเหนือไม้พาย
ยกตัวอย่างเช่นลำดับ6 5 4 1 2 3
สามารถจัดเรียงตามพลิกแรกแรก6
องค์ประกอบ (ทั้งลำดับ) ผลผลิตผลกลาง3 2 1 4 5 6
และจากนั้นพลิกแรกองค์ประกอบที่เดินทางมาถึง3
1 2 3 4 5 6
เนื่องจากมีการดำเนินการเพียงครั้งเดียวกระบวนการเรียงลำดับทั้งหมดจึงสามารถอธิบายได้ด้วยลำดับของจำนวนเต็มโดยที่จำนวนเต็มแต่ละจำนวนคือจำนวนองค์ประกอบ / แพนเค้กเพื่อรวมการพลิกหน้า ตัวอย่างข้างต้นลำดับการเรียงลำดับ6 3
จะเป็น
อีกตัวอย่างหนึ่ง: สามารถจัดเรียงด้วย4 2 3 1
4 2 3 2
นี่คือผลลัพธ์ระดับกลาง:
4 2 3 1
flip 4: 1 3 2 4
flip 2: 3 1 2 4
flip 3: 2 1 3 4
flip 2: 1 2 3 4
งาน:
เขียนโปรแกรมที่รับรายการจำนวนเต็มและพิมพ์ลำดับการเรียงแพนเค้กที่ถูกต้อง
รายการที่จะเรียงอาจเป็นรายการที่คั่นด้วยช่องว่างจาก stdin หรืออาร์กิวเมนต์บรรทัดคำสั่ง พิมพ์รายการอย่างไรก็ตามมันสะดวกตราบใดที่ค่อนข้างอ่านได้
นี่คือ codegolf!
แก้ไข:
ดังที่ฉันได้กล่าวในความคิดเห็นคุณไม่จำเป็นต้องปรับเอาท์พุทให้เหมาะสม (การหาลำดับที่สั้นที่สุดคือ NP-hard ) อย่างไรก็ตามฉันเพิ่งรู้ว่าวิธีแก้ปัญหาราคาถูกคือการโยนตัวเลขสุ่มจนกว่าคุณจะได้ผลลัพธ์ที่ต้องการ (เป็นโบกี้แบบใหม่ [??]) ไม่มีคำตอบเพื่อให้ห่างไกลได้กระทำนี้ดังนั้นตอนนี้เราประกาศว่าอัลกอริทึมของคุณไม่ควรพึ่งพา (หลอก)
ในขณะที่คุณกำลังเตะตัวเองนี่คือตัวแปร bogopancakesort ใน Ruby 2.0 (60 ตัวอักษร) เพื่อถูใน:
a=$*.map &:to_i
a=a[0,p(v=rand(a.size)+1)].reverse+a[v..-1]while a!=a.sort
4 3 2 1
แทน4 2 3 1