से प्रेरित होकर इस ।
अगाथा स्टीफेंडेल, एक सोमरोमोर जो वास्तव में रेखापुंज ग्राफिक्स में है, ने रैखिक बीजगणित में एक पाठ्यक्रम लिया है। अब वह आयतों के रूप में मेट्रिक्स की कल्पना करती है, लेकिन अपने कलात्मक दिमाग में, वे उन आयतों को विकर्ण रेखाएं जोड़ देती हैं और उनके साथ निशान की गणना करने की कोशिश करती हैं। वास्तव में, वह सभी मैट्रिस के निशान की गणना करना चाहती है, न कि केवल वर्ग के।
चूंकि अगाथा एक कलाकार है, वह जानती है कि उसे अपने पसंदीदा छवि संपादक में रेखाएँ कैसे खींचनी हैं, और बाद में लाइनों को प्लॉट करने के लिए ब्रेसेनहैम के एल्गोरिथ्म का उपयोग किया जाता है । उसने विकिपीडिया की जाँच की और छद्म कोड पाया:
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 से कम ढलानों के लिए काम करता है; लंबे ग्रिड के लिए, एक समान उपचार किया जाना चाहिए, लेकिन एक लूप ओवर के साथ y
। दो मामलों के लिए यह अनुभाग देखें ।)
अगाथा एक मैट्रिक्स को एक आयत के रूप में कल्पना करती है, इसमें एक विकर्ण रेखा खींचती है और ब्रेसेनहैम का एल्गोरिथ्म निर्धारित करता है कि मैट्रिक्स के कौन से तत्व विकर्ण के हैं। तब वह अपनी राशि लेती है, और यह वह है जो वह संभव के रूप में कुछ बाइट्स में लागू करना चाहती है क्योंकि वह एक गरीब छात्र है और अपने कोड को स्टोर करने के लिए बड़ी क्षमता HDDs बर्दाश्त नहीं कर सकती है।
कार्य
एक मैट्रिक्स ए को देखते हुए , उन तत्वों का योग लौटाएं जो रेखागणित मुख्य विकर्ण (ऊपर से बाएं से नीचे दाएं) पर स्थित हैं, जहां बाद को ब्रेसेनहम के लाइन एल्गोरिदम द्वारा निर्धारित किया जाता है। यही है, यह मानते हुए कि मैट्रिक्स एक m × n ग्रिड का प्रतिनिधित्व करता है , उस ग्रिड पर A [1, 1] से A [m, n] तक ब्रेशेनहैम के एल्गोरिथ्म का उपयोग करते हुए, और लाइन पर सभी तत्वों का योग लेते हैं। ध्यान दें कि 1 × N और N × 1 मैट्रिसेस के लिए, पूरा मैट्रिक्स अपना स्वयं का विकर्ण बन जाता है (क्योंकि यह पहली पंक्ति के पहले तत्व से अंतिम पंक्ति के अंतिम तत्व तक एक रेखा खींचता है)।
इनपुट: एक वास्तविक मैट्रिक्स ( 1 × 1 मैट्रिक्स, एक पंक्ति मैट्रिक्स, एक स्तंभ मैट्रिक्स, या एक आयताकार मैट्रिक्स) हो सकता है। आउटपुट: एक संख्या।
ध्यान दें कि कुछ स्रोत (ई। जी। ऊपर विकिपीडिया का छद्मकोश) स्थिति जाँच का उपयोग करते हैं error≥0.5
, जबकि अन्य स्रोत उपयोग करते हैं error>0.5
। आपको मूल रूप से पोस्ट किए गए एक ( error≥0.5
) का उपयोग करना चाहिए , लेकिन यदि विकल्प error>0.5
आपके कोड में छोटा है, तो आपको इसे लागू करने की अनुमति है (क्योंकि यह कोड गोल्फ है), लेकिन स्पष्ट रूप से इसका उल्लेख करें । देखें टेस्ट केस 4
चुनौती के नियम
- I / O प्रारूप लचीले हैं। एक मैट्रिक्स अंतरिक्ष-सीमांकित संख्याओं की कई पंक्तियाँ हो सकती हैं, जिन्हें अलग-अलग संख्याओं से अलग किया जाता है, या पंक्ति वैक्टर की एक पंक्ति, या स्तंभ वैक्टर की एक सरणी आदि।
- यह कोड-गोल्फ है , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
- मानक नियम आपके उत्तर के लिए लागू होते हैं , इसलिए आपको उचित पैरामीटर और रिटर्न-टाइप, पूर्ण कार्यक्रमों के साथ 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 - ढलानों के लिए विभिन्न मामलों की विशेषता वाली एक अच्छी व्याख्या;
- https://en.wikipedia.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]]
।