दिल्लोग एपीएल, 27 अक्षर
⊃⌽∨.∧⍨⍣≡1≥+/¨|∘.-⍨,(~×⍳∘⍴)⎕
⎕
मूल्यांकन किया गया इनपुट। APL एक मैट्रिक्स और वैक्टर के एक वेक्टर के बीच अंतर करता है। यह प्रोग्राम मानता है कि इनपुट एक मैट्रिक्स है।
(~×⍳∘⍴)A
के बराबर कांटा है (~A) × ⍳⍴A
। ⎕
दो बार उल्लेख करने या एक चर को प्रस्तुत करने से बचने की आवश्यकता है ।
⍴A
का आकार है A
। 4-बाय -7 मैट्रिक्स के लिए आकार है 4 7
।
⍳
सूचकांक जनरेटर है। ⍳4
है 1 2 3 4
। ⍳4 7
वैक्टर (1 1)(1 2)...(4 7)
4-बाय -7 मैट्रिक्स में व्यवस्थित है।
~A
के टुकड़े झपटते हैं A
।
×
⍳⍴A
फ़्लिप बिट्स द्वारा गुणा करके, हम सभी मुक्त कोशिकाओं के निर्देशांक को संरक्षित करते हैं और सभी दीवारों को चालू करते हैं 0 0
।
,
समन्वय जोड़े के मैट्रिक्स को उठाता है, अर्थात इसे एक वेक्टर में रैखिक करता है। इस मामले में वेक्टर में जोड़े शामिल होंगे।
∘.-⍨A
या जोड़ो के A∘.-A
तत्वों को घटाता है A
। ध्यान दें कि यहां तत्व A
स्वयं जोड़े हैं।
|
निरपेक्ष मूल्य
+/¨
प्रत्येक जोड़ी को पूर्ण मूल्यों के योग। यह हमें भूलभुलैया में हर जोड़ी कोशिकाओं के बीच ग्रिड की दूरी देता है, दीवारों के लिए बचाते हैं।
1≥
हम केवल 1 से अधिक की दूरी पर पड़ोसियों में घुसपैठ कर रहे हैं, यह दीवारों को भी बाहर निकालता है। अब हमारे पास एक ग्राफ है आसन्न मैट्रिक्स।
∨.∧⍨⍣≡
फ्लोयड - वॉरहॉल का सकर्मक क्लोजर एल्गोरिथम
(f⍣n)A
(यहां इस्तेमाल नहीं किया गया) जहां n
एक पूर्णांक है, बिजली ऑपरेटर है। यह लागू होता है f
करने के लिए A
n
बार: f f ... f A
।
(f⍣g)A
जहां g
एक फ़ंक्शन है, निश्चित बिंदु ऑपरेटर है, उर्फ "पावर लिमिट"। यह श्रृंखला कंप्यूटिंग रहती है A
, f A
, f f A
, ... जब तक ((f⍣i)A) g ((f⍣(i+1))A)
कुछ के लिए सच रिटर्न i
। इस मामले में हम मिलान ( ≡
) का उपयोग करते हैं g
।
∨.∧⍨A
या A∨.∧A
फ़्लॉइड के एल्गोरिथ्म में एक कदम है। f.g
आव्यूह गुणन (का सामान्यीकरण है +.×
), यहाँ हम संयोजन (का उपयोग ∧
) और अलगाव ( ∨
के स्थान पर) +
और ×
।
⊃⌽
⍣≡
चरण को पर्याप्त बार लागू करने और स्थिर स्थिति तक पहुंचने के बाद , हमें परिणाम प्राप्त करने के लिए मैट्रिक्स के शीर्ष-दाएं कोने को देखना चाहिए, इसलिए हम इसे फ्लिप करते हैं ( ⌽
) और पहले, शीर्ष-बाएं आइटम ( ⊃
) लें।
विज़ुअलाइज़ेशन के ⍣≡
कदम