বহুভুজের গর্তের সংখ্যা


11

সমস্যা : সংযুক্ত বহুভুজের গর্তের সংখ্যা গণনা করুন। বহুভুজটির সংযোগটি এই শর্ত দ্বারা গ্যারান্টিযুক্ত যে ইনপুট ত্রিভুজাকৃতির প্রতিটি ত্রিভুজ অন্য ত্রিভুজটির সাথে কমপক্ষে 1 টি ভাগ করে এবং ত্রিভুজগুলির মধ্যে কেবল একটি সংযুক্ত সেট রয়েছে।

ইনপুট একটি তালিকা রয়েছে Lএর nসমতলে পয়েন্ট এবং একটি তালিকা Tথেকে এন্ট্রি সঙ্গে 3-tuples এর 0...n-1Tটিউলের প্রতিটি আইটেমের জন্য ত্রিভুজের একটি ত্রিভুজের (t_1,t_2,t_3)তিনটি শীর্ষ কোণ (তালিকা থেকে L) উপস্থাপন করা হয়। দ্রষ্টব্য যে এটি 'বহুভুজ ত্রিভুজান' অর্থে একটি ত্রিভুজযন্ত্র , কারণ এর Tফলে ওভারল্যাপে কখনও দুটি ত্রিভুজ থাকবে না । একটি অতিরিক্ত শর্ত হ'ল আপনাকে ইনপুটটি স্যানিটাইজ করতে হবে না Lএবং Tকোনও পুনরাবৃত্তি থাকবে না।

উদাহরণ 1 : যদি L = {{0,0},{1,0},{0,1},{1,2}}এবং T = {{0,1,2},{1,2,3}}তারপরে নির্দিষ্ট বহুভুজের 0 টির একটি গর্ত গণনা থাকে।

চিত্র 1

উদাহরণ 2 : যদি L = {{0,0},{1,0},{2,0},{2,1},{2,2},{1,2},{0,2},{0,1},{.5,.5},{1.5,.5},{1.5,1.5},{.5,1.5}}এবং T = {{5,6,11},{5,10,11},{4,5,10},{3,8,10},{2,3,9},{2,8,9},{1,2,8},{0,1,8},{0,8,11},{0,7,11},{6,7,11},{3,4,10}}তারপরে বহুভুজ ইনপুটটির ফলাফল 2 হয় output

চিত্র ২

কাজটি হ'ল সংক্ষিপ্ততম প্রোগ্রাম (বা ফাংশন) লিখুন যা ইনপুট হিসাবে গ্রহণ করে Lএবং Tগর্তের সংখ্যা প্রদান করে। 'বিজয়ী' ন্যূনতম অক্ষর গণনা (অস্থায়ী শেষ তারিখ 1 জুন) সহ এন্ট্রি হিসাবে স্বীকৃত হবে।

নমুনা ইনপুট ফর্ম্যাটিং (0 সূচকে নোট করুন):

0,0
1,0
0,1
1,2
0,1,2
1,2,3    

1
"বহুভুজটির সংযোগটি এই শর্ত দ্বারা গ্যারান্টিযুক্ত যে ইনপুট ত্রিভুজাকৃতির প্রতিটি ত্রিভুজ অন্য ত্রিভুজটির সাথে কমপক্ষে 1 টি ভাগ করে দেয়।" - না এটি পর্যাপ্ত শর্ত নয়। উদাহরণস্বরূপ, নিন T=1,2,3/1,2,4/5,6,7/5,6,8। প্রতিটি ত্রিভুজটি অন্য ত্রিভুজটির সাথে একটি কিনারা ভাগ করে, তবে ত্রিভুজটি সংযোগ বিচ্ছিন্ন হয়ে যায়
জন ডিভোরাক

আমরা কি ধরে নিতে পারি যে ইনপুটটি বৈধ আংশিক ত্রিভুজানকে উপস্থাপন করে (কোনও দুটি ত্রিভুজ ওভারল্যাপ হয় না এবং কোনও ত্রিভুজ দু'বার উপস্থিত থাকে না) এবং ত্রিভুজ সংযুক্ত থাকে?
জন ডিভোরাক


আমরা কি ধরে নিতে পারি যে ইনপুটটি এই অর্থে প্রান্ত-সংযুক্ত আছে এটির সংযোগটি সংযোগ বিহীন রেন্ডার করার জন্য পয়েন্টের একটি সীমাবদ্ধ সেট অপসারণ করা সম্ভব নয়? (উদাঃ: T=1,2,3/1,4,5সংযুক্ত কিন্তু প্রান্ত-সংযুক্ত নয়)
জন ডিভোরাক

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

উত্তর:


5

গল্ফস্ক্রিপ্ট (২৩ টি অক্ষর)

~.{2*2/~}%{$}%.&,@@+,-)

গল্ফস্ক্রিপ্ট অ্যারে সংকেত এবং উদ্ধৃত (বা ইন্টিগ্রাল) স্থানাঙ্কগুলি ব্যবহার করে ইনপুট ফর্ম্যাট ধরে। যেমন

$ golfscript codegolf11738.gs <<<END
[["0" "0"] ["1" "0"] ["2" "0"] ["2" "1"] ["2" "2"] ["1" "2"] ["0" "2"] ["0" "1"] [".5" ".5"] ["1.5" ".5"] ["1.5" "1.5"] [".5" "1.5"]] [[5 6 11] [5 10 11] [4 5 10] [3 8 10] [2 3 9] [2 8 9] [1 2 8] [0 1 8] [0 8 11] [0 7 11] [6 7 11] [3 4 10]]
END
2

(অনলাইন সমতুল্য )

অথবা

$ golfscript codegolf11738.gs <<<END
[[0 0] [1 0] [0 1] [1 2]] [[0 1 2] [1 2 3]]
END
0

( অনলাইন সমতুল্য )


5

পাইথন, 71

নিম্নলিখিতটি একটি প্রোগ্রাম (কোনও ফাংশন নয় ) যা পছন্দসই সংখ্যা গণনা করে।

len(set().union(*(map(frozenset,zip(t,t[1:]+t))for t in T)))-len(L+T)+1

ব্যবহারের উদাহরণ:

>>> L = ((0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,1),(.5,.5),(1.5,.5),(1.5,1.5),(.5,1.5))
>>> T = ((5,6,11),(5,10,11),(4,5,10),(3,8,10),(2,3,9),(2,8,9),(1,2,8),(0,1,8),(0,8,11),(0,7,11),(6,7,11),(3,4,10))
>>> len(set().union(*(map(frozenset,zip(t,t[1:]+t))for t in T)))-len(L+T)+1
2

স্প্ল্যাট ব্যবহারের জন্য, বাছাইয়ের পরিবর্তে হিমশীতল ব্যবহারের জন্য +1, জিপ (এটি আমি আগে কখনও ব্যবহার করেছি তা বলতে পারি না, নিজের পরিচিত হওয়া দরকার))
কেয়া

3

এপিএল, 36

{1+(⍴⊃∪/{{⍵[⍋⍵]}¨,/3 2⍴⍵,⍵}¨⍵)-⍴⍺,⍵}

ফাংশনটি Lতার বাম আর্গুমেন্ট হিসাবে গ্রহণ করে এবংT তার ডান হিসাবে গ্রহণ করে।

উদাহরণ স্বরূপ:

      L←(0 0)(1 0)(0 1)(1 2)
      T←(0 1 2)(1 2 3)
      L{1+(⍴⊃∪/{{⍵[⍋⍵]}¨,/3 2⍴⍵,⍵}¨⍵)-⍴⍺,⍵}T
0
      L←(0 0)(1 0)(2 0)(2 1)(2 2)(1 2)(0 2)(0 1)(.5 .5)(1.5 .5)(1.5 1.5)(.5 1.5)
      T←(5 6 11)(5 10 11)(4 5 10)(3 8 10)(2 3 9)(2 8 9)(1 2 8)(0 1 8)(0 8 11)(0 7 11)(6 7 11)(3 4 10)
      L{1+(⍴⊃∪/{{⍵[⍋⍵]}¨,/3 2⍴⍵,⍵}¨⍵)-⍴⍺,⍵}T
2

ব্যাখ্যা, ডান থেকে বামে চলছে:

  • ⍴⍺,⍵ দুটি ইনপুট ভেক্টরকে সম্মতি জানায় এবং তাদের দৈর্ঘ্য ফেরত দেয় (V + F )
  • পরবর্তী ব্লকের ভিতরে পদক্ষেপ:
    • ¨⍵ ডান আর্গুমেন্টের প্রতিটি উপাদানকে বামে ফাংশন প্রয়োগ করে ফলাফলটি প্রদান করে
    • ⍵,⍵ সঠিক যুক্তি নিজেই দিয়ে জমা দেয়
    • 3 2⍴ভেক্টর যুক্তিটিকে তিনটি জোড়ায় রূপ দেয়। এক্ষেত্রে এটি প্রথম এবং দ্বিতীয়, তৃতীয় এবং প্রথম এবং ভেক্টরের দ্বিতীয় এবং তৃতীয় আইটেমগুলিকে একসাথে যুক্ত করে।
    • ,/ ভেক্টর যুক্তি একসাথে যোগদান
    • ⍵[⍋⍵] সঠিক যুক্তি বাছাই
    • ∪/ কোনও সদৃশ ফিল্টার
    • ⍴⊃ নেস্টেড স্কেলারটিকে ভেক্টরে পরিণত করে এবং এটির দৈর্ঘ্য ফিরে আসে।
    • পুরো ফাংশনটি আকৃতির প্রান্তগুলির সংখ্যা প্রদান করে ( E)
  • 1 স্ব-ব্যাখ্যামূলক (আশা করি ...)

পুরো ফাংশন তারপরে ফিরে আসে 1+E-(V+F), বা 1-(F+V-E)


বেশ আমার গল্ফস্ক্রিপ্ট সমাধানটি ঠিক ঠিক কী করে। আমি অবাক হয়েছি এটি গল্ফস্ক্রিপ্টের চেয়ে অনেক বেশি দীর্ঘ।
পিটার টেলর

@ পিটারটেলর আমি অবাক হয়েছি যে আপনার গল্ফস্ক্রিপ্ট সমাধানটি এত ছোট ছিল! (কিন্তু তারপর আবার, এটা হয় GolfScript)
উদ্বায়ীতামূলক

2

গণিত, 93 (এখনও খুব গল্ফ হয় না)

f[l_, t_] :=  Max@MorphologicalComponents[Erosion[Graphics[
                                                        GraphicsComplex[l, Polygon[t + 1]]], 1]] - 1

(স্পষ্টতার জন্য স্পেস যুক্ত করা হয়েছে)

পরীক্ষামূলক:

f[{{0, 0}, {1, 0}, {0, 1}, {1, 2}}, {{0, 1, 2}, {1, 2, 3}}]
(*
 -> 0
*)

{l, t} = {{{0, 0}, {1,   0}, {2,    0}, {2,     1}, {2,    2}, {1, 2}, {0, 2}, 
           {0, 1}, {.5, .5}, {1.5, .5}, {1.5, 1.5}, {.5, 1.5}}, 

           {{5, 6, 11}, {5, 10, 11}, {4, 5, 10}, {3, 8, 10}, {2, 3,  9}, 
            {2, 8,  9}, {1,  2,  8}, {0, 1,  8}, {0, 8, 11}, {0, 7, 11}, {6, 7, 11}, {3, 4, 10}}};
f[l, t]
 (*
  -> 2
 *)

এটি কি নির্দিষ্ট ন্যূনতম আকারের (তর্ক করার Erosion) ত্রিভুজ বা গর্তের উপর নির্ভর করে না ?
জন ডিভোরাক

@ জ্যানডভোরাক সম্ভবত আমি ভুল, কিন্তু আমি মনে করি যে আপনি যদি অসীম নির্ভুল গাণিতিক ব্যবহার না করেন তবে কোনও সমাধান আপনি কোনও সর্বনিম্ন আকারে না পৌঁছা পর্যন্ত কার্যকর হবে (তিনটি পয়েন্ট বিন্যাস করা হয়েছে কি না আপনাকে সিদ্ধান্ত নিতে হবে)। এই ঠিক সমাধানের মধ্যে সমস্যাটি স্পষ্টভাবে বলা আছে।
ড। বেলিসারিয়াস

আপনি যদি টপোলজিকাল পদ্ধতির ব্যবহার করেন তবে আপনার দরকার নেই। যদি তিনটি পয়েন্ট কলিনারি থাকে তবে আপনার সেখানে একটি শূন্য-অঞ্চল ত্রিভুজ প্রয়োজন - অন্যথায় আপনার একটি গর্ত রয়েছে।
জন ডিভোরাক

@belisarius। আমাদের ফলাফলগুলির মধ্যে পার্থক্য সম্পর্কে আমি ওল্ফ্রাম টেকনিক্যাল সাপোর্ট থেকে উত্তর পেয়েছি: "হ্যালো - আপনার ইমেলের জন্য আপনাকে ধন্যবাদ। আমি নিশ্চিত করেছি যে আপনার কোডটি ম্যাক এবং উইন্ডোজে বিভিন্ন ফলাফল দেয়। আমি মনে করি না যে এটি উদ্দেশ্যমূলক আচরণ, তাই তাই আমি এই বিষয়টি নিয়ে আমাদের বিকাশকারীদের কাছে একটি প্রতিবেদন দায়ের করেছি thisআমার এই বিকাশকারীদের কাছ থেকে আমি এই বিষয়ে দরকারী যে কোনও তথ্য পেয়েছি তা অবশ্যই নিশ্চিত করব you আপনার আরও কোনও প্রশ্ন থাকলে দয়া করে আমাকে জানান দয়া করে ... প্রযুক্তিগত সহায়তা ওল্ফ্রাম গবেষণা , ইনক। "
ডেভিডসি

@ ডেভিডকারারহর "হ্যাঁ, আমার আরও প্রশ্ন রয়েছে: আপনি কি প্রতিটি বাগের জন্য আমাকে একটি চেক প্রেরণ করবেন?"
ড। বেলিসারিয়াস

2

রুবি, 239 টি অক্ষর (227 শরীর)

def f t
e=t.flat_map{|x|x.permutation(2).to_a}.group_by{|x|x}.select{|_,x|x.one?}.keys
n=Hash[e]
(u,n=n,n.dup;e.map{|x|a,b=*x;n[a]=n[n[a]]=n[b]})until n==u
n.values.uniq.size+e.group_by(&:last).map{|_,x|x.size}.reduce(-1){|x,y|x+y/2-1}
end

মনে রাখবেন যে আমি কেবল টপোলজি বিবেচনা করছি। আমি কোনওভাবেই ভারটেক্স অবস্থানগুলি ব্যবহার করছি না।

কলার (ম্যাথমেটিকা ​​বা জেএসএন ফর্ম্যাটে টি আশা করে):

input = gets.chomp
input.gsub! "{", "["
input.gsub! "}", "]"
f eval(input)

টেস্ট:

f [[0,1,2],[1,2,3]]
#=> 0
f [[5, 6, 11], [5, 10, 11], [4, 5, 10], [3, 8, 10], [2, 3, 9], [2, 8, 9], [1, 2, 8], [0, 1, 8], [0, 8, 11], [0, 7, 11], [6, 7, 11], [3, 4, 10]]
#=> 2
f [[1,2,3],[3,4,5],[5,6,1],[2,3,4],[4,5,6],[6,1,2]]
#=> 1

হ্যাঁ, একটি euler চরিত্রগত পদ্ধতির। অজগরেই আমি এটি করেছিলাম।
কেয়া

2
@Kaya। (কলম্বাসের ডিম দেখুন en.wikedia.org/wiki/Egg_of_ কলম্বাস ) কেউ একবার আপনার প্রশ্নের একটি ইউরোলিয়ান উত্তর দিলে, অন্যরা অনুসরণ করবে এমন সম্ভাবনা অনেক বেড়ে যায়। আমি আপনাকে আশ্বস্ত করতে পারি যে এটির নিজের থেকে দৃষ্টিভঙ্গি আবিষ্কার করা আরও চ্যালেঞ্জিং এবং সন্তুষ্টিকর, তারপরেই পলিহেডারের সাথে ইউলারের কাজের সংযোগ স্থাপন করে।
ডেভিডসি

2

গণিত 76 73 72 67 62

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

গ্রাফটিতে দুটি ধরণের অভ্যন্তরীণ "ত্রিভুজ" ছিল: সেগুলি সম্ভবত সেখানে একটি মুখ ছিল, অর্থাত্ একটি "ভরা" ত্রিভুজ এবং যেখানে ছিল না তারা। অভ্যন্তরীণ মুখগুলির সংখ্যার প্রান্ত বা শীর্ষেগুলির কোনও সম্পর্ক ছিল না। এর অর্থ হ'ল পুরো "ভরাট" গ্রাফগুলিতে পোকার ছিদ্র কেবল মুখের সংখ্যা হ্রাস করেছে। আমি ত্রিভুজগুলির মধ্যে ভিন্নতার সাথে নিয়মিতভাবে খেলেছি, মুখগুলি, শীর্ষগুলি এবং প্রান্তগুলি লক্ষ্য রাখছি। অবশেষে আমি বুঝতে পেরেছি যে গর্তের সংখ্যা সর্বদা 1 - # পৃষ্ঠাসমূহ - # শীর্ষে + # টিপদের সমান। এটি 1 মাইনাস ইউলারের বৈশিষ্ট্য হিসাবে প্রমাণিত হয়েছিল (যা আমি কেবল নিয়মিত পলিহেড্রার প্রসঙ্গেই জানতাম (যদিও প্রান্তগুলির দৈর্ঘ্য স্পষ্টভাবে কোনও গুরুত্বের ছিল না।

শীর্ষে এবং ত্রিভুজগুলি ইনপুট হলে নীচের ফাংশনটি গর্তের সংখ্যা প্রদান করে। আমার পূর্ববর্তী জমা দেওয়ার মতো নয় এটি কোনও চিত্রের স্ক্যানের উপর নির্ভর করে না। আপনি এটিকে 1 - ইউলারের বৈশিষ্ট্য হিসাবে অর্থাৎ 1 - (F + V -E) হিসাবে ভাবতে পারেন যেখানে = # Fপৃষ্ঠাগুলি, V= # শীর্ষ, E= # কিনারা। ফাংশনটি গর্তের সংখ্যা প্রদান করে,1 - (F + V -E) প্রকৃত মুখগুলি (ত্রিভুজ) এবং শীর্ষকে প্রদত্ত প্রদান করে।

এটি সহজেই দেখানো যেতে পারে যে কমপ্লেক্সের বাইরের কোনও ত্রিভুজ অপসারণের ফলে ইউরারের বৈশিষ্ট্যটির উপর কোনও প্রভাব নেই, এটি অন্য ত্রিভুজগুলির সাথে এক বা 2 টি ভাগ করে না কেন।

দ্রষ্টব্য: নিম্নের ক্ষেত্রে vএর স্থানে ব্যবহৃত হবেL কেসটি মূল গঠনের ; এটিতে এটিতে উল্লম্বগুলি থাকে (ভি হয় না, শীর্ষে সংখ্যা)

fTআসল গঠনের জন্য ব্যবহৃত হয় ; এটি হ'ল এতে ত্রিভুজ রয়েছে যা ভার্টেক্স সূচকগুলির আদেশকৃত ট্রিপল হিসাবে প্রতিনিধিত্ব করে।

কোড

z=Length;1-z@#2-z@#+z[Union@@(Sort/@{#|#2,#2|#3,#3|#}&@@@#2)]&

(জনাব উইজার্ডকে প্রতিস্থাপনের নিয়মটি বাদ দিয়ে 5 টি চর মুণ্ডন করার জন্য ধন্যবাদ।)


উদাহরণ 1

v = {{0, 0}, {1, 0}, {0, 1}, {1, 2}}; f = {{0, 1, 2}, {1, 2, 3}};

z=Length;1-z@#2-z@#+z[Union@@(Sort/@{#|#2,#2|#3,#3|#}&@@@#2)]&[v, f]

0

শূন্য গর্ত।


উদাহরণ 2

v = {{0, 0}, {1, 0}, {2, 0}, {2, 1}, {2, 2}, {1, 2}, {0, 2}, {0, 1 , {.5, .5}, {1.5.,, .5}, {1.5, 1.5}, {.5, 1.5}}; f = {{5, 6, 11}, {5, 10, 11}, {4, 5, 10}, {3, 8, 10}, {2, 3, 9}, {2, 8, 9} , {1, 2, 8}, {0, 1, 8}, {0, 8, 11}, {0, 7, 11}, {6, 7, 11}, {3, 4, 10}};

z=Length;1-z@#2-z@#+z[Union@@(Sort/@{#|#2,#2|#3,#3|#}&@@@#2)]&[v, f]

2

সুতরাং, 2 গর্ত উদাহরণ 2।


আপনি কি মূলত ত্রিভুজাকে ছড়িয়ে দিয়ে সেই চিত্রটিতে গ্রাফিক্স লাইব্রেরি ডাম্পিং করছেন? একটি গর্ত খুব ছোট হলে তা কি ব্যর্থ হয় না?
জন ডিভোরাক

1
আপনার দ্বিতীয় উদাহরণ 0 এখানে ফিরে আসে (এজন্য আমি ব্যবহার করি নি MorphologicalEulerNumber[])। এমএমএ 9.01, উইন এক্সপি।
ডাঃ বেলিসারিয়াস

আমি 9.0.1 ব্যবহার করছি, তবে একটি ম্যাকেও। আপনি কি বলছেন গাণিতিক উইন্ডোতে আমার থেকে আলাদা উত্তর দেয়? যদি তা হয় তবে এটি বাগের মতো শোনাচ্ছে (উইন্ডোজ এক্সপি সংস্করণে)।
ডেভিডসি

@ ডেভিডকারারহর ইয়েপ: i.stack.imgur.com/LKcr1.png
ডাঃ বেলিসারিয়াস

@ জন ডিভোরাক MorphologicalEulerNumberকখনও কখনও একটি চিত্র প্রয়োজন; এটি গ্রাফিক্সের বিষয়টিকে গ্রহণ করতে অস্বীকার করে। এই ক্ষেত্রে, গর্তের আকার এবং রেজোলিউশন সমালোচনামূলক ( কোডগল্ফ.স্ট্যাকেক্সেঞ্জঞ্জ / প্রশ্নগুলি / ৮70০6/২ দেখুন )। তবে এখানে এটি গ্রাফিক্স অবজেক্টের সাথে সরাসরি কাজ করে, যা স্পষ্টভাবে সমস্ত শীর্ষকোষকে ধারণ করে। আমি কল্পনা করেছিলাম (বা আশা করেছি) এটি এমন একটি পদ্ধতির ব্যবহার করবে যা চিত্রের উপর নির্ভর করে না। আমি আশা করি কীভাবে এটি সমস্যাটি সমাধান করার চেষ্টা করেছে knew সম্ভবত ফাংশনটির সোর্স কোডে কিছু স্পেলিংকিং বিষয়গুলি পরিষ্কার করে দেবে।
ডেভিডসি

1

পাইথন, 107

আমি বুঝতে পেরেছিলাম যে জোড়াগুলি সরাসরি from itertools import*নেওয়া টাইপ করার চেয়ে সংক্ষিপ্ত combinations()। তবুও আমি লক্ষ্য করেছি যে আমার সমাধানটি ইনপুট ত্রিভুজাকার মুখগুলির উপর নির্ভর করেছে যার ধারাবাহিক ক্রমে তালিকাভুক্ত রয়েছে। সুতরাং চরিত্র গণনায় লাভগুলি এত বড় নয়।

f=lambda l,t:1-len(l+t)+len(set([tuple(sorted(m))for n in[[i[:2],i[1:],[i[0],i[2]]]for i in t]for m in n]))

পাইথন, 115

এলারের বৈশিষ্ট্যগত পদ্ধতির, এরর্টোলগুলির ক্রিয়াপদটি এড়ানো অসম্ভব বলে মনে হচ্ছে। আমি ভাবছি জোড়ো জোড় তৈরির জন্য আরও সরাসরি কৌশল ব্যবহার করা কি সস্তা হবে?

from itertools import*
f=lambda l,t:1-len(l+t)+len(set([m for n in[list(combinations(i,2)) for i in t]for m in n]))

ব্যবহারের উদাহরণ:

> f([[0,0],[1,0],[0,1],[1,2]],[[0,1,2],[1,2,3]])
> 0
> f([[0,0],[1,0],[2,0],[2,1],[2,2],[1,2],[0,2],[0,1],[.5,.5],[1.5,.5],[1.5,1.5],[.5,1.5]],[[5,6,11],[5,10,11],[4,5,10],[3,8,10],[2,3,9],[2,8,9],[1,2,8],[0,1,8],[0,8,11],[0,7,11],[6,7,11],[3,4,10]])
> 2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.