হাইপারকিউবার প্রান্তে


12

আপনার কাজটি কোনও ফাংশন বা একটি প্রোগ্রাম লিখতে হবে, এটি একটি পূর্ণসংখ্যা n>0ইনপুট হিসাবে গ্রহণ করবে এবং- nমাত্রিক হাইপারকিউবের किनार গুলির একটি তালিকা আউটপুট দেবে । গ্রাফ তত্ত্বে একটি প্রান্তটি সংযুক্ত থাকে এমন একটি শীর্ষ দ্বি (বা কোণগুলি, যদি আপনি পছন্দ করেন) এর 2-টিপল হিসাবে সংজ্ঞায়িত করা হয়।

উদাহরণ 1

একটি 1-মাত্রিক হাইপারকিউব একটি লাইন এবং এতে দুটি উল্লম্ব রয়েছে, যা আমরা কল করব aএবং b

এখানে চিত্র বর্ণনা লিখুন

সুতরাং, আউটপুট হবে:

[[a, b]]

উদাহরণ 2

4-মাত্রিক হাইপারকিউব (বা টেসারেক্ট) 32 টি কিনারা নিয়ে গঠিত এবং এর গ্রাফটি এর মতো দেখায়

এখানে চিত্র বর্ণনা লিখুন

এবং আউটপুট এই মত দেখতে পারে

[[a, b], [a, c], [a, e], [a, i], [b, d], [b, f], [b, j], [c, d], [c, g], [c, k], [d, h], [d, l], [e, f], [e, g], [e, m], [f, h], [f, n], [g, h], [g, o], [h, p], [i, j], [i, k], [i, m], [j, l], [j, n], [k, l], [k, o], [l, p], [m, n], [m, o], [n, p], [o, p]]

বিধি

  • নামটি অনন্য হিসাবে যতক্ষণ না আপনি নিজের পছন্দ অনুসারে নাম লিখতে পারেন।
  • প্রান্তগুলি পুনঃনির্দেশিত, অর্থাৎ [a, b]এবং [b, a]একই প্রান্ত হিসাবে বিবেচিত হয়।
  • আপনার আউটপুটে অবশ্যই নকল প্রান্ত থাকা উচিত নয়।
  • আউটপুট যে কোনও বুদ্ধিমান বিন্যাসে হতে পারে।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

স্কোরিং

সংক্ষিপ্ততম কোড জিতেছে।



সুতরাং [1,2], [2,3] ইত্যাদি ঠিক আছে?
Rɪᴋᴇʀ

পুনঃটুইট
মার্ফি

প্রান্তগুলি কোনও ক্রমে আউটপুট হতে পারে, তাই না?
লুইস মেন্ডো

পুনঃটুইট
মার্ফি

উত্তর:


4

জেলি, 13 বাইট

ạ/S’
2ṗœc2ÇÐḟ

এখানে চেষ্টা করুন। ইনপুট জন্য 3, আউটপুট হয়:

[[[1, 1, 1], [1, 1, 2]],
 [[1, 1, 1], [1, 2, 1]],
 [[1, 1, 1], [2, 1, 1]],
 [[1, 1, 2], [1, 2, 2]],
 [[1, 1, 2], [2, 1, 2]],
 [[1, 2, 1], [1, 2, 2]],
 [[1, 2, 1], [2, 2, 1]],
 [[1, 2, 2], [2, 2, 2]],
 [[2, 1, 1], [2, 1, 2]],
 [[2, 1, 1], [2, 2, 1]],
 [[2, 1, 2], [2, 2, 2]],
 [[2, 2, 1], [2, 2, 2]]]

আমি আশা করি [1, 1, 1]ইত্যাদি ঠিক আছে "নাম"।

ব্যাখ্যা

প্রথম লাইনটি একটি জোড় প্রান্তের একটি "প্রেডিকেট": [A, B] ạ/S’সমান sum(abs(A - B)) - 1, যা শূন্য (মিথ্যা-ওয়াই) iff Aএবং Bঠিক এক স্থানাঙ্কের মধ্যে পৃথক।

দ্বিতীয় লাইনটি মূল প্রোগ্রাম:

  • 2ṗ(কার্টেসিয়ান পাওয়ার অফ [1, 2]) দিয়ে সমস্ত প্রান্ত তৈরি করুন ।
  • সমস্ত সম্ভাব্য জোড়া ব্যবহার করে œc2(প্রতিস্থাপন ছাড়াই দুই আকারের সংমিশ্রণ) পান।
  • পূর্বনির্ধারিত ( ÐḟÇ) পূর্বাভাসটিকে সন্তুষ্ট করার জন্য কেবলমাত্র উপাদান রাখুন ।

1
ạ/S’এবং 2ṗœc2ÇÐḟকয়েক বাইট সংরক্ষণ করুন।
ডেনিস

c/P=2, 2ṗṗ2ÇÐfকাজ করে।
ডেনিস

স্মার্ট "নামকরণ" প্রকল্প! অবশ্যই নিয়মের মধ্যে।
মার্ফি

9

পাইথন 2, 54 56 62 বাইট

lambda n:{tuple({k/n,k/n^1<<k%n})for k in range(n<<n)}

সদৃশ প্রান্তগুলি সেটগুলির একটি সেট তৈরি করে সরিয়ে ফেলা হয়, পাইথন ব্যতীত সেট উপাদানগুলি হ্যাশযোগ্য, তাই সেগুলি একটি টিউপলে রূপান্তরিত হয়। নোট করুন যে সেটগুলি {a,b}এবং {b,a}সমান এবং একই টিপলটিতে রূপান্তরিত। xsot এর সাথে 2 বাইট সংরক্ষণ করেছে n<<n

সেটগুলির স্ট্রিং যদি ঠিক আছে আউটপুট ফর্ম্যাট হয় তবে এটি 49 বাইটে কেটে যেতে পারে

lambda n:{`{k/n,k/n^1<<k%n}`for k in range(n<<n)}

যা আউটপুট দেয়

set(['set([1, 3])', 'set([2, 3])', 'set([0, 2])', 'set([0, 1])'])

lambda n:[(k/n,k/n^1<<k%n)for k in range(n*2**n)if k/n&1<<k%n]

প্রথমে আসুন সমাধানটির একটি পুরানো সংস্করণ দেখুন।

lambda n:[(i,i^2**j)for i in range(2**n)for j in range(n)if i&2**j]

বিরতিতে প্রতিটি সংখ্যার [0,2^n)সাথে এর nবাইটিক বাইনারি স্ট্রিং দ্বারা প্রদত্ত স্থানাঙ্কগুলির সাথে একটি ভার্টেক্সের সাথে মিল রয়েছে । শীর্ষস্থানগুলি সংলগ্ন হয় যদি তারা একক বিটে পৃথক হয়, অর্থাত্ যদি কোনওটি 2 এর পাওয়ার xor-ing দ্বারা অন্যের কাছ থেকে প্রাপ্ত হয়।

এই বেনামে ফাংশনটি প্রতিটি শীর্ষস্থান এবং প্রতিটি বিট পজিশনে উল্টাতে সমস্ত সম্ভাব্য প্রান্ত তৈরি করে। উভয় দিকের প্রান্তটি নকল করা এড়াতে কেবল 1 টি 0-তে চলে গেছে।

আরও গল্ফযুক্ত সমাধানে, kউভয় iএবং jমাধ্যমে এনকোড করতে ব্যবহৃত হয় k=n*i+j, যা থেকে (i,j)হিসাবে বের করা যেতে পারে (k/n,k%n)। এটি বোঝার একটি লুপ সংরক্ষণ করে। এর ক্ষমতাগুলি সঠিক অপারেটরের অগ্রাধিকার 2হিসাবে সম্পন্ন হয় 1<<

প্রতিটি জোড় বিভাজন উত্পন্ন করার এবং এগুলি কিছুটা ফ্লিপ করা হয় কিনা তা যাচাইয়ের বিকল্প পদ্ধতির জন্য দীর্ঘতর (70 বাইট) মনে হয়:

lambda n:[(i,x)for i in range(2**n)for x in range(i)if(i^x)&(i^x)-1<1] 

1
n*2**nঠিকn<<n
এক্সসট

পাইথন 3.5 তে স্যুইচ করা, lambda n:{(*{k//n,k//n^1<<k%n},)for k in range(n<<n)}একটি বাইট সংরক্ষণ করে। (তারকাচিহ্নিত এক্সপ্রেশনটি তিনটি সাশ্রয় করে তবে বিভাগের বাক্য গঠন দুটি হারায়)) তবে আমি নিশ্চিত যে আপনার কাছে থাকা 49-বাইট সমাধানটি ঠিক আছে।
লিন

4

গণিত, 48 24 বাইট

EdgeList@*HypercubeGraph

কেবল একটি বেনাম ফাংশন যা বিল্ট-ইনগুলি ব্যবহার করে।


আহ, অন্তর্নির্মিত! যেহেতু আপনাকে অক্ষরটির বর্ণমালা অনুসারে নাম রাখতে হবে না, আপনি এটি বাদ দিতে পারেন FromLetterNumber। আমি এমনকি EdgeList@*HypercubeGraphএকটি বৈধ উত্তর মনে করি ।
মার্ফি

3

জাভাস্ক্রিপ্ট (স্পাইডারমনকি 30+), 69 64 বাইট

n=>[for(i of Array(n<<n).keys())if(i/n&(j=1<<i%n))[i/n^j,i/n^0]]

এটি @ xnor এর পাইথন 2 সমাধানের পোর্ট হিসাবে শুরু হয়েছিল তবে আমি একক লুপ ব্যবহার করতে কোডটি পুনরায় লিখে 9 বাইট সংরক্ষণ করতে সক্ষম হয়েছি। সম্পাদনা: i@ xnor এর আপডেট হওয়া সমাধান অনুসারে, অন্যভাবে চারদিকে বিভক্ত হয়ে আরও 5 বাইট সংরক্ষণ করা হয়েছে, যা এখন একটি একক লুপও ব্যবহার করে।


2

এমএটিএল , 20 বাইট

2i^:qt!Z~Zltk=XR2#fh

এটি ভাষা / সংকলকের বর্তমান সংস্করণ (14.0.0) এর সাথে কাজ করে ।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

এটি কমপক্ষে @ xnor এর উত্তর হিসাবে একই ধারণা ব্যবহার করে ।

2i^    % take input n and compute 2^n
:q     % range [0,1,...,2^n-1] (row vector)
t!     % duplicate, transpose into a column vector
Z~     % bitwise XOR with broadcast
Zl     % binary logarithm
tk     % duplicate and round down
=      % true if equal, i.e. for powers of 2
XR     % upper triangular part, above diagonal
2#f    % row and index columns of nonzero values
h      % concatenate vertically

2

পাইথ, 13 বাইট

fq1.aT.c^U2Q2

ইনপুট 3 এ আউটপুট :

[[[0, 0, 0], [0, 0, 1]], [[0, 0, 0], [0, 1, 0]], [[0, 0, 0], [1, 0, 0]], [[0, 0, 1], [0, 1, 1]], [[0, 0, 1], [1, 0, 1]], [[0, 1, 0], [0, 1, 1]], [[0, 1, 0], [1, 1, 0]], [[0, 1, 1], [1, 1, 1]], [[1, 0, 0], [1, 0, 1]], [[1, 0, 0], [1, 1, 0]], [[1, 0, 1], [1, 1, 1]], [[1, 1, 0], [1, 1, 1]]]

ব্যাখ্যা:

fq1.aT.c^U2Q2
                  Implicit: input = Q
        ^U2Q      All Q entry lists made from [0, 1].
      .c    2     All 2 element combinations of them.
f                 Filter them on
   .aT            The length of the vector
 q1               Equaling 1.

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