ভেন ডায়াগ্রাম সেল


12

একাধিক সেট দেওয়া হয়েছে, যেমন s1={2,3,7}, s2={1,2,4,7,8}এবং s3={4,7}, কোনও ভেন ডায়াগ্রামটি প্রতিটি বদ্ধ বাঁক এবং সেট উপাদানগুলির দ্বারা নির্ধারিত হয় যা বাঁকগুলির ঘেরের ভিতরে বা বাইরে থাকে সেগুলি সেটের উপাদান বা না থাকে তার উপর নির্ভর করে। সমস্ত সেট উপাদান ভেন ডিগ্রামে একবারে উপস্থিত হওয়ার কারণে, প্রতিটি সেটকে উপস্থাপন করে এমন বক্ররেখাগুলি একটি উপাদান একাধিক সেটে উপস্থিত থাকলে প্রতিটি ওভারল্যাপ করা প্রয়োজন। আমরা ভেন ডায়াগ্রামের এমন একটি কক্ষকে ওভারল্যাপিং বলি ।

এই ব্যাখ্যাটি কিছুটা বিভ্রান্তিকর হতে পারে, সুতরাং আসুন একটি উদাহরণ দেখুন।

উদাহরণ

সেটগুলির জন্য একটি ভেন চিত্র s1, s2এবং এটির s3মতো দেখতে পারে:

এই ভেন ডায়াগ্রাম এর সেল (নিচ থেকে পড়া, বাম থেকে ডানে) হয় {1,8}, {2}, {7}, {4}, {3}, {}এবং {}

অনুশীলনে, একটি সাধারণত দুটি বা তিনটি সেটের কেবল ভেন চিত্রের মুখোমুখি হয়, কারণ চার বা ততোধিক সেটের ভেন চিত্রের প্রতিনিধিত্ব খুব স্পষ্ট নয়। তবে সেগুলির অস্তিত্ব রয়েছে, উদাহরণস্বরূপ ছয়টি সেটের জন্য:

সিসি বাই-এসএ 3.0, https://commons.wikimedia.org/w/index.php?curid=1472309

কাজটি

যেকোন যুক্তিসঙ্গত উপস্থাপনায় ইতিবাচক পূর্ণসংখ্যার সেটগুলির একটি খালি খালি সেট দেওয়া, ইনপুট সেটের ভেন ডায়াগ্রামের ঘরগুলির সেটটি ফিরিয়ে দিন। বিশেষত, কোন গ্রাফিকাল প্রতিনিধিত্ব প্রয়োজন।

  • আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন।
  • আপনি যত সেখানে ফাঁকা ঘর (অর্থাত একটি অনেক খালি সেট হিসাবে ফেরত দিতে পারেন তালিকা মাত্র এক ফাঁকা সেট (অর্থাত এর পরিবর্তে সমস্ত কোষ) সেট কোষের)।
  • উপরোক্ত উদাহরণে জন্য ইনপুট কিছু যুক্তিসঙ্গত উপায়ে অন্তর্গত কিন্তু সীমাবদ্ধ নয় {{2,3,7},{1,2,4,7,8},{4,7}}, [[2,3,7],[1,2,4,7,8],[4,7]], "2,3,7;1,2,4,7,8;4,7"বা "2 3 7\n1 2 4 7 8\n4 7"। আপনার নির্বাচিত ইনপুট ফর্ম্যাটটি গ্রহণযোগ্য কিনা তা নিয়ে সন্দেহ থাকলে, বিনা দ্বিধায় একটি মন্তব্যে জিজ্ঞাসা করুন।
  • আপনার আউটপুট ফর্ম্যাটটি যদি সম্ভব হয় তবে আপনার ইনপুট ফর্ম্যাটটির সাথে মেলে। নোট করুন যে এই নিয়মের জন্য আপনার ফর্ম্যাটটি খালি সেটগুলি দ্ব্যর্থহীনভাবে প্রদর্শন করতে সক্ষম হওয়া প্রয়োজন।
  • এটি , তাই আপনার পছন্দমতো ভাষাতে যতটা সম্ভব বাইট ব্যবহার করার চেষ্টা করুন। ভাষার মধ্যে ভাষার পরিবর্তে প্রতি প্রতিযোগিতা উত্সাহিত করার জন্য, আমি কোনও উত্তর গ্রহণ করব না।

পরীক্ষার কেস

সম্ভাব্য আউটপুটগুলির সাথে এখানে কিছু ইনপুট রয়েছে:

input -> output
{{2,3,7},{1,2,4,7,8},{4,7}} -> {{1,8},{2},{7},{4},{3},{}} (or {{1,8},{2},{7},{4},{3},{},{}})
{{1,2,3},{4,5,6},{7,8,9}} -> {{1,2,3},{4,5,6},{7,8,9},{}}
{{}} -> {{}}
{{1,2,3},{1,2}} -> {{1,2},{3},{}}
{{4,3,8},{1,2,9,3},{14,7,8,5},{6,11,3,8},{10},{9,4,3,7,10}} -> {{6,11},{10},{4},{3},{8},{5,14},{1,2},{9},{7},{}}
{{2,3,4,7},{},{1,3,7,5,6},{2,3,7,5},{7,2,4,3,6},{1,4,5}} -> {{},{4},{2},{7,3},{1},{6},{5}}
{{1,2,3,4},{1,2,5,6},{1,3,5,7}} -> {{4},{3},{2},{1},{6},{5},{7}}

আমি সেটাকে সংজ্ঞায়িত করার কারণে এটি সত্য বলে ধরে নিচ্ছি, তবে আমরা কি ধরে নিতে পারি যে সাবসেটগুলির মধ্যে কোনওটির মধ্যে কোনও নকল থাকবে না?
হাইপারনিউটারিনো

@ হাইপার নিউট্রিনো হ্যাঁ, আপনি ধরে নিতে পারেন যে সমস্ত সেট নকলমুক্ত।
লাইকনি

সম্ভবত আপনি কোনও পরীক্ষার কেস যোগ করতে পারেন যেখানে কোনও ঘরই খালি নেই। যেমন {1,2,3,4}, {1,2,5,6}, 6 1,3,5,7}}}
janrjan জোহানসেন

দ্বিতীয়টি কীভাবে দেয় না {{1,2,3},{4,5,6},{7,8,9},{},{},{},{}}?
ফাঁস নুন

1
@ কারাসোকম্পুটিং কাছাকাছি পরিদর্শন করার পরে আপনি দেখতে পাবেন যে এটি সত্য ভেন ডায়াগ্রাম নয় কারণ কিছু সম্ভাব্য ওভারল্যাপিংস অনুপস্থিত।
লাইকনি

উত্তর:


8

হাস্কেল , 71 বাইট

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

হিসাবে ব্যবহার করুন (foldr(\x r->(x\\(id=<<r)):([intersect x,(\\x)]<*>r))[])[[1,2,3],[1,2]]

import Data.List
foldr(\x r->(x\\(id=<<r)):([intersect x,(\\x)]<*>r))[]

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

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

  • সেট-এর মতো অপারেশনগুলি \\(পার্থক্য) এবং intersectথেকে ব্যবহার করে Data.List
  • খালি তালিকা দিয়ে শুরু করে ঘরগুলির তালিকায় "সেট" (তালিকা হিসাবে উপস্থাপিত) তালিকা ভাঁজ করে []
  • xডায়াগ্রামে যোগ করার জন্য বর্তমান সেটটি এটি rইতিমধ্যে নির্মিত ঘরগুলির তালিকা cells
    • x\\(id=<<r)এর উপাদানগুলির উপসেটটি xএটি ইতিমধ্যে নির্মিত কোন কোষে নেই।
    • [intersect x,(\\x)]<*>rপ্রতিটি কক্ষের rউপাদান রয়েছে কিনা তা অনুসারে বিভক্ত হয় x
  • সুনির্দিষ্টভাবে খালি ঘরগুলি মার্জ করার চেষ্টা করে না , সুতরাং আউটপুটে থাকা বেশ কয়েকটি রয়েছে।

আমার বাস্তবায়ন হিসাবে একই ধারণা, কিন্তু দুটি বাইট সংক্ষিপ্ত। সাবাশ!
লাইকনি

4

জেলি , 14 17 বাইট

FṀ‘³iþ¬Ḅµ;ṀḶ$ĠṖṖ€

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

ফাংশন জমা (কারণ জেলি মুদ্রণের ফর্ম্যাটটি ডিফল্টরূপে তালিকার তালিকায় রাউন্ড ট্রিপ করে না - এটি নিজস্ব আউটপুট ফর্ম্যাটটি পড়তে পারে না - তবে একই ফর্ম্যাটে একটি ফাংশন ইনপুট এবং আউটপুট)। টিআইও লিঙ্কটিতে একটি ফুটার রয়েছে যা ফাংশনটি চালায় এবং তার আউটপুট একই বিন্যাসে মুদ্রণ করে যে ইনপুট পার্স করা হয়েছে।

ব্যাখ্যা

FṀ‘³iþ¬Ḅµ;ṀḶ$ĠṖṖ€
FṀ‘               Find the largest number that appears in any of the input sets, + 1
   ³ þ            For each number from 1 to that number, and each of the input sets
    i ¬             find whether the number is missing from the set
       Ḅ          Convert the list of missing sets into a single number using binary
         ;        Append
        µ ṀḶ$     all numbers from 0 to the maximum value minus 1
             Ġ    Group indexes by values
              ṖṖ€ Delete the last group and last element of other groups

সমস্ত ভেন ডায়াগ্রাম বিভাগ ব্যবহার না করা হলে আমরা কমপক্ষে একটি খালি সেট আউটপুট করার প্রয়োজনীয়তাটি এখানে অর্ধেক প্রোগ্রাম গ্রহণ করতে পরিচালিত করে (এটি এর জন্য দায়ী যে আমাদের ন্যূনতম উপাদানগুলির জন্য কমপক্ষে একটি গ্রুপ রয়েছে, এটি আমাদের অনুমতি দেয় মূলত সেখানে কতগুলি সেট ছিল তা ট্র্যাক রাখতে, এবং উত্স কোডের শেষ নয়টি বাইট ব্যতীত Ġ)। মৌলিক উপায় যা আমরা তা বাস্তবায়ন তা নিশ্চিত করার জন্য সব 2 ^ হয় এন ভেন ডায়াগ্রাম সাব-সেট নির্বাচন, অন্তত একটি এন্ট্রি থাকে একটি ডামি এন্ট্রি প্রতিটি থেকে "কোন সেটে" বিভাগে এবং (পরে) একটি ডামি এন্ট্রি পূরণ হবে যোগ করে অন্য বিভাগ, তারপরে Ġপ্রতিটি উপসেটের জন্য একটি গ্রুপ আউটপুট তৈরি করবে, যা আমরা ব্যবহার করে মুছে ফেলতে পারি ṖṖ€


উম সর্বাধিক sets টি সেটে কোনও বিধিনিষেধ নেই এবং পরীক্ষার একটির ক্ষেত্রে এর বেশি রয়েছে।
janrjan জোহানসেন

আমি ধরে নিয়েছি যে মূল সেটটির দৈর্ঘ্য 3 ছিল, কারণ ভেন ডায়াগ্রামগুলি এভাবেই কাজ করে, তবে দৃশ্যত নয়? সেক্ষেত্রে ভেন ডায়াগ্রামের সমস্ত বিভাগ ভরাট না হলে খালি সেটটি যুক্ত করার জন্য সম্ভবত আমার আলাদা উপায়ের প্রয়োজন। এটি অন্যথায় মোটামুটি সুন্দর প্রশ্নটির জন্য একটি দুষ্টু দোষের কিছু।

আমি ধরে নিয়েছি আপনি 7 দ্বারা 2 ^ n-1 প্রতিস্থাপন করতে পারেন।
janrjan জোহানসেন

অনুমানের সাথে মেলে এমন 2 ^ n-1 মান পেতে আমি একটি উপায় পেয়েছি তবে এটি বেদনাদায়ক দীর্ঘ। আশা করি আরও একটি ছোট উপায় আছে, তবে তবুও এই প্রশ্নটি হতাশাব্যঞ্জক।

4

পার্ল 5, 79 বাইট

sub{for$.(0..@_){$x{$_}+=2**$.for@{$_[$.]}};push@{$h{$x{$_}}},$_ for keys%x;%h}

([2,3,7], [1,2,4,7,8], [4,7]) এর মতো বেনামে অ্যারেগুলির তালিকা হিসাবে ইনপুট নেয়। একটি হ্যাশ আউটপুট করে যেখানে কীগুলি লেবেল এবং মানগুলি আউটপুট সেটগুলির সাথে সম্পর্কিত বেনামে অ্যারে হয়।

একটি সম্পূর্ণ প্রোগ্রামের অংশ হিসাবে:

*x=
sub{for$.(0..@_){$x{$_}+=2**$.for@{$_[$.]}};push@{$h{$x{$_}}},$_ for keys%x;%h};
%x=x([2,3,7],[1,2,4,7,8],[4,7]);
print"Set $_:@{$x{$_}}\n"for keys%x;

ব্যাখ্যা:

প্রতিটি সেট একটি লেবেল হিসাবে একটি পূর্ণসংখ্যা দেয় $.। একটি হ্যাশ তৈরি করে যা প্রতিটি অনন্য উপাদানের জন্য একটি পূর্ণসংখ্যা সঞ্চয় করে $_। প্রদর্শিত 2**$.প্রতিটি সেটের জন্য যুক্ত $_করে, কার্যকরভাবে একটি বাইনারি মানচিত্র তৈরি করে যা প্রতিটি উপাদান উপস্থিত থাকে তা প্রদর্শন করে Finally সুতরাং প্রতিটি অ্যারের প্রতিটি উপাদান একই সেট এবং এইভাবে ভেন চিত্রের একই কোষে বিদ্যমান।


3

পাইথ , 11 বাইট

m-@Fds-Qdty

পরীক্ষা স্যুট.

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

ভেন ডায়াগ্রামের প্রতিটি অঞ্চল এমন উপাদানগুলি উপস্থাপন করে যা [সেটগুলির নির্দিষ্ট সংমিশ্রণে] থাকে তবে [অন্যান্য সেটগুলিতে নয়]।

সুতরাং, আমরা ইনপুটটির পাওয়ার সেটটি আবিষ্কার করে সমস্ত সম্ভাব্য সংমিশ্রণগুলি (এবং খালি সমন্বয়গুলি সরিয়ে ফেলি) তৈরি করি।

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

m-@Fds-Qdty  input as Q
          y  power set
         t   remove the first one (empty combination)
m            for each combination d:
  @Fd            find the intersection of all the sets in d
 -               filter out those who are in
     s               the union of
      -Qd            the sets not in the combination
                     (input minus combination)

2

জাভাস্ক্রিপ্ট (ES6), 123 বাইট

a=>a.map((b,i)=>b.map(e=>m[e]|=1<<i),m=[])&&[...Array(1<<a.length)].map((_,i)=>m.map((e,j)=>e==i&&j).filter(j=>j)).slice(1)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.