ท้าทาย
ได้รับภาพแรสเตอร์สี * มีความกว้างและความสูงเดียวกันการส่งออกภาพเปลี่ยนภายใต้แผนที่แมวของ Arnold (* รายละเอียดดูด้านล่าง)
คำนิยาม
ด้วยขนาดของภาพที่Nเราคิดว่าพิกัดของพิกเซลที่จะได้รับเป็นตัวเลขระหว่างและ0N-1
แผนที่แมวของอาร์โนลด์นั้นถูกกำหนดไว้ดังนี้:
พิกเซลที่พิกัดถูกย้ายไปยัง[x,y][(2*x + y) mod N, (x + y) mod N]
นี้คืออะไร แต่เปลี่ยนเชิงเส้นในพรู: สีเหลือง, mod Nสีม่วงสีเขียวและเป็นส่วนหนึ่งได้รับการแมปกลับไปยังตารางเริ่มต้นเนื่องจากการ
แผนที่นี้ (เรียกมันว่าf) มีคุณสมบัติดังต่อไปนี้:
มันเป็นbijectiveนั่นหมายความว่าพลิกกลับ:
[[2,1],[1,1]]มันเป็นการเปลี่ยนแปลงเชิงเส้นที่มีเมทริกซ์ เนื่องจากมันมีดีเทอร์มิแนนต์1และมีเฉพาะจำนวนเต็มอินเวิร์สจึงมีเพียงรายการจำนวนเต็มและกำหนดโดย[[1,-1],[-1,2]]นี่หมายความว่ามันเป็น bijective บนพิกัดจำนวนเต็มด้วยมันเป็นองค์ประกอบของแรงบิดของกลุ่มแผนที่ bijective ของ
N x Nภาพซึ่งหมายความว่าถ้าคุณใช้มันอย่างเพียงพอหลายครั้งคุณจะได้ภาพต้นฉบับกลับมา:f(f(...f(x)...)) = xจำนวนครั้งที่แผนที่นำไปใช้กับผลลัพธ์ของตัวเองในการรับประกันตัวตนจะน้อยกว่า3*Nหรือเท่ากับ ในรายการต่อไปนี้คุณสามารถเห็นภาพของแมวหลังจากจำนวนแอพพลิเคชั่นซ้ำของแผนที่แมวของอาร์โนลด์ที่กำหนดและภาพเคลื่อนไหวของแอปพลิเคชันซ้ำ ๆ ที่ดูเหมือน:

รายละเอียด
โปรแกรมของคุณไม่จำเป็นต้องจัดการกับภาพ แต่จำเป็นต้องใช้ 2D-arrays / matrices, string หรือ 2D-structure ที่คล้ายกันเช่นกัน
มันไม่สำคัญว่า
(0,0)จุดของคุณจะอยู่ทางซ้ายล่างหรือบนซ้าย (หรือในมุมอื่น ๆ หากสะดวกกว่าในภาษาของคุณ) โปรดระบุแบบแผนที่คุณใช้ในการส่งของคุณ
Testcases
ในรูปแบบเมทริกซ์ ( [1,2,3,4]เป็นแถวบนสุดที่1มีดัชนี(0,0), 2ดัชนี(1,0), 5มีดัชนี(0,1))
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
maps to:
1 14 11 8
12 5 2 15
3 16 9 6
10 7 4 13
--------------------
1 2 3
4 5 6
7 8 9
map to:
1 8 6
9 4 2
5 3 7
ในฐานะที่เป็นรูปภาพ (ซ้ายล่างคือ(0,0)):

