جواب سوال 28 پروژه اویلر: Number spiral diagonals

پروژه اویلر

رسیدیم به سوال 28 سایت ProjectEuler.net چالش جذابی هست و راه حل بسیار جالبی برای آن ارائه کردم.

از ما خواسته شده مربع 5 در 5 را در نظر بگیریم که عدد وسط آن یک و به صورت حرکت پیچشی اعداد آن اضافه می گردد و مربعی به این شکل پدیدار می گردد:

همانطور که مشاهده می گردد، جمع اعداد روی قطرها 101 می شود. از ما خواسته شده جمع اعداد روی قطرهای مربع پیچشی 1001 در 1001 را پیدا کنیم.

در ابتدا شاید سوال کمی پیچیده به نظر برسد اما اگر مربع را تا چند بعد بالاتر بکشید به نتایج خیلی خوبی خواهید رسید. من این کار را تا مربع 9 در 9 انجام دادم:

با کمی دقت می توان متوجه شد که ابعاد مربع ها بصورت فرد بالا می رود، یعنی مربع یک در یک سپس 3، 5، 7، 9 و… از طرفی بزرگترین عدد در هر مربع از نتیجه ابعاد آن به توان 2 حاصل می گردد، برای مثال بزرگترین عدد مربع 9 در 9 همانطور که در تصویر مشاهده می شود 81 است. همینطور دیگر اعداد رئوس این مربع از کم کردن بزرگترین عدد از اندازه مربع منهای یک حاصا میشود، یعنی با کسر 8 از 81 به 73 و مجددا کم کردن 8 از 73 به 65 و بالاخره به 57 می رسیم.

روشی که من برای حل مسئله استفاده کردم استفاده از اطلاعات بالا و جمع رئوس هرمربع و ذخیره آن در یک لیست بود. به این صورت که لیستی با عدد یک ساخته و با استفاده از یک حلقه از 3 تا 1001 با گام دو، جمع رئوس هر مربع را محاسبه و به لیست اضافه کردم و در نهایت جمع این لیست را در خروجی چاپ کردم. کدها با استفاده از زبان برنامه نویسی محبوب پایتون می باشد:

# https://taghanaki.com
n = 1001
totalSum = [1]
for i in range(3, n+1, 2):
    myPow = i**2
    mySum = myPow + (myPow-(i-1)) + (myPow-2*(i-1)) + (myPow-3*(i-1))
    totalSum.append(mySum)

print(sum(totalSum))

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.