২ functions টি কার্যের পরিবহণ


22

ভূমিকা

আসুন একটি ত্রৈমাসিক ফাংশনটি নিজের হিসাবে সেট থ্রি-এলিমেন্ট থেকে একটি ফাংশন হিসাবে সংজ্ঞায়িত করা যাক S = {0,1,2}: এটি এর Sঅন্য উপাদানটির প্রতিটি উপাদানকে যুক্ত করে S। একটি তিন ফাংশন এর একটা উদাহরণ fহল

f(0) = 0; f(1) = 2; f(2) = 0

এখানে ঠিক ২ different টি পৃথক তিনটি ফাংশন রয়েছে এবং আমরা 0 থেকে 26 পর্যন্ত পূর্ণসংখ্যার সাথে তাদের উপস্থাপন করি: একটি ফাংশন fহিসাবে এনকোড করা আছে f(0) + 3*f(1) + 9*f(2)। উপরের উদাহরণ ফাংশনটি 6 নম্বর হিসাবে এনকোড করা হয়েছে।

আমরা দুই তিন কার্যক্রম প্রয়োগ করতে পারেন fএবং gক্রমানুসারে, এবং যদি f(g(k)) == g(f(k))সবার জন্য ঝুলিতে kমধ্যে S, তারপর ফাংশন বিনিময় । আপনার কাজটি এটি কেস কিনা তা যাচাই করা।

ইনপুট

তোমার ইনপুট 0 থেকে 26. করার সমেত সীমার মধ্যে দুটি পূর্ণসংখ্যার তাঁদের দুটি তিন ফাংশন প্রতিনিধিত্ব হয় fএবং g। ইনপুট অবশ্যই দশমিক, বাইনারি বা অ্যানারি ( 1গুলি এর স্ট্রিং ) ফর্ম্যাটে নিতে হবে।

আউটপুট

আপনার আউটপুট হ'ল এবং যাত্রা করলে সত্যবাদী মানf এবং gযদি তা না দেয় তবে একটি মিথ্যা মান। আপনি ধরে নিতে পারেন না যে ইনপুটগুলি অর্ডার করা হয়েছে।

উদাহরণ

5 এবং 16 এর ইনপুটগুলি বিবেচনা করুন They তারা তিনটি কার্য সম্পাদন করে

f(0) = 2; f(1) = 1; f(2) = 0
g(0) = 1; g(1) = 2; g(2) = 1

আমরা আশা করি আপনি f(g(1)) == f(2) == 0এবং g(f(1)) == g(1) == 2, তাই fএবং gবিনিময় না এবং সঠিক আউটপুট falsey হয়।

অন্যদিকে, ইনপুট 3 এবং 10 টি টার্নারি ফাংশনগুলি এনকোড করে

f(0) = 0; f(1) = 1; f(2) = 0
g(0) = 1; g(1) = 0; g(2) = 1

এবং এটি যাচাই করা যেতে পারে যে f(g(k)) == g(f(k))সব জন্য ঝুলিতে kমধ্যে S। তারপরে সঠিক ফলাফলটি সত্য।

এখানে +একটি সত্য সত্য আউটপুট এবং -একটি মিথ্যা আউটপুট চিহ্নিত করে সমস্ত সম্ভাব্য ইনপুটগুলির 27 × 27 টেবিলটি রয়েছে :

+ - - + - - + - - + - - + - - + - - + - - + - - + - -
- + - - - - - - - - - - + - - - - - - - - + - - - - -
- - + - - - - - - - - - - - - - - - - - - + - - + - -
+ - - + - - - - - - + - - + - - - - + - - + - - - - -
- - - - + - - - - - - - - + - - - - - - - + - - - - -
- - - - - + - - - - - - - + - - - - - - - + - - - - -
+ - - - - - + - - - - - - - - - - - - - - + - - - - -
- - - - - - - + - - - + - - - - - - - - - + - - - - -
- - - - - - - - + - - - - - - - - - + - - + - - - - -
+ - - - - - - - - + - - - - - - - - - - - + - - - - -
- - - + - - - - - - + - - - - - - - - - - + - - - - -
- - - - - - - + - - - + - - - - - - - - - + - - - - -
+ + - - - - - - - - - - + + - - - - - - - + + - - - -
- - - + + + - - - - - - + + + - - - - - - + + + - - -
- - - - - - - - - - - - - + + - - - - - - + - - - - -
+ - - - - - - - - - - - - - - + - - - - - + - - - - -
- - - - - - - - - - - - - - - - + - - - - + - + - - -
- - - - - - - - - - - - - - - - - + - - - + + - - - -
+ - - + - - - - + - - - - - - - - - + - - + - - - - +
- - - - - - - - - - - - - - - - - - - + - + - - - - +
- - - - - - - - - - - - - - - - - - - - + + - - - - +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
- - - - - - - - - - - - + + - - - + - - - + + - - - +
- - - - - - - - - - - - - + - - + - - - - + - + + - +
+ - + - - - - - - - - - - - - - - - - - - + - + + - +
- - - - - - - - - - - - - - - - - - - - - + - - - + +
- - - - - - - - - - - - - - - - - - + + + + + + + + +

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।


ইনপুটটি কি দুটি সংখ্যা সহ একটি অ্যারে হতে পারে?
লুইস মেন্ডো

1
@DonMuesli যে অনুযায়ী অনুমোদিত মেটা উপর ঐক্যমত্য
Zgarb

উত্তর:


4

জেলি, 17 14 13 বাইট

+13ḃ3Um0ị2/⁼/

এটি অনলাইন চেষ্টা করুন! বা সমস্ত 27 × 27 কেস যাচাই করুন

কিভাবে এটা কাজ করে

+13ḃ3Um0ị2/⁼/  Main link. Argument: [f, g] (encoded as integers)

+13            Add 13 ([1, 1, 1] in base 3) to f and g.
   ḃ3          Convert f + 13 and g + 13 to bijective base 3.
               Bijective base 3 uses the digits 1 to 3 instead of 0 to 2.
               This yields [[f(2)+1, f(1)+1, f(0)+1], [g(2)+1, g(1)+1, g(0)+1]].
               The increments account for 1-based indexing.
     U         Reverse each digit array.
               This yields [[f(0)+1, f(1)+1, f(2)+1], [g(0)+1, g(1)+1, g(2)+1]].
      m0       Concatenate the list with a reversed copy of itself.
        ị2/    Split the result into pairs, and reduce each one by indexing.
               This computes g○f and f○g.
          ⁼/   Reduce by match; return 1 iff g○f = f○g.

আমি সমস্ত পরীক্ষার কেসগুলি যাচাই করার এবং ম্যাট্রিক্স প্রদর্শন করার জন্য আপনার ধারণাটি অনুলিপি করেছি :-)
লুইস মেন্ডো

3

এমএটিএল , 19 18 বাইট

I:PII$YAZ{Y:)1Mw)=

সত্যবাদিতা সকলের সাথে একটি অ্যারে। ফালসি হ'ল একটি অ্যারে যা কমপক্ষে একটি শূন্য থাকে।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত কেস যাচাই করুন (কয়েক সেকেন্ড সময় নেয়)।

       % implicitly input an array of two numbers
I:P    % push [3 2 1]
I      % push 3
I$     % specify that the next function takes 3 inputs
YA     % convert input to base 3 with alphabet [3 2 1] and 3 digits. Gives 2x3 array
Z{     % convert into cell of two cells, one with each row
Y:     % split cell array. We have two arrays on the stack, one per function
)      % index operation to compute f ∘ g. Function composition is indexing
1M     % push the two arrays again
w      % swap the two arrays
)      % index operation to compute g ∘ f
=      % test for equality element-wise
       % implicitly display

আমি মনে করি সাধারণত খালি তালিকাটি মিথ্যা বলে বিবেচিত হয়।
টিমটেক

1
@ টিমটেক যা ভাষার উপর নির্ভর করে। এমএটিএল-তে শূন্যযুক্ত অ্যারেগুলি মিথ্যা are
ডেনিস

ঠিক আছে, কেবল পরীক্ষা করা হচ্ছে ...
টিমটেক

@ টিমটেক শিওর! এখানে এটি আরও বিশদে রয়েছে: একটি অভিব্যক্তি সত্য হয় যখন এর ফলাফলটি অকার্যকর থাকে এবং এতে কেবল ননজারো উপাদান থাকে (যৌক্তিক বা আসল সংখ্যাসূচক)
লুইস মেন্ডো

3

পাইথন 2, 61 বাইট

lambda m,n:all(n/3**(m/i%3)%3==m/3**(n/i%3)%3for i in[1,3,9])

একটি ইনপুট দেওয়া i, আমরা ফাংশন দ্বারা প্রতিনিধিত্ব বাস্তবায়ন করতে পারে nকরে n/3**i%3বের করে আনতে iতম তিন অঙ্ক n। ফাংশনটি পরীক্ষা করে যে 0,1,2উভয় ক্রমে ফাংশন প্রয়োগ করার সময় একই ফলাফল প্রতিটিটির জন্য অর্জিত হয়। আসলে, যেহেতু প্রথম পদক্ষেপটি করছে 3**, [1,3,9]পরিবর্তে এই পরীক্ষাগুলি ।

কোডটির পুনঃব্যবহার অপব্যয়যুক্ত দেখায়, তবে এর চেয়ে ভাল আর ভাল উপায় আমি দেখতে পাইনি। তুলনা করা:

q=lambda x,i:x/3**i%3;lambda m,n:all(q(m,q(n,i))==q(n,q(m,i))for i in[0,1,2])

1

জাভাস্ক্রিপ্ট (ES7), 68 বাইট

(a,b)=>![0,1,2].some(n=>t(a,t(b,n))-t(b,t(a,n)),t=(a,n)=>a/3**n%3|0)

দুর্ভাগ্যক্রমে বেস 3 রূপান্তরটি খুব ব্যয়বহুল ছিল:

(a,b)=>[0,1,2].every(n=>a[b[n]]==b[a[n]],g=a=>(27+a).toString(3).slice(1),a=g(a),b=g(b))

0

গণিত, 77 বাইট

Reverse[#][[#2+{1,1,1}]]==Reverse[#2][[#+{1,1,1}]]&@@IntegerDigits[{##},3,3]&

গণিতের ওয়ান ভিত্তিক সূচক আবারও স্ট্রাইক!


1
{1,1,1}একটি ভেরিয়েবল বরাদ্দ এবং এটি ব্যবহার করতে সংক্ষিপ্ত।
ক্যালকুলেটরলাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.