มัวร์ซ้ำแล้วซ้ำอีก


9

ข้อมูล

ตัวเลข 1 ถึง 9 เป็นตัวแทนของเซลล์หนึ่งในละแวกใกล้เคียงของมัวร์โดยที่ 5 เป็นเซลล์กลาง ดังนั้น:

123
456
789

1={-1,-1} 2={-1, 0} 3={-1, 1}
4={ 0,-1} 5={ 0, 0} 6={ 0, 1} 
7={ 1,-1} 8={ 1, 0} 9={ 1, 1}

ความท้าทาย

คุณสามารถรับอินพุตผ่าน STDIN, ARGV หรืออาร์กิวเมนต์ของฟังก์ชันและส่งคืนผลลัพธ์หรือพิมพ์ไปที่ STDOUT อินพุตคือกริด N x N (ทอรัสทอพอโลยีหมายถึงถ้า x หรือ y คือ <1 จากนั้น x หรือ y = N และถ้า x หรือ y> N จากนั้น x หรือ y = 1) และโปรแกรมของคุณจะต้องแสดงผลลัพธ์หนึ่ง กริดโดยแทนที่แต่ละเซลล์ด้วยค่าที่เซลล์เพื่อนบ้านของมัวร์

ตัวอย่างอินพุตกริด (2 x 2):

13
79

เอาท์พุท:

97
31

คำอธิบาย:

เริ่มต้นที่ตำแหน่ง 1,1 เรามีค่า 1 เนื่องจากค่า 1 = {- 1, -1} เราต้องดึง 1 + (- 1), 1 + (- 1) = 0,0 และเนื่องจากมันคือ torus 0,0 เราจึงพันรอบเป็น N ดังนั้นเราจึงดึงค่าของเซลล์ที่ตำแหน่ง 1,1 (1) ด้วยค่าของเซลล์ที่ตำแหน่ง 2,2 (9)

สำหรับเซลล์ถัดไป 1,2 เรามีค่า 3 (= -1, 1) ดังนั้น 1 + (- 1), 2 + (1) = 0,3 ห่อประมาณ 2,1 ซึ่งเป็นค่า 7

ค่าของเซลล์ถัดไปที่ 2,1 คือ 7 (= 1, -1) ดังนั้น 2+ (1), 1 + (- 1) = 3,0 ล้อมรอบถึง 1,2 ซึ่งเป็นค่า 3

ค่าเซลล์ถัดไปที่ 2,2 คือ 9 (= 1, 1) ดังนั้น 2+ (1), 2 + (1) = 3,3 ห่อประมาณ 1,1 ซึ่งเป็นค่า 1

ตัวอย่างเพิ่มเติม

อินพุตกริด (3 x 3):

123
456
789

ผลลัพธ์ที่คาดหวัง:

987
654
321

อินพุตกริด (5 x 5):

77497
81982
32236
96336
67811

ผลลัพธ์ที่คาดหวัง:

28728
37337
11923
73369
77433

หมายเหตุสุดท้าย

หากคุณมีคำถามใด ๆ อย่าลังเลที่จะแสดงความคิดเห็น นี่คือความท้าทายของการเล่นกอล์ฟรหัสชนะที่สั้นที่สุด!


คุณจะกำหนดตำแหน่งขององค์ประกอบได้อย่างไร ฉันไม่เข้าใจวิธีการจัดทำดัชนีชุดอินพุตของเซลล์
Rainbolt

@Rainbolt อินพุตถูกสร้างดัชนีโดยแถวแล้วคอลัมน์ ดังนั้นในตัวอย่างเซลล์สุดท้าย (อินพุต) ที่ 2,3 คือ 9. แถว 2 = 81982 และคอลัมน์ที่สามของนั้นคือ 9
AndoDaan


4
ไม่สามารถช่วยได้ แต่อ่าน "ตัวอย่างของมัวร์"
tomsmeding

คำตอบ:


9

APL (33)

APL ทำเพื่อสิ่งนี้ นี่คือฟังก์ชันที่ใช้กริดอินพุตเป็นเมทริกซ์ N-by-N และส่งกลับกริดเอาต์พุตเป็นเมทริกซ์ N-by-N

{(⍳⍴⍵)⌷¨(,∆∘.⊖(∆←2-⌽⍳3)∘.⌽⊂⍵)[⍵]}

ทดสอบ:

      ⍝ define input matrices
      ∆1 ← ↑(1 3)(7 9)
      ∆2 ← ↑(1 2 3)(4 5 6)(7 8 9)
      ∆3 ← ↑(7 7 4 9 7)(8 1 9 8 2)(3 2 2 3 6)(9 6 3 3 6)(6 7 8 1 1)
      ⍝ show input matrices
      ∆1 ∆2 ∆3
 1 3  1 2 3  7 7 4 9 7 
 7 9  4 5 6  8 1 9 8 2 
      7 8 9  3 2 2 3 6 
             9 6 3 3 6 
             6 7 8 1 1 
      ⍝ apply function to input matrices giving output matrices
      {(⍳⍴⍵)⌷¨(,∆∘.⊖(∆←2-⌽⍳3)∘.⌽⊂⍵)[⍵]} ¨ ∆1 ∆2 ∆3
 9 7  9 8 7  2 8 7 2 8 
 3 1  6 5 4  3 7 3 3 7 
      3 2 1  1 1 9 2 3 
             7 3 3 6 9 
             7 7 4 3 3 

5

Python, 174

def t(b):b=b.split("\n");E=enumerate;C=[-1]*3+[0]*3+[1]*3+[-1,0,1]*3;print"\n".join("".join(b[(i+C[int(x)-1])%len(b)][(j+C[int(x)+8])%len(y)]for j,x in E(y))for i,y in E(b))

Python ไม่ได้ทำเพื่อสิ่งนี้ ... APLเป็น!


3

Python, 105

รับและส่งคืนรายการ:

def f(a):e=enumerate;n=len(a);return[[a[(y+(v-1)/3-1)%n][(x+(v-1)%3-1)%n]for x,v in e(u)]for y,u in e(a)]

รับและส่งคืนสตริง (148 ตัวอักษร):

def f(s):
 a=[map(int,l)for l in s.split()];n=len(a);e=enumerate
 for y,u in e(a):print''.join(`a[(y+(v-1)/3-1)%n][(x+(v-1)%3-1)%n]`for x,v in e(u))

2

MATLAB - 121 ไบต์

function O=X(I),m=size(I,1);n=3*m;o=-1:1;c=o<2;M=c'*o+n*o'*c;D=repmat(I,3);C=D;C(:)=1:n*n;t=m+(1:m);O=C+M(D);O=D(O(t,t));

MATLAB ทำน้อยกว่า APL เล็กน้อย แต่ทำมาจาก Python เล็กน้อย ;)

ทดสอบผลลัพธ์

X( [1 2 3; 4 5 6; 7 8 9] )

ans =

     9     8     7
     6     5     4
     3     2     1

X( [7 7 4 9 7; 8 1 9 8 2; 3 2 2 3 6; 9 6 3 3 6; 6 7 8 1 1] )

ans =

     2     8     7     2     8
     3     7     3     3     7
     1     1     9     2     3
     7     3     3     6     9
     7     7     4     3     3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.