MATL , 17 13 बाइट्स
:tt!/XR6#uG))
इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें ।
इनपुट आकार फ्लोटिंग पॉइंट सटीकता द्वारा सीमित किया जा सकता है। सभी परीक्षण मामले सही परिणाम देते हैं।
व्याख्या
यह सभी भिन्न उत्पन्न करता है k/m
के साथ k
, m
में [1 2 ...n]
, एक के रूप में n
× n
मैट्रिक्स। पंक्ति अंश को इंगित करती है और स्तंभ भाजक को इंगित करता है। वास्तव में मैट्रिक्स प्रविष्टि में m/k
इसके बजाय उलटा अंश होता है k/m
, लेकिन यह अप्रासंगिक है और बाकी स्पष्टीकरण में इसे अनदेखा किया जा सकता है।
मैट्रिक्स प्रविष्टियों को स्पष्ट रूप से स्तंभ-प्रमुख क्रम में क्रमबद्ध माना जाता है। इस मामले में यह आवश्यक आदेश से मेल खाती है: भाजक, फिर अंश।
इस मैट्रिक्स से तीन प्रकार की प्रविष्टियों की अवहेलना करने की आवश्यकता है:
- प्रविष्टियाँ
k/m
, k>m
जिनका पिछली प्रविष्टि के समान मूल्य है (उदाहरण के लिए, 2/4
अवहेलना की जाती है क्योंकि यह उसी तरह है 1/2
)
- प्रविष्टियां
k/k
, k>1
। प्रविष्टियाँ जिसमें एक भाजक होता है जो हर से अधिक होता है
- प्रविष्टियाँ
k/m
, k<m
(ये समस्या का हिस्सा नहीं हैं)।
प्रविष्टियों को अस्वीकृत करना एक unique
फ़ंक्शन के साथ किया जाता है , जो डुप्लिकेट मानों को हटा देता है और बचे हुए प्रविष्टियों के सूचकांकों को आउटपुट करता है। इसके साथ, ऊपर दिए गए टाइप 1 की प्रविष्टियाँ स्वतः ही हटा दी जाती हैं। प्रकार 2 और 3 से निपटने के लिए, विकर्ण और नीचे मैट्रिक्स प्रविष्टियां निर्धारित की जाती हैं 0
। इस तरह, पहले (वैध अंश के अनुरूप) को छोड़कर सभी शून्य प्रविष्टियाँ हटा दी जाएंगी 1/1
।
4
उदाहरण के रूप में इनपुट पर विचार करें ।
: % Input n implicitly. Push range [1 2 ...n]
% STACK: [1 2 3 4]
t % Duplicate
% STACK: [1 2 3 4], [1 2 3 4]
t! % Duplicate and transpose
% STACK: [1 2 3 4], [1 2 3 4], [1; 2; 3; 4]
/ % Divide element-wise with broadcast: gives matrix with all pairs
% STACK: [1 2 3 4], [1 2 3 4;
0.5000 1 1.5000 2;
0.3333 0.6667 1 1.3333;
0.2500 0.5000 0.7500 1 ]
XR % Upper triangular part above the diagonal. This sets to 0 all entries
% corresponding to fractions that equal or exceed 1. (Since the matrix
% actually contains the inverse fractions, nonzero entries will contain
% values greater than 1)
% STACK: [1 2 3 4], [0 2 3 4;
0 0 1.5000 2;
0 0 0 1.3333;
0 0 0 0 ]
6#u % Indices of first appearance of unique elements
% STACK: [1 2 3 4], [1; 5; 9; 10; 13; 15]
G % Push input n again
% STACK: [1 2 3 4], [1; 5; 9; 10; 13; 15], 4
) % Index: get the n-th entry from the array of indices of unique elements
% STACK: [1 2 3 4], 10
) % Index (modular): get the corresponding real part. Display implicitly
% STACK: 2