ท้าทาย
ได้รับภาพแรสเตอร์สี * มีความกว้างและความสูงเดียวกันการส่งออกภาพเปลี่ยนภายใต้แผนที่แมวของ Arnold (* รายละเอียดดูด้านล่าง)
คำนิยาม
ด้วยขนาดของภาพที่N
เราคิดว่าพิกัดของพิกเซลที่จะได้รับเป็นตัวเลขระหว่างและ0
N-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)
):