গল্ফ এ ভেন ডায়াগ্রাম জেনারেটর


26

গল্ফ এ ভেন ডায়াগ্রাম জেনারেটর

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

জন ভেনের 180 তম জন্মদিন যথাযথভাবে উদযাপন করার জন্য , আজ আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করবে যা একটি ভেন ডায়াগ্রামকে আউটপুট করে !

ইনপুট:

একটি ধনাত্মক পূর্ণসংখ্যা Nযা ডায়াগ্রামে (শূন্য থেকে N) এবং তিন ধনাত্মক পূর্ণসংখ্যার সেটগুলিতে উপস্থিত সংখ্যার পরিসীমা নির্ধারণ করবে ।

আউটপুট:

একটি 3 সেট ভেন ডায়াগ্রাম 0 থেকে সমস্ত পূর্ণসংখ্যার Nএবং সেটগুলির অনুরূপ চিত্রগুলির যথাযথ অঞ্চলে প্রদর্শন করে সেটগুলির সম্পর্কগুলি দেখায় ।

নোট

  1. stdinমানগুলি পেতে (বা আপনার ভাষার সমতুল্য যা কিছু হোক) ব্যবহার করুন ।
  2. আপনি সেটগুলির জন্য এবং এর জন্য ইনপুট ফর্ম্যাট সংজ্ঞায়িত করতে পারেন N(কমা দ্বারা পৃথক, স্ল্যাশ বা আপনার জন্য সর্বোত্তম কাজ করে)।
  3. যে সংখ্যাগুলি কোনও সেটে উপস্থিত হয় না তবে নির্দিষ্ট সীমার মধ্যে থাকে সেগুলি ডায়াগ্রামে অবশ্যই প্রদর্শিত হবে, কেবল কোনও অঞ্চলের মধ্যে নয়।
  4. সেটগুলির নামকরণের প্রয়োজন নেই।
  5. আউটপুট একটি অঙ্কন বা আসকি-আর্ট হতে পারে।
  6. ডায়াগ্রামের যতক্ষণ না সীমানা নির্বিঘ্নে আলাদা করা যায় ততক্ষণ কোনও আকার থাকতে পারে (আপনি যদি ASCII শিল্প বেছে নেন, সীমা অতিক্রমের জন্য + (বা অনুরূপ) ব্যবহার করা প্রয়োজনীয়, উদাহরণস্বরূপ)।
  7. অঞ্চলগুলি তবে শেড করতে হবে না।
  8. ভেন ডায়াগ্রামগুলি তৈরি করে এমন কোনও অন্তর্নির্মিত ফাংশন বা তৃতীয় পক্ষের গ্রন্থাগারগুলি অনুমোদিত নয়।
  9. স্ট্যান্ডার্ড লুফোলস প্রযোজ্য

এটি , তাই সংক্ষিপ্ততম কোড, বাইটে, জিতে।


দেখে মনে হচ্ছে আপনার একটি নোট যুক্ত করা উচিত ছিল যে সমাধানগুলিতে স্বেচ্ছাচারিত ইনপুট আকারের জন্য স্কেল করতে হবে। বর্তমানে তাদের মধ্যে কয়েক জনই এটি করে (যতদূর আমি কেবল এএসসিআইআইকে বলতে পারি)। প্রতিযোগিতা শুরুর পরে আমি নিয়ম পরিবর্তন করতে পছন্দ করি না তবে এই প্রয়োজনীয়তা ছাড়াই, কেউ সম্ভবত একটি সাধারণ লেআউট দিয়ে এটি ব্যবহার করতে পারে যা কেবলমাত্র প্রতিটি সেটে একটি চরিত্রের জন্য কাজ করে (যদি আমি তা করি তবে আমি সম্ভবত কোডের আকারটি কাটতাম তৃতীয় বা তাই)।
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার হ্যাঁ, তাদের মধ্যে কিছু স্কেল বেশ খারাপ। তবে এখন 7 টি উত্তর রয়েছে এমন একটি নোট যুক্ত করা খারাপ ধারণা বলে মনে হচ্ছে। চিরকুটটি যুক্ত করা উচিত এবং তাদের প্রত্যেকের পোস্টে মন্তব্য করা উচিত যাতে তাদের জানতে দেওয়া উচিত যে ডায়াগ্রামটি এক্স পর্যন্ত ভালভাবে স্কেল করা উচিত?
উইলিয়াম বারবোসা

সীমা নির্ধারণ করা এখনও সেই সীমাটিকে কেবল হার্ড-কোডিংয়ের অনুমতি দেবে। আমি মনে করি যে সঠিক স্কেলিং আসলে চ্যালেঞ্জের সবচেয়ে কঠিন অংশ। সুতরাং হয় এটিকে যেমন হয় তেমন ছেড়ে দিন, বা এটি পরিবর্তন করতে বলুন যে এটি নির্বিচারে সেট আকারের সাথে ডিল করতে হবে (যা প্রযুক্তিগতভাবে কোনও পরিবর্তনও নয়, যেহেতু আপনি ইনপুট মাপগুলিকে সীমাবদ্ধ করেননি বলে আমি মনে করি আরবীট্রি ইনপুট আকারগুলি যেভাবেই ধরে নেওয়া উচিত) ।
মার্টিন ইন্ডার

@ রায়ান নোট করুন যে আমি আউটপুট বিভাগে "চিত্রের সঠিক অঞ্চলে তাদের প্রদর্শন করে" উল্লেখ করেছি state কিছু উত্তর (আপনার অন্তর্ভুক্ত) সঠিকভাবে অন্তর্ভাগটি প্রদর্শন করবেন না যদি বলা হয়েছে যে বিভাগে 5 টিরও বেশি উপাদান রয়েছে, তাই আমি মনে করি এটি অবৈধ
উইলিয়াম বারবোসা

প্রাসঙ্গিক xkcd: xkcd.com/1810
সার্জিওল

উত্তর:


8

গণিত 343 264

UnGolfed

m=Input[]; data=Input[];


(* The circles to represent set boundaries *)
{R1,R2,R3}=Circle[#,5]&/@{{-2,8.5},{2,8.5},{0,5}};

(*converts  {1,0,1} to base 10, ie, the number 5.
bool[x_]:=FromDigits[Boole[x],2]

(* determines the region in which each number from 0 to `m` resides *)
encode[num_]:=bool[Table[MemberQ[data[[k]],num],{k,3}]]

(*Centroid of each region; the first is a location for numbers in none of the three sets *)
points={{7,4},{0,2},{4,10},{3,6},{-4,10},{-3,6},{0,11},{0,7}}

(* Plots the venn diagram with numbers in regions *)
Graphics[{
Text@@@({#[[1]],points[[#[[2]]+1]]}&/@({#[[All,1]],#[[1,2]]}&/@GatherBy[{#,encode[#]}&/@Range[0,m],Last])),
Opacity[.1],R1,R2,R3
}]

ধরে নিই এর 10জন্য ইনপুট ছিল mএবং এর {{1,2,3,4,5,9},{1,2,3,6,8},{7,2,9}}জন্য ইনপুট ছিল d,

নতুন ভেন ডায়াগ্রাম


গল্ফড 264

আমি অবাক হয়েছি যে সমস্ত গণনাটি Graphicsফাংশনের মধ্যেই সঞ্চালিত হতে পারে । ইনপুটগুলি বাদ দিয়ে এটি একটি ওলাইনার।

m=Input[];d=Input[]
Graphics@{Text@@@({#[[1]],{{7,4},{0,2},{4,10},{3,6},{-4,10},{-3,6},{0,11},{0,7}}[[#[[2]]+1]]}&/@({#[[All,1]],#[[1,2]]}&/@GatherBy[{#,FromDigits[Boole[Table[d[[k]]~MemberQ~#,{k,3}]],2]}&/@Range[0,m],Last])),Circle[#,5]&/@{{-2,8.5},{2,8.5},{0,5}}}

চেনাশোনাগুলির উপস্থিতির জন্য +1। আমি অবাক হয়েছি তারা ধূসর রঙের দেখতে এত সুন্দর দেখাচ্ছে। সংখ্যার বিক্ষিপ্ততা যদিও অদ্ভুত। আপনি RandomSampleঅবস্থান বাছাই করতে ব্যবহার করছেন ?
স্তরের নদী সেন্ট

ধূসর কাজ করে কারণ অস্বচ্ছতা 10%। স্থানটি বাছাইয়ের জন্য র্যান্ডমস্যাম্পল ব্যবহৃত হত। একবার কোনও অবস্থান চয়ন করা হয়ে গেলে এটি অতিরিক্ত বাছাইয়ের জন্য প্রার্থীদের সেট থেকে সরানো হয়। আমি অন্যান্য পদ্ধতির সাথে ঘুরেছি (উদাহরণস্বরূপ একটি উপ-অঞ্চলের সেন্ট্রয়েড নিয়োগ করে, তবে ফলাফল পছন্দ করি না)। বিটিডাব্লু, আমি ফিটিং লেবেলের প্রতি আপনার পদ্ধতির পছন্দ করি like
ডেভিডসি

অক্ষরগুলি সংরক্ষণ করতে, আমি স্যুইচ করেছি Circles, তাই ধূসর ডিস্কগুলি চলে গেছে। বেশিরভাগ সঞ্চয়ের বিষয়টি এই অঞ্চলের কেন্দ্রে একটি অঞ্চলের সমস্ত সদস্যের চক্রান্ত করার বিষয়টি থেকে আসে।
ডেভিডসি

45

রুবি, 654 590 566 542 505 বাইট

এই মজা ছিল। আমি এএসসিআইআই ব্যবহার করেছি। আমি এখনও প্রতিটি সম্ভাব্য সংমিশ্রণটি পরীক্ষা করতে সক্ষম হইনি, সুতরাং যদি আপনি কোনও চটকদার পরীক্ষার কেস পান তবে দয়া করে আমাকে জানান।

require'set'
u=(0..gets.to_i).to_set
a,b,c=eval(gets).map &:to_set
i=' '
m,M,n,N,o,O,p,P,q,Q,r,R,s,S=[a-b-c,b-a-c,c-a-b,a&b-c,b&c-a,a&c-b,a&b&c].map{|u|[t=u.to_a*i,t.size]}.flatten
H,V,X=?─,?│,?┼
puts'┌'+H*(A=[1+M+[P,S].max,1+R].max)+?┐+(u-a-b-c).to_a*i,V+i*M+?┌+(b=H*(T=-M+U=A-1)+X+H*(B=[N,Q].max))+?┐,V+m+V+p+i*(T-P)+V+n+i*(B-N)+V,'│┌'+H*(K=M-1)+X+b+X+H*(C=[O-B-1,0].max)+?┐,(v=V*2+i*K)+V+s+i*(T-S)+V+q+i*(B-Q)+V+i*C+V,v+?└+b+?┘+i*C+V,V*2+r+i*(U-R)+V+o+i*(-O+D=B+C+1)+V,'└┼'+H*U+?┘+i*D+V,' └'+H*(A+D)+?┘

এটি নিম্নলিখিত ফর্ম্যাটে STDIN এ ইনপুটটি প্রত্যাশা করে

10
[[1,2,3,4,5,9],[1,2,3,6,8],[7,2,9]]

এবং তারপরে আপনাকে এই সৌন্দর্যে পুরস্কৃত করবে

┌───────┐0 10
│   ┌───┼───┐
│4 5│1 3│6 8│
│┌──┼───┼───┼┐
││  │2  │   ││
││  └───┼───┘│
││9     │7   │
└┼──────┘    │
 └───────────┘

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

এটি অবশ্যই নির্দিষ্ট সীমানা আরও কড়া করে বা এমনকি কিছু গ্রাফিকালগুলির মতো ঠিক করে রেখে আরও গল্ফ করা যেতে পারে তবে আমি পছন্দ করি যে এটি দুর্দান্ত দেখাচ্ছে এবং গল্ফ হওয়া সত্ত্বেও "সঠিকভাবে" করা হয়েছে।


আপনি যদি আজকের ক্যাপটিতে না পৌঁছতেন তবে আপনি এই উত্তরটি নিয়ে আজ 10 কে ক্লাবে পৌঁছে যেতেন, কি
উইলিয়াম বারবোসা

@ উইলিয়াম বারবোসা সম্ভবত এটি আমাকে আগামীকাল প্রয়োজনীয় প্রয়োজনীয়তা দেবে। ;)
মার্টিন ইন্ডার

এটি দেখতে সুন্দর ভেন ডায়াগ্রাম। আমি অনুমান করছি ডায়াগ্রামের উপস্থিতিটি আপনার সমস্ত উত্সাহের মূল কারণ। বড় সেট জন্য কি ঘটে? আমি অনুমান করছি যে এটি একই উচ্চতা থেকে যায় এবং কেবল আরও প্রশস্ত এবং প্রশস্ত হয়?
স্তর নদী সেন্ট

পছন্দ করুন 8 টি উপগ্রহের প্রত্যেকটি কেবলমাত্র সঠিক অবস্থানে স্থান সীমানাঙ্কিত তালিকা হিসাবে মুদ্রিত। সীমানা সর্বদা একই আকারের হয় এবং প্রতিটি বিভাগের প্রস্থের ভিতরে সমস্ত কিছু ফিট করার জন্য সর্বনিম্ন সম্ভব হতে নির্ধারিত হয়। অবশ্যই, আমি যদি প্রতিটি সাবসেটকে মোটামুটি বর্গক্ষেত্র রাখতে লাইন ব্রেক গণনা করি তবে এটি দেখতে আরও সুন্দর লাগবে, তবে তারপরে আবার কোড-গল্ফ এটি সর্বোপরি;)। এছাড়াও লাইনগুলির মধ্যে অতিরিক্ত ব্যবধান ছাড়াই এটি আরও ভাল দেখায়
মার্টিন ইন্ডার

1
ছোট এঙ্গেল অক্ষর দেখেছি এবং এটি এপিএল বা অন্য কিছু মনে করে একটি ডাবল-গ্রহণ করেছে। :)
hoosierEE

15

বিবিসি বেসিক, 243 এএসসিআইআই অক্ষর (টোকেনাইজড ফাইলের আকার 211 বাইট)

Http://www.bbcbasic.co.uk/bbcwin/bbcwin.html এ এমুলেটরটি ডাউনলোড করুন

Golfed

  INPUT"N",n
  DIMs(n+1)
  FORi=0TO2PRINT"S";i
  REPEATINPUTx:s(x)=s(x)+2^i:UNTILx>n
  NEXTMODE4r=360CIRCLE460,r,r
  CIRCLE640,664,r
  CIRCLE820,r,r
  FORi=0TO7FORx=0TOn:IFs(x)=i PRINT;x
  NEXTREADa
  VDU28,a+1792;a+5;
  NEXT
  DATA19,4873,2572,4893,2586,5907,3091,34

আপনি কোন নতুন লাইনের / সাদা স্থানকে মুছে ফেলতে পারবেন সে সম্পর্কে বিবিসি বেসিক খুব স্বেচ্ছাচারী। অপ্রয়োজনীয় নিউলাইনগুলি ছড়িয়ে দেওয়া ছাড়াও এখানে আরও কৌশল আছে যা অঘলিত সংস্করণে নেই: আমি প্লটিং লুপের শেষে, ভিউপোর্টটি (নিখরচায় মন্তব্যগুলিতে নীচে ব্যাখ্যা দেখুন) অর্পণ করি, শুরুতে নয়। এর অর্থ হ'ল সেটটির বাইরের উপাদানগুলি উপরের বামে প্লট করা হয়েছে এবং প্রোগ্রামটির শেষে ডানদিকের উপরে একটি ভিউপোর্টে কার্সার আটকা পড়েছে। এই জন্য কারণ নিষ্কাশন করা হয় VDU26

Ungolfed

প্রতিটি সংখ্যার সেট ব্যবহারকারীর মাধ্যমে এন + 1 নাম্বার প্রবেশ করে শেষ করা হয় (কিছুটা অস্বাভাবিক পছন্দ, এটি অ্যারের ব্যাপ্তির বাইরে লেখার চেষ্টা করার ফলে ঘটে যাওয়া ত্রুটিগুলি এড়ানোর জন্য।) তারপরে এটি পাঠ্য মোড থেকে গ্রাফিক্স মোডে পরিবর্তিত হয় এবং ভেন চিত্রটি প্লট করে।

ইনপুট ডেটা একটি অ্যারেতে সংরক্ষণ করা হয়, প্রতিটি মান প্রদর্শিত হবে cell ডেটা একটি 3-বিট মান হিসাবে সংরক্ষণ করা হয়: 1 সেট 0 + 2 এর জন্য সেট 1 + 4 এর জন্য সেট 2 এর জন্য 0 থেকে 7 সীমাতে একটি নম্বর দেয় বিবিসি বেসিকের কোনও শিফট অপারেটর নেই, পরিবর্তে পাওয়ার অপারেটর ব্যবহার করা হয়: 2^iপরিবর্তে 1<<iইন উদাহরণস্বরূপ সি।

চেনাশোনাগুলি ষড়যন্ত্র করার পরে, বাহ্যিক লুপগুলি আটটি অঞ্চলের প্রত্যেকটির মধ্য দিয়ে চলে যায় প্রয়োজনীয় স্থানাঙ্কগুলিতে চলে যায় (কোনও ডাটা টেবিল অনুযায়ী)) একটি অভ্যন্তরীণ লুপ সেই অঞ্চলের সমস্ত সংখ্যা মুদ্রণ করে (যারা এতে 3-বিট মানযুক্ত) অ্যারে।)

  INPUT"N",n                                 :REM create an array called s() with range 0..n+1
  DIMs(n+1)
  FORi=0TO2
    PRINT"S";i                               :REM prompt the user for data for set 0, set 1 and set 2.
    REPEATINPUTx:s(x)=s(x)+2^i:UNTILx>n      :REM input numbers and store as a bit table. Repeat until user enters n+1.
  NEXT
  MODE4                                      :REM change to graphics mode.
  r=360
  CIRCLE460,r,r                              :REM plot a circle at x,y,r.
  CIRCLE640,664,r                            :REM for the bottom two circles y=r.
  CIRCLE820,r,r
  FORi=0TO7                                  :REM for each region of the venn diagram
    READa                                    :REM read a 2 byte value for the  coordinates of the top left corner of a text viewport from the DATA statement: x+256y
    VDU28,a+1792;a+5;                        :REM create a 5x7 viewport (limits each region to 7 numbers.) 1792=7*256
    FORx=0TOn:IFs(x)=i PRINT;x               :REM print all numbers in the array belonging to that region
    NEXT
  NEXT
  VDU26                                      :REM Restore the viewport to the whole screen, to ensure the command prompt does not mess up the display at the end of the program.
  DATA34,19,4873,2572,4893,2586,5907,3091

টিপিক্যাল ইনপুট এবং আউটপুট (অরগোল্ফড সংস্করণ) এর মন্টেজ

গল্ফযুক্ত সংস্করণে, কমান্ড প্রম্পটের সাহায্যে সেটগুলির বাইরের সংখ্যার অবস্থান বিনিময় করা হয় >

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


এটি ইচ্ছামত বৃহত ইনপুট জন্য কাজ করে?
মার্টিন ইন্ডার

@ মার্টিনব্যাটনার নীতিগতভাবে হ্যাঁ অ্যালগোরিদম এটি করতে পারে তবে ডিসপ্লেটি এটিকে নীচে নামিয়ে দেয় (যেমন অন্যান্য সমাধানগুলির ক্ষেত্রে সমস্যা হওয়ার সম্ভাবনা রয়েছে)) আমি প্রোগ্রামের মন্তব্যে ইঙ্গিত দিয়েছি যে প্রতিটি অঞ্চল স্ক্রোল শুরু হওয়ার আগেই 7 সংখ্যায় সীমাবদ্ধ রয়েছে ( সংখ্যাগুলি একটি উল্লম্ব কলামে রয়েছে বলে আমি ভেবেছিলাম যে মোড়ানো মোড়ানো ভয়ঙ্কর দেখাবে)) আমি যে এমুলেটরটি ব্যবহার করছি তা উচ্চতর পর্দার রেজোলিউশনগুলি পরিচালনা করতে পারে তবে আমি একটি "খাঁটি" বিবিসি মাইক্রো স্ক্রিন মোডের পক্ষে চলেছি যা বেশ সীমিত। যদি কেউ জাভাতে এটি বন্দর করে তবে একমাত্র ব্যবহারিক সীমা হ'ল ডায়াগ্রামটি পড়ার মানবিক ক্ষমতা।
স্তর নদী সেন্ট

হ্যাঁ, আমি কেবল ভাবছিলাম যে চেনাশোনাগুলি ইনপুট আকারের সাথে খাপ খাইয়ে নেবে ... অবশ্যই যদি আপনার টার্মিনালটি লাইনগুলিকে আবৃত করে রাখে তবে আমার সমাধানটি বড় ইনপুটগুলির জন্যও অপঠনযোগ্য হবে তবে যতক্ষণ এটি স্ক্রোলবারগুলির সাথে প্রদর্শিত হয় ততক্ষণ এটি কোনও ইনপুট পরিচালনা করতে পারে আকার।
মার্টিন ইন্ডার

2
এমনকি এটি জাভাতে পোর্ট করা থাকলেও আপনাকে আরও পাঠ্যের জন্য চেনাশোনাগুলি আরও বড় করার জন্য কোড যুক্ত করতে হবে
স্পার

14

জাভাস্ক্রিপ্ট 1235

http://jsfiddle.net/44a4L/7/

গুগল ক্রোম ভি 36 তে পরীক্ষিত।

ইনপুটটি ভেরিয়েবলের উপরের, সেট 1, সেট 2 এবং সেট 3 এ নেওয়া হয়।

আপডেট: এখন ইনপুট আকারের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে স্কেলগুলি।

function t(e,t){z.getElementById(e).innerHTML+=" "+t}z=document;s=200+upper*20;z.body.innerHTML+="<style>#m{width:"+s+"px;height:"+s+"px;}div{position:absolute;text-align:center;border-radius:50%;}#s1{left:calc(15% + 15px);top:30px;bottom:30%;right:calc(15% + 15px);background-color:rgba(255,0,0,0.4);padding:10%;}#s2{left:30px;bottom:30px;top:30%;right:30%;background-color:rgba(0,255,0,0.4);padding-right:40%;padding-top:30%;}#s3{right:30px;bottom:30px;top:30%;left:30%;background-color:rgba(0,0,255,0.4);padding-left:40%;padding-top:30%;}#s123{left:40%;top:40%;right:40%;bottom:40%;}#s12{left:20%;top:35%;right:65%;bottom:50%;}#s13{right:20%;top:35%;left:65%;bottom:50%;}#s23{left:40%;right:40%;bottom:15%;top:70%;}</style><div id=m><div id=s1 class=s></div><div id=s2 class=s></div><div id=s3 class=s></div><div id=s123 class=v></div><div id=s12 class=v></div><div id=s13 class=v></div><div id=s23 class=v></div></div>";for(i=0;i<=upper;i++){i1=i2=i3=false;if(set1.indexOf(i)!=-1)i1=true;if(set2.indexOf(i)!=-1)i2=true;if(set3.indexOf(i)!=-1)i3=true;if(i1&&i2&&i3)t("s123",i);else if(i1&&i2)t("s12",i);else if(i1&&i3)t("s13",i);else if(i2&&i3)t("s23",i);else if(i1)t("s1",i);else if(i2)t("s2",i);else if(i3)t("s3",i);else t("m",i)}

নমুনা আউটপুট:

ভেন


বেশ সুন্দর! আমি এটিকে কিছুটা শক্ত করে চেপে ধরতে পেরেছি , jsfiddle.net/44a4L/2 দেখুন - "টি" ফাংশন, সিএসএস এবং বডিআইএনএইচটিএমএল দেখুন। যদিও একই যুক্তি। আমি নিশ্চিত যে এটি এখনও নিচু হতে পারে।
Nenotlep

এটি এখন পর্যন্ত সর্বাধিক সুন্দর এটি খুব খারাপ যে এটি ভালভাবে মাপেনি। অন্তঃস্থল অঞ্চলের ভিতরে তিনটি উপাদান এটি ভাঙ্গা করে তোলে। আপনি কি এটি কোনওভাবে স্কেল করার পরিকল্পনা করছেন?
উইলিয়াম বারবোসা


2
টকটকে! অত্যাশ্চর্য! দর্শনীয়! (এসই
বংশবৃদ্ধি

4

পাইথন - 603

import re
n,a,b,c=eval(input())
h=set(range(n+1))-a-b-c
g=a&b&c
d,e,f=a&b-g,b&c-g,a&c-g
l,m=set(a),set(b)
a-=b|c
b-=l|c
c-=l|m
for t in'abcdefgh':exec("%s=' '.join(map(str,%s))"%(2*(t,)))
l=len
x,y,z=max(l(a),l(f)+2,3),l(max(d,g)),max(l(b),l(e)+2,l(c)-l(f+g)-2,3)
j=[0]*4
for t in'abcdefg':exec("%s=%s.ljust([x,z,x+y+z-2,y,z-2,x-2,y][ord('%s')-97])+'|'"%(3*(t,)))
s='\d| '
w=re.sub
for r in (1,3):q=r//2;j[r]=['','| '][q]+'|'+[a+d+b,f+g+e][q]+['',' |'][q];j[r-1]=w('\|','+',w(s,'-',j[r]))
j[0]+=h
o=j[2]
j[2]='| +'+j[2][3:-3]+'+ |'
p='  |'+c
q='  '+w('\|','+',w(s,'-',p))[2:]
for l in j+[o,p,q]:print(l)

ইনপুটটি তিনটি সেট অনুসারে এন হয়, কমা দ্বারা বিভক্ত (যেমন 8, {1,2,4}, {2,3,4,5}, {4,6,8})। এটি ACSII আর্টের একটি সেট নিম্নলিখিত ফলাফলগুলির মতো করে:

+---+-+---+0 7
|1  | |3 5|
| +-+-+-+ |
| |2|4| | |
+-+-+-+-+-+
  |6 8  |
  +-----+

হাহাহা, 5 মিনিটের মধ্যে প্রায় দুটি প্রায় অভিন্ন সমাধান। (চ্যালেঞ্জ পোস্ট হওয়ার 3 ঘন্টা পরে ...)
মার্টিন এন্ডার

1
দয়া করে নোট নম্বর to দেখুন Your আপনার প্রান্তগুলি এবং ক্রসিং সীমানাগুলি আলাদা অক্ষর যেমন "+" হওয়া দরকার।
উইলিয়াম বারবোসা

4

এইচটিএমএল + জাভাস্ক্রিপ্ট (E6) 752 761

ইনপুট ফর্ম্যাট: সর্বাধিক সেট 1 সেট 2 সেট 3 (প্রতিটি সেট সংখ্যার কমা দ্বারা পৃথক করা তালিকা)

উদাহরণ: 10 1,2,3,4,5,9 1,2,3,6,8 7,2,9

স্ক্রিনশট

উদাহরণ 2: 30 2,4,6,8,10,12,14,16,18,30 3,6,9,12,15,18,21,30 5,10,15,20,25,30

ক্রোম স্ক্রিনশট

সমস্ত বিভাগটি স্বয়ংক্রিয় আকারের এইচটিএমএল রেন্ডারিংয়ের জন্য ধন্যবাদ।

<html><body><script>
i=prompt().split(' ');
r=",,,,,,,, class=',></i>".split(c=',')
for (j=-1;j++<i[0];r[h]+=j+' ')for(h=k=0;++k<4;)if((c+i[k]+c).search(c+j+c)+1)h+=k+(k>2);
document.write(
"<style>div{1row}p{position:relative;text-align:center;padding:7;1cell}i{position:absolute;top:0;3:0;4:0;left:0}.a{2top-left5b{2top-45c{23-left5d{23-45x{6880,9.y{680,89.z{60,889</style>"
.replace(/\d/g,x=>'09display:table-9border-9bottom9right9-radius:60px}.9background:rgba(930px9255,9.3)}'.split(9)[x])
+"<div><p8x a'/><p8x'>1</p><p><i8y a'9<i8x b'93</p><p8y'>2</p><p8y b'/></div><div><p8x c'/><p8z a'><i8x'95</p><p8z'><i8x d'9<i8y c'97</p><p8z b'><i8y'96</p><p8y d'/></div><div><p/><p8z c'/><p8z'>4</p><p8z d'/></div>0"
.replace(/\d/g,x=>r[x]))
</script></body></html>

জাভাস্ক্রিপ্ট E5 সংস্করণ Chrome এবং MSIE 10 এ কাজ করে (সম্ভবত 9)

<html><body><script>
i=prompt().split(' ');
r=",,,,,,,, class=',></i>".split(c=',')
for (j=-1;j++<i[0];r[h]+=j+' ')for(h=k=0;++k<4;)if((c+i[k]+c).search(c+j+c)+1)h+=k+(k>2);
document.write(
"<style>div{1row}p{position:relative;text-align:center;padding:7;1cell}i{position:absolute;top:0;3:0;4:0;left:0}.a{2top-left5b{2top-45c{23-left5d{23-45x{6880,9.y{680,89.z{60,889</style>"
.replace(/\d/g,function(x){return '09display:table-9border-9bottom9right9-radius:60px}.9background:rgba(930px9255,9.3)}'.split(9)[x]})
+"<div><p8x a'/><p8x'>1</p><p><i8y a'9<i8x b'93</p><p8y'>2</p><p8y b'/></div><div><p8x c'/><p8z a'><i8x'95</p><p8z'><i8x d'9<i8y c'97</p><p8z b'><i8y'96</p><p8y d'/></div><div><p/><p8z c'/><p8z'>4</p><p8z d'/></div>0"
.replace(/\d/g,function(x){return r[x]}))
</script></body></html>

না (তাই) গল্ফ

<html>
<style>
div {   display:table-row; }
p {
    position: relative;
    text-align: center;
    padding: 30px;
    display: table-cell;
}
i {
    position: absolute;
    top:0;bottom:0;right:0;left:0;
}
.a { border-top-left-radius: 60px; }
.b { border-top-right-radius: 60px; }
.c { border-bottom-left-radius: 60px; }
.d { border-bottom-right-radius: 60px; }
.x { background: rgba(255,255,0,.3) }
.y { background: rgba(255,0,255,.3) }
.z { background: rgba(0,255,255,.3) }
</style>
<body>
<div>
<p class='x a'/><p class='x'><b id='b1'></b></p><p><i class='y a'></i><i class='x b'></i><b id='b3'></b></p><p class='y'><b id='b2'></b></p><p class='y b'/>
</div>    
<div>
<p class='x c'/><p class='z a'><i class='x'></i><b id='b5'></b></p><p class='z'><i class='x d'></i><i class='y c'></i><b id='b7'></b></p><p class='z b'><i class='y'></i><b id='b6'></b></p><p class='y d'/>
</div>        
<div>
<p/><p class='z c'/><p class='z'><b id='b4'></b></p><p class='z d'/>
</div>    
<b id='b0'></b>    
<script>
i=prompt().split(' ')
r=',,,,,,,'.split(c=',')
for (j=-1; j++<i[0];)
{
    for(h = k = 0; ++k < 4;)
    {
    if( (c+i[k]+c).search(c+j+c) >= 0)
      h += k + (k>2); // bit mask 1 or 2 or 4
  }
  r[h] += j + ' ';
}        
for (j = 0; j < 8; j++)
    document.getElementById('b'+j).innerHTML=r[j]
</script>
</html>

3

পাইথন 3 - 353

# 353 bytes, input format like: 6 1,2,3 2,3,4 1,3,4
import sys
from turtle import*
_,n,*q=sys.argv
n=set(range(int(n)))
a,b,c=map(set,map(eval,q))
for x,y in(0,0),(-115,-185),(115,-185):goto(x,y),pd(),circle(200),up()
for x,y,s in(200,331,n-a-b-c),(-101,278,a-b-c),(-254,-49,b-a-c),(95,-49,c-a-b),(-172,164,a&b-c),(58,164,a&c-b),(-49,-39,b&c-a),(-49,52,a&b&c):goto(x,y),write(s or'',font=None)
ht()
done()

ছোটবেলায় আর কেউ লোগো নিয়ে খেলল?

নমুনা: python3 turtletest.py 15 1,2,3,4,5,9,10,12 1,3,4,6,7,9 1,2,7,8,9

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


ইচ্ছামত বড় ইনপুট জন্য ফন্ট / চেনাশোনা স্কেল?
স্পার

না, এখনও সে সম্পর্কে ভাবছি।
জেসন এস

@ জেসনস এখনও চিন্তা করছেন?
জোনাথন ফ্রেচ 21

3

perl 388b 346b 488b

এটিতে অন্য প্রবেশের মতোই আউটপুট রয়েছে:

@a=split($",<>);
$n=pop @a;
@a=map[split(',')],@a;
for$i(0..2){$b{$_}+=1<<$i foreach@{$a[$i]}}
push@{$c[$b{$_}]},$_ for(0..$n);
$l|=length($d[$_]=join($",@{$c[$_]}))for(0..$n);
print$h=(("+-"."-"x$l)x3)."+
";
sub j{sprintf"% ".(sprintf"%ds",$l+($_[0]<4)+($_[0]==7)),$d[$_[0]]}
sub r{join('|',map{j($_)}@_)}
$h=~s/\+-/|+/;
$h=~s/-\+$/+|/;
print "|".r(1,3,2)."|
".$h;
$h=~s/[|+]{2}/++/g;
print "||".r(5,7,6)."||
".$h;
$h=~s/\+\+/ +/;
$h=~s/\+\+/+ /;
$h=~s/-\+-/---/g;
$l=$l*3+3;print " |".j(4)."|
",$h,$d[0]

পরীক্ষা চালানো এবং আউটপুট:

# echo "1,2,3,7,13 2,3,8,11,13,6,9 3,4,5,11,12,13,14 15" | perl venn.pl ;echo
+----------------+----------------+----------------+
|             1 7|               2|           6 8 9|
|+---------------+----------------+---------------+|
||               |            3 13|             11||
++---------------+----------------+---------------++
 |                                       4 5 12 14|
 +------------------------------------------------+ 

হুম, আমি নিশ্চিত না যে আপনি যদি ইনপুটটি না দেখে থাকেন তবে লেআউটটি সত্যই দ্ব্যর্থহীন।
মার্টিন ইন্ডার

আপনি ঠিক বলেছেন, এটি যথেষ্ট ভেন-ওয়াই নয়
উইলিয়াম বার্বোসা

@ উইলিয়াম বারবোসা ঠিক আছে, আমি এটিকে ফৌবিগুয়ের প্রবেশের মতো দেখিয়েছি
স্পার

2

টি এসকিউএল 2095

ধরে নেওয়া যাক @ এন হ'ল এন অন্তর্ভুক্ত যা অনুমান @ এ, @ বি, এবং @ সি তিনটি সংখ্যার সমন্বিত টেবিল। এটি খুব বেশি গল্ফ করার চেষ্টা করেনি।

DECLARE @D INT=@N,@E INT=0,@F CHAR='/',@G CHAR='\',@H CHAR='-',@I CHAR='|',@J CHAR='+'DECLARE @ TABLE(Z INT,Y INT,X INT,W INT,V INT,U INT,T INT,S INT)INSERT INTO @(Z)SELECT A.P FROM @A A JOIN @B B ON A.P=B.P JOIN @C C ON A.P=C.P INSERT INTO @(Y)SELECT A.P FROM @A A JOIN @B B ON A.P=B.P LEFT JOIN @C C ON A.P=C.P WHERE C.P IS NULL INSERT INTO @(X)SELECT C.P FROM @C C JOIN @A A ON C.P=A.P LEFT JOIN @B B ON C.P=B.P WHERE B.P IS NULL INSERT INTO @(W)SELECT B.P FROM @B B JOIN @C C ON B.P=C.P LEFT JOIN @A A ON B.P=A.P WHERE A.P IS NULL INSERT INTO @(V)SELECT A.P FROM @A A LEFT JOIN @B B ON A.P=B.P LEFT JOIN @C C ON A.P=C.P WHERE C.P IS NULL AND B.P IS NULL INSERT INTO @(U)SELECT C.P FROM @C C LEFT JOIN @A A ON C.P=A.P LEFT JOIN @B B ON C.P=B.P WHERE B.P IS NULL AND A.P IS NULL INSERT INTO @(T)SELECT B.P FROM @B B LEFT JOIN @C C ON B.P=C.P LEFT JOIN @A A ON B.P=A.P WHERE A.P IS NULL AND C.P IS NULL WHILE @N>=0BEGIN INSERT INTO @(S)SELECT @N WHERE @N NOT IN(SELECT*FROM @A UNION SELECT*FROM @B UNION SELECT*FROM @C)SET @N-=1 END DECLARE @Z TABLE(A CHAR(5),B CHAR(5),C CHAR(5),D CHAR(5),E CHAR(5),F CHAR(5),G CHAR(5),H CHAR(5))INSERT INTO @Z SELECT @F,@H,@F,@H,@G,@H,@G,''WHILE @E<=@D BEGIN INSERT INTO @Z SELECT @I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT V FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT X FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT U FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT S FROM @)),'')SET @E+=1 END INSERT INTO @Z SELECT @F,@H,@J,@H,@G,'',@I,''SET @E=0WHILE @E<=@D BEGIN INSERT INTO @Z SELECT @I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT Y FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT Z FROM @)),''),@I,'',@I,''SET @E+=1 END INSERT INTO @Z SELECT @G,@H,@J,@H,@F,'',@I,''SET @E=0WHILE @E<=@D BEGIN INSERT INTO @Z SELECT @I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT T FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT W FROM @)),''),@I,'',@I,''SET @E+=1 END INSERT INTO @Z SELECT @G,@H,@G,@H,@F,@H,@F,''SELECT*FROM @Z

কম গল্ফ সংস্করণ:

--finding the sets
DECLARE @D INT=@N,@E INT=0,@F CHAR='/',@G CHAR='\',@H CHAR='-',@I CHAR='|',@J CHAR='+'
DECLARE @ TABLE(Z INT,Y INT,X INT,W INT,V INT,U INT,T INT,S INT)
INSERT INTO @(Z)
SELECT A.P FROM @A A JOIN @B B ON A.P=B.P JOIN @C C ON A.P=C.P 
INSERT INTO @(Y)
SELECT A.P FROM @A A JOIN @B B ON A.P=B.P LEFT JOIN @C C ON A.P=C.P WHERE C.P IS NULL 
INSERT INTO @(X)
SELECT C.P FROM @C C JOIN @A A ON C.P=A.P LEFT JOIN @B B ON C.P=B.P WHERE B.P IS NULL 
INSERT INTO @(W)
SELECT B.P FROM @B B JOIN @C C ON B.P=C.P LEFT JOIN @A A ON B.P=A.P WHERE A.P IS NULL 
INSERT INTO @(V)
SELECT A.P FROM @A A LEFT JOIN @B B ON A.P=B.P LEFT JOIN @C C ON A.P=C.P WHERE C.P IS NULL AND B.P IS NULL 
INSERT INTO @(U)
SELECT C.P FROM @C C LEFT JOIN @A A ON C.P=A.P LEFT JOIN @B B ON C.P=B.P WHERE B.P IS NULL AND A.P IS NULL 
INSERT INTO @(T)
SELECT B.P FROM @B B LEFT JOIN @C C ON B.P=C.P LEFT JOIN @A A ON B.P=A.P WHERE A.P IS NULL AND C.P IS NULL 
WHILE @N>=0
BEGIN 
    INSERT INTO @(S)
    SELECT @N WHERE @N NOT IN(SELECT*FROM @A UNION SELECT*FROM @B UNION SELECT*FROM @C)
    SET @N-=1 
END

--displaying the venn diagram
DECLARE @Z TABLE(A CHAR(5),B CHAR(5),C CHAR(5),D CHAR(5),E CHAR(5),F CHAR(5),G CHAR(5),H CHAR(5))
INSERT INTO @Z 
SELECT @F,@H,@F,@H,@G,@H,@G,''
WHILE @E<=@D 
BEGIN 
    INSERT INTO @Z 
    SELECT @I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT V FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT X FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT U FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT S FROM @)),'')
    SET @E+=1 
END 
INSERT INTO @Z 
SELECT @F,@H,@J,@H,@G,'',@I,''
SET @E=0
WHILE @E<=@D 
BEGIN 
    INSERT INTO @Z 
    SELECT @I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT Y FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT Z FROM @)),''),@I,'',@I,''
    SET @E+=1 
END 
INSERT INTO @Z 
SELECT @G,@H,@J,@H,@F,'',@I,''
SET @E=0
WHILE @E<=@D 
BEGIN 
    INSERT INTO @Z 
    SELECT @I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT T FROM @)),''),@I,ISNULL((SELECT CONVERT(CHAR,@E,5) WHERE @E IN(SELECT W FROM @)),''),@I,'',@I,''
    SET @E+=1 
END 
INSERT INTO @Z 
SELECT @G,@H,@G,@H,@F,@H,@F,''
SELECT*FROM @Z
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.