দ্বারা অনুপ্রাণিত এই ।
সত্যিকারের রাস্টার গ্রাফিক্সে প্রবেশ করা সোফমোর আগাথা স্টিফেনডেল লিনিয়ার বীজগণিত বিষয়ে কোর্স করেছেন। এখন সে ম্যাট্রিককে আয়তক্ষেত্র হিসাবে কল্পনা করে, তবে তার শৈল্পিক মনে, তিনি সেই আয়তক্ষেত্রগুলির সাথে তির্যক রেখা যুক্ত করে এবং সেগুলির সাথে চিহ্নগুলি গণনা করার চেষ্টা করেন। প্রকৃতপক্ষে, তিনি কেবলমাত্র বর্গাকার নয়, সমস্ত ম্যাট্রিকের ট্রেসগুলি গণনা করতে চান।
যেহেতু আগাথা একজন শিল্পী, তিনি কীভাবে তার পছন্দসই চিত্র সম্পাদককে লাইন আঁকতে জানেন এবং পরবর্তীকর্মী লাইনগুলি বানাতে ব্রেসেনহ্যামের অ্যালগরিদম ব্যবহার করে। এমনকি তিনি উইকিপিডিয়া পরীক্ষা করেছেন এবং সিউডোকোডটি পেয়েছিলেন:
function line(x0, y0, x1, y1)
real deltax := x1 - x0
real deltay := y1 - y0
real deltaerr := abs(deltay / deltax) // Assume deltax != 0 (line is not vertical),
// note that this division needs to be done in a way that preserves the fractional part
real error := 0.0 // No error at start
int y := y0
for x from x0 to x1
plot(x,y)
error := error + deltaerr
while error ≥ 0.5 then
y := y + sign(deltay) * 1
error := error - 1.0
(দ্রষ্টব্য যে এই সিউডোকোডটি কেবল 1 এরও কম opালের জন্য কাজ করে; লম্বা গ্রিডগুলির জন্য, একই ধরণের চিকিত্সা করা উচিত, তবে একটি লুপ দিয়ে with দুটি ক্ষেত্রে এই বিভাগটিy
দেখুন ))
আগাথা একটি ম্যাট্রিক্সকে একটি আয়তক্ষেত্র হিসাবে কল্পনা করে, এতে একটি তির্যক রেখা আঁকেন এবং ব্রেনহ্যামের অ্যালগরিদম নির্ধারণ করে যে কোনও ম্যাট্রিকের উপাদানগুলি তির্যকগুলির সাথে সম্পর্কিত। তারপরে তিনি তাদের যোগফল গ্রহণ করেন এবং এটিই হ'ল তিনি যতটা সম্ভব কম বাইটে প্রয়োগ করতে চান কারণ তিনি একজন দরিদ্র শিক্ষার্থী এবং তার কোডটি সঞ্চয় করার জন্য বৃহত-দক্ষতার এইচডিডি বহন করতে পারেন না।
কার্য
একটি ম্যাট্রিক্স এ দেওয়া , রাস্টারাইসড মূল তির্যক (উপরে বাম থেকে নীচে ডানদিকে) থাকা উপাদানগুলির যোগফলটি ফিরে আসুন, যেখানে পরবর্তীটি ব্রেসেনহ্যামের লাইন অ্যালগরিদম দ্বারা নির্ধারিত হয়। এটি হ'ল ধরে নেওয়া যে ম্যাট্রিক্স একটি এম gr n গ্রিড উপস্থাপন করে, সেই গ্রিডে ব্রেসেনহ্যামের অ্যালগোরিদম ব্যবহার করে এ [1, 1] থেকে এ [এম, এন] পর্যন্ত একটি রেখা আঁকুন এবং লাইনের সমস্ত উপাদানগুলির যোগফল নিন take নোট করুন যে 1 × N এবং N × 1 ম্যাট্রিক্সের জন্য পুরো ম্যাট্রিক্স তার নিজস্ব তির্যক হয়ে যায় (কারণ এটি প্রথম সারির প্রথম উপাদান থেকে শেষ সারির শেষ উপাদান পর্যন্ত একটি লাইন আঁকবে)।
ইনপুট: একটি আসল ম্যাট্রিক্স ( 1 × 1 ম্যাট্রিক্স, একটি সারি ম্যাট্রিক্স, একটি কলাম ম্যাট্রিক্স বা আয়তক্ষেত্রাকার ম্যাট্রিক্স হতে পারে)। আউটপুট: একটি সংখ্যা।
মনে রাখবেন যে কিছু উত্স (উদা। উইকিপিডিয়া এর সিউডোকোড) উপরে শর্ত পরীক্ষা করে error≥0.5
, অন্য উত্সগুলি ব্যবহার করে error>0.5
। আপনার মূলত পোস্ট করা একটি ( error≥0.5
) ব্যবহার করা উচিত , তবে বিকল্পটি যদি আপনার কোডটিতে error>0.5
সংক্ষিপ্ত হয়, তবে আপনাকে এটি প্রয়োগ করার অনুমতি দেওয়া হবে (যেহেতু এটি কোড গল্ফ), তবে এটি স্পষ্টভাবে উল্লেখ করুন । পরীক্ষার কেস দেখুন 4।
চ্যালেঞ্জ বিধি
- I / O ফর্ম্যাটগুলি নমনীয়। একটি ম্যাট্রিক্স স্পেস-সীমাবদ্ধ সংখ্যাগুলির অনেকগুলি রেখা নিউলাইনগুলি, বা সারি ভেক্টরগুলির একটি অ্যারে, বা কলামের ভেক্টরগুলির একটি অ্যারে ইত্যাদি দ্বারা পৃথক হতে পারে can
- এটি কোড-গল্ফ , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
- স্ট্যান্ডার্ড নিয়মগুলি আপনার উত্তরের জন্য প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং রিটার্ন-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে।
- ডিফল্ট লুফোলগুলি নিষিদ্ধ।
পরীক্ষার মামলা
[[1,2,3],[4,5,6],[7,8,9]]
→1+5+9
→ আউটপুট:15
।
[[1,2,3,4],[5,6,7,8]]
→1+2+7+8
→ আউটপুট:18
।
[[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24]]
→1+8+9+16+17+24
→ আউটপুট:75
।
[[1,2,3,4,5],[6,7,8,9,10]]
→1+2+8+9+10
(ব্যবহার≥
ত্রুটি শর্ত) আউটপুট →:30
।
তবে, যদি >
আপনার কোডটিতে কঠোর বৈষম্য ব্যবহার করা আরও কম হয় তবে অনুমোদিত আউটপুটটি 1+2+3+9+10=25
তবে আপনার আলাদাভাবে এটি উল্লেখ করা উচিত।
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
→1+5+8+12
→ আউটপুট:26
।
[[-0.3,0.5]]
→ আউটপুট:0.2
।[[3.1],[2.9]]
→ আউটপুট:6
।[[-5]]
→ আউটপুট:-5
।
ব্রেসেনহ্যামের অ্যালগরিদম সম্পর্কে আরও তথ্য
- http://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm - বিভিন্ন ভাষার জন্য অ্যালগরিদমের সংকলন;
- https://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html - opালের জন্য বিভিন্ন মামলার বৈশিষ্ট্যযুক্ত একটি দুর্দান্ত ব্যাখ্যা;
- https://en.wikedia.org/wiki/Bresenham%27s_line_algorithm ;
[[1,2],[3,4],[5,6],[7,8],[9,10]]
28
( ≥
প্রত্যাশিত বাস্তবায়ন সহ) বা 27 ( >
,
[[1,2,3,4,5],[6,7,8,9,10]]
।