یک تابع بنویسید که یک لیست دوبعدی دریافت کند و بررسی کند آیا این لیست یک مربع جادویی است یا خیر. اگر مربع جادویی باشد، مقدار True
و در غیر این صورت مقدار False
را برگرداند.
تعریف مربع جادویی:
مربع جادویی، ترتیبی از اعداد در یک مربع است که در آن مجموع هر سطر، ستون و قطر برابر با یک مقدار ثابت (ثابت جادویی) است.
مثال
is_magic([[2, 7, 6], [9, 5, 1], [4, 3, 8]]) ➞ True
# سطرها: 2+7+6 = 9+5+1 = 4+3+8 = 15
# ستونها: 2+9+4 = 7+5+3 = 6+1+8 = 15
# قطرها: 2+5+8 = 6+5+4 = 15
is_magic([[1, 2], [3, 4]]) ➞ False
# سطرها: 1+2 = 3 != 3+4 = 7
# ستونها: 1+3 = 4 != 2+4 = 6
# قطرها: 1+4 = 2+3 = 5
نمونه ورودی و خروجی
IsMagic([[1, 2], [3, 4]]) ➞ False
IsMagic([]) ➞ True
IsMagic([[4,3,8],[9,5,1],[2,7,6]]) ➞ True
نکات:
- برای این چالش، فقط با مربعهای جادویی حاوی اعداد صحیح بین 1 تا n^2 آزمایش خواهد شد، که n طول یک ضلع مربع است. (نمونه چهار و پنج)
- ثابت جادویی باید برای همهی سطرها، ستونها و قطرها یکسان باشد.
- مربع ورودی همیشه مربعی است (تعداد سطرها برابر با تعداد ستونها).
Assert.False(Backendbaz.IsMagic(new int[][] { new int[] { 1, 2 }, new int[] { 3, 4 } })); Assert.True(Backendbaz.IsMagic(new int[][] { })); Assert.True(Backendbaz.IsMagic(new int[][] { new int[] { 4, 3, 8 }, new int[] { 9, 5, 1 }, new int[] { 2, 7, 6 } })); Assert.False(Backendbaz.IsMagic(new int[][] { new int[] { 2 } })); Assert.False(Backendbaz.IsMagic(new int[][] { new int[] { 5, 15, 16, 2 }, new int[] { 10, 8, 7, 13 }, new int[] { 6, 12, 11, 9 }, new int[] { 17, 3, 4, 14 } })); Assert.True(Backendbaz.IsMagic(new int[][] { new int[] { 1, 15, 14, 4 }, new int[] { 10, 11, 8, 5 }, new int[] { 7, 6, 9, 12 }, new int[] { 16, 2, 3, 13 } })); Assert.False(Backendbaz.IsMagic(new int[][] { new int[] { 9, 5, 1 }, new int[] { 4, 3, 8 }, new int[] { 2, 7, 6 } })); Assert.True(Backendbaz.IsMagic(new int[][] { new int[] { 25, 13, 1, 19, 7 }, new int[] { 16, 9, 22, 15, 3 }, new int[] { 12, 5, 18, 6, 24 }, new int[] { 8, 21, 14, 2, 20 }, new int[] { 4, 17, 10, 23, 11 } }));
ببخشید این ماتریس چرا False هست؟ مجیک نامبرش 38 هست ...تست کردم باید درست باشه
is_magic([[5,15,16,2],[10,8,7,13],[6,12,11,9],[17,3,4,14]]), False)
توی بخش نکات، اولین نکته رو ببینید. طبق نکته اول این تست False میشه