พิมพ์สี่เหลี่ยมที่แข็งแรงทั้งหมด 3 คูณ 3


24

ตารางที่มีความทนทาน (คล้ายกับตารางมายากล ) คือการจัดเรียงของจำนวนเต็ม 1 ถึง N 2บนกริด N โดย N ดังนั้นทุก 2 โดย 2 subgrid จะมีผลรวมเท่ากัน

ตัวอย่างเช่นสำหรับ N = 3 หนึ่งตารางที่มีความทนทานคือ

1 5 3
9 8 7
4 2 6

เพราะทั้งสองรุ่นย่อย 4 คูณ 2

1 5
9 8
5 3
8 7
9 8
4 2
8 7
2 6

รวมเป็นจำนวนเดียวกันทั้งหมด 23:

23 = 1 + 5 + 9 + 8 = 5 + 3 + 8 + 7 = 9 + 8 + 4 + 2 = 8 + 7 + 2 + 6

ขณะนี้มีสี่เหลี่ยมที่แข็งแรงสำหรับค่า N ที่สูงขึ้นและแม้กระทั่งสี่เหลี่ยมจตุรัส แต่งานเดียวของคุณในความท้าทายนี้คือการส่งออกสี่เหลี่ยมที่มีความแข็งแรงทั้งหมด 3 คูณ 3 มี 376 ที่แตกต่างกัน 3 คูณ 3 กำลังสองรวมทั้งที่มีการสะท้อนหรือการหมุนของผู้อื่นและไม่ทั้งหมดมีผลรวม 23

เขียนโปรแกรมหรือฟังก์ชั่นที่ไม่มีการป้อนข้อมูล แต่พิมพ์หรือส่งคืนสตริงที่มีความทนทาน 376 ช่องในลำดับใด ๆ คั่นด้วยบรรทัดว่างด้วยบรรทัดใหม่ที่ต่อท้ายได้สูงสุดสองบรรทัด แต่ละตารางควรประกอบด้วยสามบรรทัดสามช่องว่างคั่นด้วยตัวเลขทศนิยมที่ไม่ใช่ศูนย์

นี่คือตัวอย่างเอาต์พุตที่ถูกต้อง:

1 5 3
9 8 7
4 2 6

1 5 6
8 7 3
4 2 9

1 5 6
8 9 3
2 4 7

1 5 7
9 6 3
2 4 8

1 6 2
8 9 7
4 3 5

1 6 2
9 7 8
4 3 5

1 6 3
9 8 7
2 5 4

1 6 7
8 5 2
3 4 9

1 6 7
9 4 3
2 5 8

1 7 2
9 4 8
5 3 6

1 7 2
9 6 8
3 5 4

1 7 4
8 3 5
6 2 9

1 7 4
9 2 6
5 3 8

1 7 6
9 2 4
3 5 8

1 8 2
5 9 4
6 3 7

1 8 3
6 5 4
7 2 9

1 8 3
9 2 7
4 5 6

1 8 4
5 7 2
6 3 9

1 8 4
6 9 3
2 7 5

1 8 4
9 3 6
2 7 5

1 8 6
7 3 2
4 5 9

1 9 2
5 6 4
7 3 8

1 9 2
6 4 5
7 3 8

1 9 2
6 8 5
3 7 4

1 9 2
8 3 7
4 6 5

1 9 3
7 2 5
6 4 8

1 9 3
7 6 5
2 8 4

1 9 4
5 8 2
3 7 6

1 9 4
6 7 3
2 8 5

1 9 4
8 2 5
3 7 6

1 9 5
7 2 3
4 6 8

1 9 5
7 4 3
2 8 6

2 3 5
9 8 6
4 1 7

2 3 6
9 7 5
4 1 8

2 4 3
8 9 7
5 1 6

2 4 3
9 7 8
5 1 6

2 4 6
7 8 3
5 1 9

2 4 7
8 9 3
1 5 6

2 4 8
9 6 3
1 5 7

2 5 3
9 4 8
6 1 7

2 5 4
9 3 7
6 1 8

2 5 4
9 8 7
1 6 3

2 5 7
6 8 1
4 3 9

2 5 7
6 9 1
3 4 8

2 5 8
7 6 1
3 4 9

2 5 8
9 4 3
1 6 7

2 6 1
7 9 8
5 3 4

2 6 1
8 7 9
5 3 4

2 6 3
5 9 4
7 1 8

2 6 4
5 8 3
7 1 9

2 6 7
9 1 4
3 5 8

2 6 8
7 4 1
3 5 9

2 7 1
8 4 9
6 3 5

2 7 1
8 6 9
4 5 3

2 7 3
5 6 4
8 1 9

2 7 3
6 4 5
8 1 9

2 7 3
9 1 8
5 4 6

2 7 5
4 8 1
6 3 9

2 7 5
6 9 3
1 8 4

2 7 5
9 3 6
1 8 4

2 8 1
4 9 5
7 3 6

2 8 4
7 6 5
1 9 3

2 8 5
4 9 1
3 7 6

2 8 5
6 7 3
1 9 4

2 8 6
7 4 3
1 9 5

2 9 1
4 6 5
8 3 7

2 9 1
5 4 6
8 3 7

2 9 1
5 8 6
4 7 3

2 9 1
7 3 8
5 6 4

2 9 3
6 1 5
7 4 8

2 9 4
3 7 1
6 5 8

2 9 4
3 8 1
5 6 7

2 9 5
4 7 1
3 8 6

2 9 5
7 1 4
3 8 6

2 9 6
5 3 1
4 7 8

2 9 6
5 4 1
3 8 7

3 2 5
9 8 7
4 1 6

3 2 6
8 9 5
4 1 7

3 2 7
9 6 5
4 1 8

3 4 2
7 9 8
6 1 5

3 4 2
8 7 9
6 1 5

3 4 5
9 2 7
6 1 8

3 4 8
6 9 1
2 5 7

3 4 9
7 6 1
2 5 8

3 4 9
8 5 2
1 6 7

3 5 1
7 8 9
6 2 4

3 5 2
8 4 9
7 1 6

3 5 4
9 1 8
6 2 7

3 5 4
9 6 8
1 7 2

3 5 8
9 1 4
2 6 7

3 5 8
9 2 4
1 7 6

3 5 9
7 4 1
2 6 8

3 6 1
7 8 9
4 5 2

3 6 2
4 9 5
8 1 7

3 6 8
7 1 2
4 5 9

3 7 2
4 6 5
9 1 8

3 7 2
5 4 6
9 1 8

3 7 2
8 1 9
6 4 5

3 7 4
6 1 5
8 2 9

3 7 4
6 8 5
1 9 2

3 7 6
4 9 1
2 8 5

3 7 6
5 8 2
1 9 4

3 7 6
8 2 5
1 9 4

3 8 1
4 5 6
9 2 7

3 8 1
7 2 9
6 5 4

3 8 4
2 9 1
6 5 7

3 8 6
4 7 1
2 9 5

3 8 6
7 1 4
2 9 5

3 8 7
5 4 1
2 9 6

3 9 1
5 2 7
8 4 6

3 9 1
5 6 7
4 8 2

3 9 2
5 1 6
8 4 7

3 9 4
2 6 1
7 5 8

3 9 4
2 8 1
5 7 6

3 9 6
4 2 1
5 7 8

3 9 6
5 1 2
4 8 7

4 1 6
9 8 7
3 2 5

4 1 7
8 9 5
3 2 6

4 1 7
9 8 6
2 3 5

4 1 8
9 6 5
3 2 7

4 1 8
9 7 5
2 3 6

4 2 6
9 8 7
1 5 3

4 2 7
6 9 3
5 1 8

4 2 7
9 3 6
5 1 8

4 2 8
7 6 3
5 1 9

4 2 9
8 7 3
1 5 6

4 3 5
8 9 7
1 6 2

4 3 5
9 2 8
6 1 7

4 3 5
9 7 8
1 6 2

4 3 7
5 8 2
6 1 9

4 3 7
8 2 5
6 1 9

4 3 7
9 1 6
5 2 8

4 3 9
6 8 1
2 5 7

4 5 2
7 3 9
8 1 6

4 5 2
7 8 9
3 6 1

4 5 3
8 1 9
7 2 6

4 5 3
8 6 9
2 7 1

4 5 6
3 8 1
7 2 9

4 5 6
9 2 7
1 8 3

4 5 9
7 1 2
3 6 8

4 5 9
7 3 2
1 8 6

4 6 2
3 8 5
9 1 7

4 6 5
2 9 1
7 3 8

4 6 5
8 3 7
1 9 2

4 6 8
7 2 3
1 9 5

4 7 1
5 3 8
9 2 6

4 7 1
6 2 9
8 3 5

4 7 3
5 1 6
9 2 8

4 7 3
5 8 6
2 9 1

4 7 5
2 6 1
8 3 9

4 7 8
5 3 1
2 9 6

4 8 1
2 7 5
9 3 6

4 8 1
3 9 6
5 7 2

4 8 1
6 3 9
5 7 2

4 8 2
5 6 7
3 9 1

4 8 3
1 9 2
7 5 6

4 8 6
3 2 1
7 5 9

4 8 7
5 1 2
3 9 6

4 9 1
2 8 5
6 7 3

4 9 1
3 7 6
5 8 2

4 9 1
5 2 8
6 7 3

4 9 2
1 7 3
8 5 6

4 9 2
1 8 3
7 6 5

4 9 3
1 6 2
8 5 7

4 9 3
1 8 2
6 7 5

4 9 5
2 3 1
7 6 8

4 9 5
3 1 2
7 6 8

4 9 6
3 2 1
5 8 7

5 1 6
8 9 7
2 4 3

5 1 6
9 7 8
2 4 3

5 1 8
6 9 3
4 2 7

5 1 8
9 3 6
4 2 7

5 1 9
7 6 3
4 2 8

5 1 9
7 8 3
2 4 6

5 2 3
7 8 9
6 1 4

5 2 8
7 3 4
6 1 9

5 2 8
9 1 6
4 3 7

5 3 2
6 8 9
7 1 4

5 3 4
7 9 8
2 6 1

5 3 4
8 2 9
7 1 6

5 3 4
8 7 9
2 6 1

5 3 6
9 4 8
1 7 2

5 3 8
4 7 1
6 2 9

5 3 8
7 1 4
6 2 9

5 3 8
9 2 6
1 7 4

5 4 3
7 2 9
8 1 6

5 4 6
3 7 2
8 1 9

5 4 6
9 1 8
2 7 3

5 6 4
1 9 2
8 3 7

5 6 4
7 3 8
2 9 1

5 6 7
3 8 1
2 9 4

5 7 2
1 8 4
9 3 6

5 7 2
3 9 6
4 8 1

5 7 2
6 3 9
4 8 1

5 7 4
1 6 2
9 3 8

5 7 6
2 3 1
8 4 9

5 7 6
2 8 1
3 9 4

5 7 6
3 1 2
8 4 9

5 7 8
4 2 1
3 9 6

5 8 2
1 9 4
6 7 3

5 8 2
3 7 6
4 9 1

5 8 7
3 2 1
4 9 6

5 9 1
3 2 7
8 6 4

5 9 1
3 4 7
6 8 2

5 9 2
1 7 4
6 8 3

5 9 2
4 1 7
6 8 3

5 9 4
1 3 2
8 6 7

5 9 4
2 1 3
8 6 7

6 1 4
7 8 9
5 2 3

6 1 5
7 9 8
3 4 2

6 1 5
8 7 9
3 4 2

6 1 7
9 2 8
4 3 5

6 1 7
9 4 8
2 5 3

6 1 8
9 2 7
3 4 5

6 1 8
9 3 7
2 5 4

6 1 9
5 8 2
4 3 7

6 1 9
7 3 4
5 2 8

6 1 9
8 2 5
4 3 7

6 2 3
5 9 8
7 1 4

6 2 4
7 8 9
3 5 1

6 2 7
9 1 8
3 5 4

6 2 8
5 4 3
7 1 9

6 2 9
4 7 1
5 3 8

6 2 9
7 1 4
5 3 8

6 2 9
8 3 5
1 7 4

6 3 2
5 7 9
8 1 4

6 3 5
8 4 9
2 7 1

6 3 7
5 2 4
8 1 9

6 3 7
5 9 4
1 8 2

6 3 9
4 8 1
2 7 5

6 3 9
5 7 2
1 8 4

6 4 2
3 8 7
9 1 5

6 4 5
2 7 3
9 1 8

6 4 5
8 1 9
3 7 2

6 4 8
7 2 5
1 9 3

6 5 1
3 7 8
9 2 4

6 5 1
3 9 8
7 4 2

6 5 4
1 8 3
9 2 7

6 5 4
7 2 9
3 8 1

6 5 7
2 4 1
8 3 9

6 5 7
2 9 1
3 8 4

6 5 8
3 2 1
7 4 9

6 5 8
3 7 1
2 9 4

6 7 1
4 2 9
8 5 3

6 7 3
1 9 4
5 8 2

6 7 3
2 8 5
4 9 1

6 7 3
5 2 8
4 9 1

6 7 5
1 3 2
9 4 8

6 7 5
1 8 2
4 9 3

6 7 5
2 1 3
9 4 8

6 8 1
2 3 7
9 5 4

6 8 2
3 4 7
5 9 1

6 8 3
1 7 4
5 9 2

6 8 3
4 1 7
5 9 2

6 8 4
1 2 3
9 5 7

6 9 2
1 3 5
8 7 4

6 9 2
1 4 5
7 8 3

6 9 3
1 2 4
8 7 5

6 9 3
2 1 5
7 8 4

6 9 4
1 2 3
7 8 5

7 1 4
5 9 8
6 2 3

7 1 4
6 8 9
5 3 2

7 1 6
8 2 9
5 3 4

7 1 6
8 4 9
3 5 2

7 1 8
5 9 4
2 6 3

7 1 9
5 4 3
6 2 8

7 1 9
5 8 3
2 6 4

7 2 3
5 6 9
8 1 4

7 2 4
3 9 6
8 1 5

7 2 4
6 3 9
8 1 5

7 2 6
8 1 9
4 5 3

7 2 9
3 8 1
4 5 6

7 2 9
6 5 4
1 8 3

7 3 4
2 8 5
9 1 6

7 3 4
5 2 8
9 1 6

7 3 4
6 1 9
8 2 5

7 3 6
4 2 5
9 1 8

7 3 6
4 9 5
2 8 1

7 3 8
2 9 1
4 6 5

7 3 8
5 6 4
1 9 2

7 3 8
6 4 5
1 9 2

7 4 2
3 9 8
6 5 1

7 4 8
6 1 5
2 9 3

7 4 9
3 2 1
6 5 8

7 5 1
3 6 9
8 4 2

7 5 2
1 8 6
9 3 4

7 5 2
1 9 6
8 4 3

7 5 6
1 4 2
9 3 8

7 5 6
1 9 2
4 8 3

7 5 8
2 6 1
3 9 4

7 5 9
3 2 1
4 8 6

7 6 1
2 5 8
9 4 3

7 6 1
3 4 9
8 5 2

7 6 2
4 1 9
8 5 3

7 6 5
1 8 3
4 9 2

7 6 8
2 3 1
4 9 5

7 6 8
3 1 2
4 9 5

7 8 3
1 4 5
6 9 2

7 8 4
2 1 5
6 9 3

7 8 5
1 2 3
6 9 4

8 1 4
5 6 9
7 2 3

8 1 4
5 7 9
6 3 2

8 1 5
3 9 6
7 2 4

8 1 5
6 3 9
7 2 4

8 1 6
7 2 9
5 4 3

8 1 6
7 3 9
4 5 2

8 1 7
4 9 5
3 6 2

8 1 9
3 7 2
5 4 6

8 1 9
5 2 4
6 3 7

8 1 9
5 6 4
2 7 3

8 1 9
6 4 5
2 7 3

8 2 4
3 6 7
9 1 5

8 2 5
4 3 7
9 1 6

8 2 5
6 1 9
7 3 4

8 2 6
3 4 5
9 1 7

8 2 9
6 1 5
3 7 4

8 3 5
1 7 4
9 2 6

8 3 5
4 1 7
9 2 6

8 3 5
6 2 9
4 7 1

8 3 7
1 9 2
5 6 4

8 3 7
4 6 5
2 9 1

8 3 7
5 4 6
2 9 1

8 3 9
2 4 1
6 5 7

8 3 9
2 6 1
4 7 5

8 4 2
3 6 9
7 5 1

8 4 3
1 9 6
7 5 2

8 4 6
5 2 7
3 9 1

8 4 7
5 1 6
3 9 2

8 4 9
2 3 1
5 7 6

8 4 9
3 1 2
5 7 6

8 5 2
1 6 7
9 4 3

8 5 2
3 4 9
7 6 1

8 5 3
4 1 9
7 6 2

8 5 3
4 2 9
6 7 1

8 5 6
1 2 3
9 4 7

8 5 6
1 7 3
4 9 2

8 5 7
1 6 2
4 9 3

8 6 2
1 4 7
9 5 3

8 6 3
2 1 7
9 5 4

8 6 4
3 2 7
5 9 1

8 6 7
1 3 2
5 9 4

8 6 7
2 1 3
5 9 4

8 7 4
1 3 5
6 9 2

8 7 5
1 2 4
6 9 3

9 1 5
3 6 7
8 2 4

9 1 5
3 8 7
6 4 2

9 1 6
2 8 5
7 3 4

9 1 6
4 3 7
8 2 5

9 1 6
5 2 8
7 3 4

9 1 7
3 4 5
8 2 6

9 1 7
3 8 5
4 6 2

9 1 8
2 7 3
6 4 5

9 1 8
4 2 5
7 3 6

9 1 8
4 6 5
3 7 2

9 1 8
5 4 6
3 7 2

9 2 4
3 7 8
6 5 1

9 2 6
1 7 4
8 3 5

9 2 6
4 1 7
8 3 5

9 2 6
5 3 8
4 7 1

9 2 7
1 8 3
6 5 4

9 2 7
4 5 6
3 8 1

9 2 8
5 1 6
4 7 3

9 3 4
1 8 6
7 5 2

9 3 6
1 8 4
5 7 2

9 3 6
2 7 5
4 8 1

9 3 8
1 4 2
7 5 6

9 3 8
1 6 2
5 7 4

9 4 3
1 6 7
8 5 2

9 4 3
2 5 8
7 6 1

9 4 7
1 2 3
8 5 6

9 4 8
1 3 2
6 7 5

9 4 8
2 1 3
6 7 5

9 5 3
1 4 7
8 6 2

9 5 4
2 1 7
8 6 3

9 5 4
2 3 7
6 8 1

9 5 7
1 2 3
6 8 4

โปรแกรมของคุณจะต้องสร้างสี่เหลี่ยมที่แข็งแรงเหมือนกัน 376 อันโดยไม่จำเป็นต้องเรียงตามลำดับนี้ ไม่จำเป็นต้องกำหนดเอาท์พุทเช่นคุณสามารถส่งออกในลำดับที่แตกต่างกันในการทำงานที่แตกต่างกันตราบใดที่พวกเขาอยู่ที่นั่นทั้งหมด

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

หัวข้อของสี่เหลี่ยมที่แข็งแรงมีต้นกำเนิดมาจากข้อความแชทของฉันซึ่งนำไปสู่การอภิปรายจำนวนมากเกี่ยวกับคุณสมบัติของพวกเขาและวิธีการสร้างพวกเขา Props เพื่อปีเตอร์เทย์เลอร์ , feersumและSP3000อย่างต่อเนื่องสำหรับการอภิปรายและโดยเฉพาะอย่างยิ่งEl'endia สตาร์แมนสำหรับการจัดทำร่างที่สอดคล้องลำดับ OEIS


ฉันไม่แน่ใจว่าฉันตีความกฎบรรทัดใหม่ต่อท้ายอย่างถูกต้องหรือไม่ ผลลัพธ์ของการแก้ไขก่อนหน้าของฉันจบลงด้วย5 7 3\n\nดังนั้นจึงมีหนึ่งบรรทัดว่างหลังจากสี่เหลี่ยมสุดท้าย ยอมรับได้หรือไม่
Dennis

2
Yayyy ฉันได้รับอุปกรณ์พิเศษ! : P
El'endia Starman

อาจโฮสต์ผลลัพธ์ที่อื่นเพื่อไม่ให้ยาวเกินไปในหน้านี้
Ryan

คำตอบ:


9

Pyth, 38 34 33 32 ไบต์

Vfq2l{sMX2.DR2.:T5b.pS9Vc3NjdH)k

บันทึก 5 ไบต์ในการจัดรูปแบบโดย Jakube

1 ไบต์บันทึกโดยสลับไปยังสตริงย่อยของ Peter Taylor ที่มีความยาวห้าลบวิธีการ middles

ใช้เวลาประมาณหนึ่งนาทีครึ่งในการทำงานบนเครื่องของฉัน

มันทำงานอย่างไรในระดับสูง:

  • สร้างวิธีเรียงสับเปลี่ยนทั้งหมด ( .pS9)

  • ความยาวแบบฟอร์ม 5 สตริงย่อย ( .:T5)

  • ลบองค์ประกอบกลางของแต่ละ ( .DR2)

  • ผนวกขึ้นบรรทัดใหม่ให้กับองค์ประกอบศูนย์แต้มด้วยผลรวมแตกต่างกันจำเป็นต้อง ( X2 ... b)

  • กรองสี่เหลี่ยมที่ผลรวมทั้งหมดเท่ากัน ( fq2l{)

  • รูปแบบและพิมพ์ ( V ... Vc3NjdH)k)


สับNด้านในลูป ( V...Vc3N) แทนก่อนลูป ( VcL3...VN) บันทึกหนึ่งไบต์เพิ่มเติม
Jakube

8

CJam, 40 38 ไบต์

A,1>e!3f/{2{2few:::+z}*:|,1=},Ma*Sf*N*

ขอบคุณ @PeterTaylor สำหรับการตีกอล์ฟ 2 ไบต์!

เสร็จสิ้นทันทีโดยใช้ล่าม Java มันทำงานโดยใช้ล่ามออนไลน์เช่นกัน แต่ต้องใช้ความอดทนเล็กน้อย ลองออนไลน์

ทดสอบการทำงาน

$ cjam sturdy-squares.cjam | head -n 8
1 5 3
9 8 7
4 2 6

1 5 6
8 7 3
4 2 9

$ cjam sturdy-squares.cjam | tail -n 8

9 5 4
2 3 7
6 8 1

9 5 7
1 2 3
6 8 4
$

มันทำงานอย่างไร

A,1>     e# Push [1 ... 9].
e!       e# Push the array of all permutations of that array.
3f/      e# Split each into rows of length 3.
{        e# Filter; push the permutation, then:
  2{     e#   Do the following twice:
    2few e#     Split each row into overlapping splices of length 2.
         e#       [a b c] -> [[a b] [b c]]
    :::+ e#     Reduce each innermost vector to its sum.
         e#       [[a b] [b c]] -> [a+b b+c]
    z    e#     Transpose rows with columns.
  }*     e#   The result is [[s t] [u v]], the sums of all 2x2 squares.
  :|     e#   Perform set union of the pairs of sums.
  ,1=    e#   Check if the length of the result is 1 (unique sum).
},       e# Keep the array if the result was 1.
{        e# For each kept array:
  Sf*    e#   Join the elements of its rows, separating by spaces.
  ~M     e#   Dump the resulting strings and an empty string on the stack.
}%       e# Collect everything in an array.
N*       e# Join the strings, separating by linefeeds.

+1 และฉันมีความสุขกับคำตอบสั้น ๆ !
DavidC

ตอนนี้ฉันสามารถตีคำตอบของฉันได้มากพอที่จะอยู่ข้างหน้าหนึ่งลูก: Ma*Sf*N*ประหยัดสองตัว{Sf*~M}%N*
Peter Taylor

@PeterTaylor มันทำแน่นอน ขอบคุณ!
Dennis

8

Python 3, 169 168 164 ไบต์

เอาโปรแกรมที่ฉันใช้ในการตรวจสอบสี่เหลี่ยมที่แข็งแกร่ง / สี่เหลี่ยมเหล่านี้และกอล์ฟมันลง Golfed off 4 ไบต์ด้วย otakucode

from itertools import*
r=range(1,10)
for p in permutations(r,6):
 x,y=p[0],p[5];q=p[:5]+(x+p[3]-p[2],y,y+p[1]-x,p[2]+y-x)
 if set(q)==set(r):print('%s %s %s\n'*3%q)

คำอธิบาย

ให้สี่เหลี่ยมที่มีความทนทานบางส่วนเช่นนี้

a b c
d e ?
g ? ?

ส่วนที่เหลืออีกสามรายการจะถูกกำหนดโดยไม่ซ้ำกันและมีa+d-c, และa+b-g c+g-aดังนั้นฉันจึงสร้างพีชคณิตทั้งหมดที่ 0..8 มีองค์ประกอบหกอย่างคำนวณส่วนที่เหลือจากนั้นตรวจสอบว่าชุดของชุดนี้เหมือนกับชุด 0..8 หรือไม่ ถ้าเป็นฉันจะพิมพ์กริด


สำหรับการอ้างอิงต่อไปนี้เป็นของดั้งเดิม (ที่มีความคิดเห็นและรหัสภายนอกที่เอาออก):

from itertools import permutations as P

n = 3
m = 3
permutes = P(range(m*n), m+n)

counter = 0
for p in permutes:
    grid = [p[:n]]
    for i in range(m-1):
        grid.append([p[n+i]]+[-1]*(n-1))
    grid[1][1] = p[-1]

    s = p[0]+p[1]+p[n]+p[-1]

    has = list(p)

    fail = 0
    for y in range(1,m):
        for x in range(1,n):
            if x == y == 1: continue

            r = s-(grid[y-1][x-1] + grid[y-1][x] + grid[y][x-1])

            if r not in has and 0 <= r < m*n:
                grid[y][x] = r
                has.append(r)
            else:
                fail = 1
                break

        if fail: break

    if not fail:
        counter += 1

print(counter)

รักเทคนิคนี้
ดอนจ้า

1
วิธีการที่ดีมาก! คุณยังสามารถบันทึกไม่กี่ไบต์แม้ว่า ... ในลูป, x, y = p [0], p [5] แล้ว q = p + (y + p [3] -p [2], y + p [1 ] -x, p [2] + xy)
otakucode

@otakucode: ขอบคุณสำหรับเคล็ดลับ!
El'endia Starman

5

Mathematica 147 166 155 149 ไบต์

สิ่งนี้สร้างการเรียงสับเปลี่ยนของ {1,2,3 ... 9} และเลือกกรณีที่

(ผลรวมของตัวเลขที่ตำแหน่ง {1,2,4,5}) =

(ผลรวมของตัวเลขที่ตำแหน่ง {2,3,5,6}) =

(ผลรวมของตัวเลขที่ตำแหน่ง {4,5,7,8}) =

(ผลรวมของตัวเลขที่ตำแหน่ง {5,6,8,9})

f@s_:=Length@Tally[Tr@Extract[s,#]&/@Table[{{0},{1},{3},{4}}+k,{k,{1,2,4,5}}]]>1;
Row[Grid/@(#~Partition~3&/@Select[Permutations@Range@9,f@#&]),"\n"]

เอาท์พุท (ดูบางส่วน)

เอาท์พุต


Length[%]

376


5

CJam ( 39 37 ไบต์)

A,1>e!{5ew{2Mtz}2*::+)-!},3f/Ma*Sf*N*

การสาธิตออนไลน์ (คำเตือน: อาจใช้เวลานานกว่าหนึ่งนาทีในการเรียกใช้ซึ่งจะทำให้ "ยกเลิกสคริปต์นี้หรือไม่" แจ้งจากเบราว์เซอร์)

ทำงานโดยการกรองกริดที่เป็นไปได้ทั้งหมดที่ใช้5ewในการทำแผนที่

[a b c d e f g h i]

ไปยัง

[[a b c d e]
 [b c d e f]
 [c d e f g]
 [d e f g h]
 [e f g h i]]

แล้วทิ้งองค์ประกอบกลางและองค์ประกอบกลางขององค์ประกอบอื่น ๆ ที่จะได้รับ

[[a b d e]
 [b c e f]
 [d e g h]
 [e f h i]]

ซึ่งเป็นสี่สี่เหลี่ยม


ว้าวนั่นมันยอดเยี่ยม
El'endia Starman

5

Python 3.5, 135 ไบต์

from itertools import*
for x in permutations(range(1,10)):eval((("=="+"+x[%s]"*3)*4)[2:]%(*"013125367578",))and print("%d %d %d\n"*3%x)

ตรวจสอบผลรวมของแต่ละช่องโดยตรงลบตรงกลาง ส่วนใหญ่ยังคงสามารถเล่นกอล์ฟโดยitertoolsกฎ "ไม่จำเป็น" ได้


2

Python2 327 271 270 263 260 ไบต์

z,v,s={},3,range(1,10)
while len(z)<376:
 for i in range(8):v=hash(`v`);s[i],s[v%9]=s[v%9],s[i]
 m=map(lambda i:sum(s[i:i+5])-s[i+2],[0,1,3,4]);T=tuple(s)
 if all(x==m[0] for x in m) and not T in z:
  z[T]=1;print '%i %i %i\n'*3 % tuple(s[0:3]+s[3:6]+s[6:9])

------------

นี่คือ ... ไม่สั้น แต่ก็ไม่มีห้องสมุด การสุ่มอนุญาตให้ใช้สี่เหลี่ยมจัตุรัสตรวจสอบหาเวทย์มนตร์พิมพ์และบันทึกเพื่อป้องกันการซ้ำซ้อน หลังจากที่มันพิมพ์สแควร์เวทเวทมนตร์ที่ไม่เหมือนใครแล้ว 376 อันมันก็จะหยุด

ฉันยืม Pseudo Random Number Generator จากรายการ Keith Randall สำหรับสนามกอล์ฟชื่อ " สร้างตัวสร้างหมายเลขสุ่มที่ผ่านการทดสอบ Diehard "

z,v={},3
def R(x,y):global v;v=hash(`v`);return v
while len(z)<376:
 s=sorted(range(1,10),cmp=R)
 m=[sum(q) for q in map(lambda p:s[p[0]:p[1]+1]+s[p[2]:p[3]+1], [[i,i+1,i+3,i+4] for i in [0,1,3,4]] )]
 if all(x==m[0] for x in m) and not tuple(s) in z.keys():
  z[tuple(s)]=1;print '%i %i %i\n'*3 % tuple(s[0:3]+s[3:6]+s[6:9])

De-แข็งแรงเล่นกอล์ฟ

# each magic square is an array of 9 numbers
#
#for example [1 9 3 7 2 5 6 4 8] 
#
#represents the following square
#
#1 9 3
#7 2 5
#6 4 8
#
# to generate a random square with each number represented only once,
# start with [1 2 3 4 5 6 7 8 9] and sort, but use a random comparison
# function so the sorting process becomes instead a random permutation.
# 
# to check each 2x2 subsquare for sums, look at the indexes into the
# array: [[0,1,3,4] = upper left,[1,2,4,5] = upper right, etc.
#
# to keep track of already-printed magic squares, use a dictionary    
# (associative array) where the 9-element array data is the key. 

from random import *
def magic(s):
 quads=[]
 for a,b,c,d in [[0,1,3,4],[1,2,4,5],[3,4,6,7],[4,5,7,8]]:
  quads+=[s[a:b+1]+s[c:d+1]]
 summ=[sum(q) for q in quads]
 same= all(x==summ[0] for x in summ)
 #print quads
 #print 'sum',summ
 #print 'same',same
 return same

magicsquares={}
while len(magicsquares.keys())<376:
        sq = sorted(range(1,10),key=lambda x:random())
        if magic(sq) and not magicsquares.has_key(tuple(sq)):
                magicsquares[tuple(sq)]=1
                print sq[0:3],'\n',sq[3:6],'\n',sq[6:9],'\n'

ไม่มีอะไรที่สุ่มต้องเกิดขึ้น มีวิธีแก้ปัญหาตารางที่แตกต่างกัน 376 รายการและคุณต้องการส่งออกแต่ละรายการทันที
งานอดิเรกของ Calvin

ฉันพิมพ์โซลูชั่นสแควร์ที่แตกต่างกัน 376 รายการและส่งออกแต่ละครั้ง การสุ่มไม่ได้ถูกแบนในคำอธิบายและไม่ถูกห้ามใน 'ช่องโหว่มาตรฐาน' meta.codegolf.stackexchange.com/questions/1061/…
ดอนสดใส

เอาล่ะยุติธรรมพอ
งานอดิเรกของ Calvin

คุณสามารถใช้ตัวสร้างตัวเลขสุ่มที่แย่กว่านั้นได้ตราบเท่าที่มันให้สี่เหลี่ยมทั้งหมดที่คุณต้องการ
lirtosiast

1

ทับทิม 133

a=[]
[*1..9].permutation{|x|[0,1,3,4].map{|i|x[i]+x[i+1]+x[i+3]+x[i+4]}.uniq.size<2&&a<<x.each_slice(3).map{|s|s*' '}*'
'}
$><<a*'

'

วิธีการกำลังดุร้ายตรงไปตรงมา ทดสอบที่นี่


0

J, 83 ไบต์

([:;@,(<LF),.~[:(<@(LF,~":)"1@#~([:*/2=/\[:,2 2+/@,;._3])"2)(3 3)($"1)1+!A.&i.])@9:

นี่คือฟังก์ชั่นที่ส่งออกสตริงที่มีสี่เหลี่ยมความแข็งแรง 376 ใช้แรงเดรัจฉานสร้างการเรียงสับเปลี่ยนทั้งหมด 1 ถึง 9 สร้างรูปร่างแต่ละแถวเป็น 3x3 และกรองโดยตรวจสอบว่าผลรวมของแต่ละ 2x2 subarray เท่ากันหรือไม่ เสร็จในครึ่งวินาที

การใช้

   f =: ([:;@,(<LF),.~[:(<@(LF,~":)"1@#~([:*/2=/\[:,2 2+/@,;._3])"2)(3 3)($"1)1+!A.&i.])@9:
   $ f ''  NB. A function has to take something to be invoked,
           NB. but in this case it is not used by the function
   37 {. f ''  NB. Take the first 37 characters
1 5 3
9 8 7
4 2 6

1 5 6
8 7 3
4 2 9

   _38 {. f ''  NB. Take the last 38 characters
9 5 4
2 3 7
6 8 1

9 5 7
1 2 3
6 8 4


   NB. The output string ends with two newlines
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.