ฉันยุ่งกับเครือข่ายตัวต้านทานที่ไม่มีที่สิ้นสุด (เรื่องยาว) เมื่อฉันเจอรูปแบบการเรียกซ้ำที่น่าสนใจต่อไปนี้:
|-||
|---
ตัวอย่างของรูปแบบนี้มีความกว้างเป็นสองเท่าของความสูง หากต้องการเปลี่ยนจากรูปแบบหนึ่งไปยังอีกระดับคุณจะแบ่งสี่เหลี่ยมนี้ออกเป็นบล็อกย่อยสองบล็อก (ซึ่งแต่ละรูปนั้นเป็นสี่เหลี่ยมจัตุรัส NxN):
AB =
|-||
|---
so A =
|-
|-
and B =
||
--
แบ่งครึ่งเหล่านี้แล้วทำซ้ำและจัดเรียงใหม่ตามรูปแบบต่อไปนี้:
ABAA
ABBB
giving
|-|||-|-
|---|-|-
|-||||||
|-------
ท้าทาย
เขียนโปรแกรม / ฟังก์ชั่นซึ่งให้ตัวเลขN
ผลลัพธ์ที่N
ซ้ำของการออกแบบซ้ำนี้ นี่คือกอล์ฟ
รูปแบบ I / O นั้นค่อนข้างผ่อนปรน: คุณอาจส่งคืนสตริงเดี่ยวรายการของสตริงอาเรย์สองมิติของตัวละคร ฯลฯ อนุญาตให้ใช้ช่องว่างที่ต่อท้ายได้ตามอำเภอใจ คุณอาจใช้การจัดทำดัชนี 0 หรือ 1 ก็ได้
ตัวอย่าง
ซ้ำหลายครั้งแรกของรูปแบบดังต่อไปนี้:
N = 0
|-
N = 1
|-||
|---
N = 2
|-|||-|-
|---|-|-
|-||||||
|-------
N = 3
|-|||-|-|-|||-||
|---|-|-|---|---
|-|||||||-|||-||
|-------|---|---
|-|||-|-|-|-|-|-
|---|-|-|-|-|-|-
|-||||||||||||||
|---------------
N = 4
|-|||-|-|-|||-|||-|||-|-|-|||-|-
|---|-|-|---|---|---|-|-|---|-|-
|-|||||||-|||-|||-|||||||-||||||
|-------|---|---|-------|-------
|-|||-|-|-|-|-|-|-|||-|-|-|||-|-
|---|-|-|-|-|-|-|---|-|-|---|-|-
|-|||||||||||||||-|||||||-||||||
|---------------|-------|-------
|-|||-|-|-|||-|||-|||-|||-|||-||
|---|-|-|---|---|---|---|---|---
|-|||||||-|||-|||-|||-|||-|||-||
|-------|---|---|---|---|---|---
|-|||-|-|-|-|-|-|-|-|-|-|-|-|-|-
|---|-|-|-|-|-|-|-|-|-|-|-|-|-|-
|-||||||||||||||||||||||||||||||
|-------------------------------
ฉันสงสัยว่ามีวิธีพีชคณิตสั้น ๆ ในการคำนวณโครงสร้างนี้หรือไม่
f(n,x,y)
ที่โดยตรงสามารถคำนวณว่าได้รับการประสานงานควรมีหรือ-
|
มันอาจเกี่ยวข้องกับการดำเนินการโมดูโลหรือการดำเนินงานระดับบิต เทคนิคที่ฉันเคยเห็นทั้งหมดเกี่ยวข้องกับการตัด / การเข้าร่วมอาร์เรย์ดังแสดงในสเปค
f(x,y)
ยังใช้งานได้เนื่องจากหากx,y
ถูกต้องผลลัพธ์จะไม่ขึ้นอยู่กับn
|-
?