এএসসিআইআই টপোলজি পিটি 1: আমি কি আপনার উপর নির্ভর করতে পারি?


28

আমার মারাত্মক সমস্যা আছে। আমার কয়েকটি টেক্সট ফাইল রয়েছে যেখানে আমি আমার অত্যন্ত গুরুত্বপূর্ণ নম্বরগুলি রাখি - সমস্ত গুরুত্বপূর্ণ! এবং দ্বিগুণ, এবং ত্রয়ী ..

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

            +--+
            |  |
+---+  +----+  |
|   |  |       |
+---+  +-------+
   ~/two.txt

সহজ এবং নির্ভরযোগ্য: 2 সংখ্যাটির জন্য দুটি এসসিআইআই লুপ রয়েছে দুর্ভাগ্যক্রমে, এই জিনিসগুলি সময়ের সাথে সাথে জড়িয়ে পড়েছে এবং এখন প্রতিটি ফাইলে কত লুপ রয়েছে তা নির্ধারণ করতে আমার খুব কষ্ট হয়। এখানে কয়েকটি উদাহরণ যা আমি হাতে হাতে কাজ করেছি:

এক:

   +---+
   |   |
+--+   |
|      |
+--+   |
   |   |
   |   |
   |   |
+--+   +--+
|         |
+---------+

তিন:

+---------+
| +-----+ |
| | +-+ | |
| | | | | |
| | +-+ | |
| +-----+ |
+---------+

চার:

  +--------------+
  |  +--+  +--+  |
  |  |  |  |  |  |
+-|-----|-----|----+
| |  |  |  |  |  | |
| +--+  +--+  +--+ |
+------------------+

              +------------+
              |            |
        +-----+  +-----+   |
        |        |     |   |
  +-----|-----------+  |   |
  |     |  +--+  |  |  |   |
  +-+   +--|--|--+  +---------+
    |      |  +-+      |   |  |
    +------+    |      |   |  |
                +-------+  |  |
                       ||  |  |
                       |+-----+
                       |   |
                       +---+

পাঁচ:

+--------+  +--------+  +--------+
|        |  |        |  |        |
|     +--|-----+  +--|-----+     |
|     |  |  |  |  |  |  |  |     |
+-----|--+  +-----|--+  +--------+
      |        |  |        |
      +--------+  +--------+

আপনি আমার লুপগুলি গণনা করতে আমাকে সহায়তা করতে পারেন?

এখানে বিধি রয়েছে:

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

আমি আপনাকে গণনা করছি!


'আন্ডার স্ট্র্যান্ড'-এর কোন এক দিক হতে পারে +?
feersum

@ ফেয়ারসাম: না, + এর সাথে সংযুক্ত দুটি প্রান্তটি সর্বদা দৃশ্যমান হবে।
ম্যাট নুনান

1
@ মার্টিন: আমি ভয় করি না। আমার সঞ্চয় স্থানটি একটি প্রিমিয়ামে সত্যই তাই আমি এই সমস্ত অতিরিক্ত স্থানটি ছাড়তে পারি না।
ম্যাট নুনন

আমি মনে করি আপনার পরীক্ষার কেস হিসাবে এটি ( পেস্টবিন ) যুক্ত করা উচিত যতক্ষণ না আমি কিছু অনুপস্থিত এবং এটি বৈধ ইনপুট না। 6 টি লুপ রয়েছে; আমি শুধু SnakeEx সমাধান সঙ্গে অনলাইন জন্য এটি পরীক্ষিত এবং এটি আউটপুট 12.
blutorange

1
সম্ভবত আপনার স্পষ্টভাবে তাদের লুপগুলি নিষিদ্ধ বা অনুমতি দেওয়া উচিত যা নিজেরাই অতিক্রম করে (যেমন পেস্টবিন .com/5RLZuULG) বর্তমানে, তারা রুবি দ্রবণ দ্বারা সনাক্ত করা হয়েছে তবে স্নেকএক্স সমাধান দ্বারা নয়।
ব্লুটোরেঞ্জ

উত্তর:


19

স্নেকএক্স - জাভাস্ক্রিপ্টের সাথে 98 বাইট, 44 ছাড়াই

পাক্ষিক চ্যালেঞ্জটি থেকে আমার ভাষাটি চেষ্টা করার জন্য এটি একটি ভাল সমস্যার মতো দেখেছিল :

m:({e<>PE}\-[|\-]*<T>\+|[|\-]*<T>)+`\+
e:\+

এটি চেষ্টা করার সবচেয়ে ভাল জায়গাটি হ'ল আমার অনলাইন অনুবাদক

স্নেকএক্স "স্নেক" ব্যবহার করে পাঠ্যের সাথে নিদর্শনগুলির সাথে মেলে যা পাঠ্যের সাথে মিলে যাওয়া রেজিڪسগুলির চারপাশে চলে। কোডটি একটি রেজেক্সের মতো ধরণের পাঠ করে, বাদে:

  • <T>নির্দেশনা। এটি একটি নির্দেশ নির্দেশ যা সাপকে তার বর্তমান দিক থেকে বাম এবং ডানদিকে শাখা করে।
  • {e<>PE}একটি subroutine কল মত। এটি সংজ্ঞায়িত e( <>এবং) পরামিতিগুলি সহ একটি সাপকে Pউত্পন্ন করে (পিগব্যাক - স্প্যানিং সাপ নতুন সাপকে অনুসরণ করে) এবং E(একচেটিয়া - এর সাথে মেলে এমন কোনও কিছুর সাথে মেলে না)। এই একচেটিয়া চেকটি হ'ল একমাত্র জিনিস যা সাপকে অসীম লুপিং থেকে বিরত করে।
  • `শেষের উপসর্গটি ইঙ্গিত দেয় যে এরপরে যা মিলছে তা কেবল ইতিমধ্যে মিলে গেলে, যা আমরা লুপটি বন্ধ করতে বাধ্য করতে পারি।

যেহেতু স্নেকএক্স রেজেক্সের মতো এবং প্রযুক্তিগতভাবে ফলাফলগুলি নিজের পছন্দ অনুযায়ী আউটপুট দেয় না, আমি অনুমান করি যে আমাদের এটি কয়েকটি জাভাস্ক্রিপ্টে দোভাষীকে ফোন করে জড়িয়ে রাখতে হবে:

function e(s){return snakeEx.run('m:({e<>PE}\\-[|\\-]*<T>\\+|[|\\-]*<T>)+`\\+\ne:\\+',s,1).length}

সম্পাদনা : এটি ব্লুটোরেঞ্জের অতিরিক্ত পরীক্ষার কেসগুলির সাথে কাজ করার জন্য স্থির করেছে


1
+1 আমি সত্যিই এটি পছন্দ করি কারণ সম্ভবত আমি এটি অনলাইনে চেষ্টা করতে এবং লুপগুলি হাইলাইট করতে পারি। তবে আপনি এই দুটি পরীক্ষার
কেসটি

@ ব্লুটোরেঞ্জ ভাল ক্যাচ আমি স্ব-ক্রসিং লুপগুলির জন্য কিছুটা হ্যাকি ফিক্স যুক্ত করেছি। যদিও পরীক্ষার কেস 1 সম্পর্কে আরও কিছুটা ভাবতে হবে, যদিও।
বিএমাক

যে শুধু প্রতিস্থাপন ফিক্স করা সহজ এক, [^ ]সঙ্গে [|\-]);
blutorange

হাহ, ঘটনাটি কেন তা বুঝতে পেরে আমাকে অনেক সময় লাগল। ভাল কল.
বিএমাক

এটা সত্যিই দারুন!
ইনগো বার্ক

10

সি # - 338 388 433 বাইট

1-মাত্রিক অ্যারেতে পরিবর্তন করে একগুচ্ছ বাইট সংরক্ষণ করেছেন।

using C=System.Console;using System.Linq;class P{static void Main(){var D=C.In.ReadToEnd().Split('\n');int z,w=D.Max(m=>m.Length)+1,d,c=0;var E=D.SelectMany(l=>l.PadRight(w)).ToList();for(z=E.Count;z-->1;)if(E[z-1]==43)for(d=1,c++;E[z+=d%2<1?w*d-w:d-2]>32;)if(E[z]<44){E[z]=' ';d=d%2>0?z<w||E[z-w]<99?2:0:E[z+1]!=45?1:3;}C.WriteLine(c);}}

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

using C=System.Console;
using System.Linq;

class P
{
    static void Main()
    {
        // read in
        var D=C.In.ReadToEnd().Split('\n');

        int z, // z is position in E
        w=D.Max(m=>m.Length)+1, // w is width
        d, // d is direction of travel (1 == horizontal?, 2 == down/right?)
        c=0; // c is loop count

        // make all the lines the same length
        var E=D.SelectMany(l=>l.PadRight(w)).ToList(); // say no to horizontal bounds checking

        // consume +s
        for(z=E.Count;z-->1;)
            if(E[z-1]==43) // right-most lower-most +
                for(d=1,c++; // go left, increment counter
                    E[z+=d%2<1?w*d-w:d-2]>32 // move z, then check we havn't hit a space (when we do, z is basiclly z - 1)
                    ;)
                    if(E[z]<44) // +
                    {
                        E[z]=' '; // toodles

                        d=
                            d%2>0? // currently horizontal, must go vertical
                                z<w||E[z-w]<99?2 // can't go up, must go down
                                :0 // can go up, go up
                            : // currently vertical, must go horizontal
                                E[z+1]!=45?1 // can't go right, must go left
                                :3 // can go right, go right
                            ;
                    }

        // output result
        C.WriteLine(c);
    }
}

কি দারুন. এটি চিত্তাকর্ষক: ও
মেটনিয়াম

6

স্লিপ , 51 41 + 2 = 43 বাইট

$a(`+`-[^ +]*`+(<|>)`|[^ +]*`+#(<|>))+?$A

(এখন একটি বড় ব্যয়ে @ ব্লুটোরেঞ্জের পরীক্ষার কেস নিয়ে কাজ করার জন্য আপডেট হয়েছে)

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

nম্যাচের সংখ্যার জন্য পতাকা সহ চালান

py -3 slip.py regex.txt input.txt n

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


ব্যাখ্যা

এই জমা দেওয়ার ক্ষেত্রে নতুন বৈশিষ্ট্যগুলির আধিক্যের কারণে এগুলি প্রদর্শন করার জন্য এটি একটি ভাল সুযোগ।

$a                Set custom anchor at current position
(
  `+`-            Match '+-'
  [^ +]*          Match any number of '|' or '-'
  `+              Match a '+'
  (<|>)           Either turn left or turn right
  `|              Match a '|'
  [^ +]*          Match any number of '|' or '-'
  `+              Match a '+'
  #               Prevent next match from moving the match pointer (doubling up on '+')
  (<|>)           Either turn left or turn right
)
+?                Do the above at least once, matching lazily
$A                Make sure we're back where we started

স্লিপ প্রতিটি অবস্থান থেকে শুরু করে মিলানোর চেষ্টা করে এবং কেবল অনন্য ম্যাচ দেয় returns নোট করুন যে আমরা ব্যবহার করি [^ +]- [-|]তাত্ত্বিকভাবে দুটি বাইট ব্যবহার করার সময় -, অক্ষর শ্রেণীর শুরু / শেষ অবধি অনিচ্ছুক এখনও স্লিপে প্রয়োগ করা হয়নি।


1
@ ব্লুটোরেঞ্জেরও threeরয়েছে +যা একটি নয় -, এক |এবং 2 স্পেস নয়, তাই আমি ধরে নিচ্ছি যে এটি কোনও ভুল নয়
Sp3000

5

রুবি 295

F=->i{l=i.lines
g={}
l.size.times{|y|i.size.times{|x|l[y][x]==?+&&g[[y,x]]=[[y,x]]}}
c=->a,b{w=g[b]+g[a];w.map{|x|g[x]=w}}
k=g.keys
k.product(k).map{|n,o|
r,p=n
s,q=o
((r==s&&p<q&&l[r][p...q]=~/^\+-[|-]*$/)||(p==q&&r<s&&l[r...s].map{|l|l[p]||c}.join=~/^\+\|[|-]*$/))&&c[n,o]}
g.values.uniq.size}

এটি অনলাইন চেষ্টা করুন: http://ideone.com/kIKELi ( আমি একটা যোগ #to_aপ্রথম লাইনে কল, কারণ ideone.com রুবি 1.9.3, যা সমর্থন করে না ব্যবহার #sizeজন্য Enumerables এ রুবি 2.1.5+ কোড ঠিক আছে চালায়। । )

পদ্ধতির নিম্নলিখিত:

  • ইনপুটটিতে সমস্ত +চিহ্নের একটি তালিকা তৈরি করুন এবং সেগুলির প্রত্যেককে একটি স্বতন্ত্র আকার বিবেচনা করুন
  • অনুভূমিক এবং উল্লম্ব লাইনগুলি সন্ধান করুন যা দুটি +চিহ্নকে সংযুক্ত করে এবং তাদের আকারগুলিকে একটিতে সংযুক্ত করে
  • শেষ পর্যন্ত, পৃথক আকারের সংখ্যা ফলাফলের সাথে মেলে

এখানে আরও পাঠযোগ্য সংস্করণ:

def ascii_topology_count(input)
  lines = input.lines
  max_length = lines.map(&:size).max

  # hash in which the keys are corners ("+"s), represented by their [y, x] coords
  # and the values are arrays of corners, representing all corners in that group
  corner_groups = {}

  lines.size.times { |y|
    max_length.times { |x|
      if lines[y][x] == ?+
        corner_groups[[y, x]] = [[y, x]]
      end
    }
  }

  # function that combines the groups of two different corners
  # into only one group
  combine_groups =-> c1, c2 {
    g1 = corner_groups[c1]
    g2 = corner_groups[c2]

    g2 += g1
    corner_groups[c1] = g2
    g2.map{|x| corner_groups[x] = g2}
  }

  corner_groups.keys.product(corner_groups.keys).map{|c1, c2|
    y1,x1=c1
    y2,x2=c2
    if y1 == y2 && x1 < x2
      # test horizontal edge
      t = lines[y1][x1...x2]
      if t =~ /^\+-[|-]*$/
        # p "#{c1}, #{c2}, [H] #{t}"
        combine_groups[c1, c2]

      end
    end

    if x1 == x2 && y1 < y2
      # test vertical edge
      t=lines[y1...y2].map{|l|l[x1]||' '}.join

      if t =~ /^\+\|[|-]*$/
        # p "#{c1}, #{c2}, [V] #{t}"
        combine_groups[c1, c2]
      end
    end
  }

  corner_groups.values.uniq.count
end

5

জাভাস্ক্রিপ্ট (ES6) 190 197 202 215 235 289 570

2 মাত্রার পরিবর্তে একক মাত্রা অ্যারে সম্পাদনা করুন , সর্বোচ্চ সারি আকার 999 অক্ষর (তবে বিনা ব্যয়ে আরও বেশি কিছু হতে পারে, যেমন 999 এর পরিবর্তে 1e5)

এনিমেটেড কোড স্নিপেট সম্পাদনা করুন , নীচে দেখুন

F=s=>[...s.replace(/.+/g,r=>r+Array(e-r.length),e=999)]
  .map((c,x,z,d=1,f='-',g='|')=>{
    if(c=='+')
      for(++n;z[x+=d]!='+'||([f,g,e,d]=[g,f,d,z[x-e]==g?-e:z[x+e]==g&&e],d);)
        z[x]=z[x]==g&&g
  },n=0)|n

অসম্পূর্ণ প্রথম চেষ্টা

f=s=>
{
  cnt=0
  s = (1+s+1).split(/[1\n]/)

  for(;x=-1, y=s.findIndex(r=>~(x=r.indexOf('+-'))), x>=0;++cnt)
  {
    //console.log(y+' '+x+' '+s.join('\n'))
    dx = 1
    for(;dx;)
    {
      a=s[y-1],b=s[y+1],
      r=[...s[y]]
      for(r[x]=' ';(c=r[x+=dx])!='+';)
      {
        if (c=='-')
          if((a[x]||b[x])=='|')r[x]='|';
          else r[x]=' ';
      }  

      if(a[x]=='|')dy=-1;
      else if(b[x]=='|')dy=1;
      else dy=0
      r[x]=' '
      s[y]=r.join('')
      if (dy) {
        for(;y+=dy,r=[...s[y]],(c=r[x])!='+'&c!=' ';)
        {
          if (c=='|') 
            if((r[x-1]||r[x+1])=='-')r[x]='-';
            else r[x]=' ';
          s[y]=r.join('')
        }  
        if(r[x-1]=='-')dx=-1;
        else if(r[x+1]=='-')dx=1;
        else dx=0;
      }
    }  
  }
  return cnt
}

অ্যানিমেটেড স্নিপেট

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F('\
  +--------------+\n\
  |  +--+  +--+  |\n\
  |  |  |  |  |  |\n\
+-|-----|-----|----+\n\
| |  |  |  |  |  | |\n\
| +--+  +--+  +--+ |\n\
+------------------+\n\
\n\
              +------------+\n\
              |            |\n\
        +-----+  +-----+   |\n\
        |        |     |   |\n\
  +-----|-----------+  |   |\n\
  |     |  +--+  |  |  |   |\n\
  +-+   +--|--|--+  +---------+\n\
    |      |  +-+      |   |  |\n\
    +------+    |      |   |  |\n\
                +-------+  |  |\n\
                       ||  |  |\n\
                       |+-----+\n\
                       |   |\n\
                       +---+')

4

F('\
+--------+  +--------+  +--------+\n\
|        |  |        |  |        |\n\
|     +--|-----+  +--|-----+     |\n\
|     |  |  |  |  |  |  |  |     |\n\
+-----|--+  +-----|--+  +--------+\n\
      |        |  |        |\n\
      +--------+  +--------+')

5


নিশ্চয় আপনি গল্ফযুক্ত সংস্করণটি একক রেখার মাধ্যমে কিছু বাইট সংরক্ষণ করতে চান? আপনি কেবল একটি বেনাম ফাংশনও তৈরি করতে পারেন (আমার মনে হয় এটি কোডগল্ফের নিয়মের মধ্যে রয়েছে)
theonlygusti

@theonlygusti golfed সংস্করণ একক লাইন (কোন নতুন লাইন এবং খাঁজ স্পেস গণনা করা হয়) একটি বেনামী ফাংশন আমি 2 বাইট, তুচ্ছ সংরক্ষণ সংরক্ষণ .With হিসাবে গণনা করা হয় ...
edc65

4

রুবি, 178 187 199 212

আরও ভাল রুবি সংস্করণ, ক্রিয়াকলাপ এফ তৈরি করে Now

b=->n{Q[I]=?~
d=Q[I+n]==(n>1??|:?-)?1:-1
loop{I+=d*n
b[n>1?1:N]if Q[I]==?+
Q[I]<?~?4:break}}
F=->s{N=s.size;Q=s+?\n
Q.gsub!(/^.*$/){$&.ljust N-1}
(0..N).find{!(I=Q=~/\+/)||b[1]}}

এটি অনলাইন পরীক্ষা করুন: আদর্শ

মূলত, ফাংশনটি bযে কোনও সময়েই শুরু হয় +, পুনরাবৃত্তভাবে লুপের মধ্য দিয়ে যায় সমস্ত কিছু সেট +করে u। এভাবে প্রতিবার একটি লুপ মুছে ফেলা bহয়। ফাংশন Fকেবল চেষ্টা করে যে bকোনও লুপ বাকি নেই যতক্ষণ না আমাদের কল করতে হবে call


2

পাইথন 2 - 390

স্টিডিন থেকে নতুন লাইনের সাথে একটি স্ট্রিং নেয়। এটি একটি দুর্দান্ত সরল পদ্ধতিটি মোটামুটিভাবে গল্ফ করেছে, তবে আমি নিশ্চিত যে এটি কত দিন বিবেচনা করবে।

s=raw_input().split('\n');L=len
def R(x,y):
 b=p,q=x,y;u=v=f=0
 while b!=(p,q)or not f:
    p+=u;q+=v;f=u+v;c=s[q][p]
    if'+'==c:u,v=[(i,j)for i,j in{(-1,0),(1,0),(0,-1),(0,1)}-{(-u,-v)}if 0<=q+j<L(s)and 0<=p+i<L(s[q+j])and s[q+j][p+i]in['-+','|+'][j]][0];s[q]=s[q][:p]+' '+s[q][p+1:]
    if c+s[q+v][p+u]in'-|-':p+=u;q+=v
print L([R(x,y)for y in range(L(s))for x in range(L(s[y]))if'+'==s[y][x]])

1

পাইথন 2 - 346 বাইট

কোনও ফাংশন হিসাবে প্রয়োগ করা হয়েছে cযা ফাইল ডেটাটিকে ইনপুট হিসাবে গ্রহণ করে এবং লুপের সংখ্যা দেয়।

প্রথমত, ফাংশনটি লুপের উপাদানগুলির অবস্থানের ম্যাপিংয়ের জন্য সেই স্থানের উপাদান টাইপটিতে (উদাহরণস্বরূপ {(0,0): '+'}) পচে যায় । তারপরে, এটি দুটি পারস্পরিক-পুনরাবৃত্ত অভ্যন্তরীণ ফাংশন ব্যবহার করে। প্রথমে ম্যাপিং থেকে একটি লুপ অংশটি সরিয়ে দেয় এবং পরবর্তী বিভাগটির জন্য কোন অবস্থানগুলি পরীক্ষা করা উচিত তা স্থির করে। দ্বিতীয়টি নির্বাচিত স্থানে কী ধরণের লুপ উপাদান রয়েছে তা যাচাই করে এবং যদি এটি প্রত্যাশার সাথে সামঞ্জস্য হয় তবে সদ্য পাওয়া বিভাগটিকে সরাতে প্রথমটিকে কল করে।

e=enumerate
def c(d):
 D={(i,j):k for i,l in e(d.split('\n'))for j,k in e(l)if k in'+-|'}
 def f(r,c,R,C,t):
  if D.get((r,c),t)!=t:g(r,c)
  elif D.get((R,C),t)!=t:g(R,C)
 def g(r,c):
  t=D.pop((r,c))
  if t!='|':f(r,c-1,r,c-2,'|');f(r,c+1,r,c+2,'|')
  if t!='-':f(r-1,c,r-2,c,'-');f(r+1,c,r+2,c,'-')
 n=0
 while D:g(*D.keys()[0]);n+=1
 return n
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.