इसलिए मैंने यह एक अजीब तरीका किया। मैंने देखा कि सरणी के रूप में दो पैटर्न थे।
पहला यह है कि शीर्ष पंक्तियों के पैटर्न में प्रत्येक शब्द के बीच अंतर 1 से बढ़ रहा है -> h जहां h ऊँचाई है और l लंबाई है। तो मैं उस पैटर्न के आधार पर शीर्ष पंक्ति का निर्माण करता हूं
मैट्रिक्स ऑफ मंद (3,4) देने के लिए max RoC = 3हम फॉर्म की शीर्ष पंक्ति देखेंगे
1, (1+1), (2+2), (4+3) = 1, 2, 4, 7
इसके बजाय मान लें कि मंद (3,9) max RoC = 3हम देने के बजाय एक शीर्ष पंक्ति देखेंगे
`1, (1+1), (2+2), (4+3), (7+3), (10+3), (13+3), (16+3), (19+3) = 1, 2, 4, 7, 10, 13, 16, 19, 22
दूसरा पैटर्न यह है कि पंक्तियाँ एक दूसरे से कैसे बदलती हैं। यदि हम मैट्रिक्स पर विचार करते हैं:
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
और नीचे की पंक्ति से प्रत्येक पंक्ति को घटाएं (अतिरिक्त पंक्ति को अनदेखा करते हुए) जो हमें मिलती है
2 3 4 5 5
3 4 5 5 4
4 5 5 4 3
5 5 4 3 2
इस मैट्रिक्स को देखने पर हम देख सकते हैं कि यह मैट्रिक्स वह क्रम है 2 3 4 5 5 4 3 2जहाँ प्रत्येक पंक्ति में प्रत्येक पंक्ति के लिए 1 द्वारा स्थानांतरित किए गए इस पैटर्न की 5 शर्तें हैं। दृश्य के लिए नीचे देखें।
|2 3 4 5 5| 4 3 2
2 |3 4 5 5 4| 3 2
2 3 |4 5 5 4 3| 2
2 3 4 |5 5 4 3 2|
इसलिए अंतिम मैट्रिक्स पाने के लिए हम अपनी पहली पंक्ति बनाते हैं और उस पंक्ति को इस पैटर्न के 5 आवश्यक शब्दों के साथ जोड़ते हैं।
इस पैटर्न में हमेशा शुरुआत 2-> max valueऔर अंत की विशेषताएं होंगी max value -> 2जहां max value = min(h+1, l)अधिकतम मूल्य दिखाई देगा और appearances of max = h + l -2*c -2जहां कितनी बार होगीc = min(h+1, l) - 2
तो नई पंक्तियों को बनाने की मेरी पूरी विधि में ऐसा लगता है
1 2 3 7 11 + |2 3 4 5 5|4 3 2 = 3 5 8 12 16
3 5 8 12 16 + 2|3 4 5 5 4|3 4 2 = 6 9 13 17 20
6 9 13 17 20 + 2 3|4 5 5 4 3|4 2 = 10 14 18 21 23
10 14 18 21 23 + 2 3 4|5 5 4 3 2| = 15 19 22 24 25
नीचे दिया गया प्रासंगिक कोड। यह छोटा नहीं था, लेकिन मुझे अभी भी यह तरीका पसंद है।
o,r=len,range
def m(l,h):
a,t=[1+sum(([0]+[x for x in r(1,h)]+[h]*(l-h))[:x+1]) for x in r(l)],min(l,h+1);s,c=[x for x in r(2,t)],[a[:]]
for i in r(h-1):
for j in r(o(a)):
a[j]+=(s+[t]*(l+h-2*(t-2)-2)+s[::-1])[0+i:l+i][j]
c+=[a[:]]
for l in c:print(l)
इसे ऑनलाइन आज़माएं!