আপনি আয়তক্ষেত্র সংখ্যা গণনা করতে পারেন?


21

আমার প্রিয় গাণিতিক প্যাসটাইমগুলির মধ্যে একটি হল একটি আয়তক্ষেত্রাকার গ্রিড আঁকুন, তারপরে সেই গ্রিডে দৃশ্যমান সমস্ত আয়তক্ষেত্রগুলি সন্ধান করুন। এখানে, এই প্রশ্নটি নিন এবং নিজের জন্য উদ্যোগ!

আপনি আয়তক্ষেত্র সংখ্যা গণনা করতে পারেন?

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

এই 4 x 4 মিনিচিস বোর্ডের জন্য মোট আয়তক্ষেত্রের সংখ্যা হুবহু

100

আপনি ঠিক ছিলেন?

সম্পর্কিত গণিত: 8 × 8 চেকবোর্ডে কতগুলি আয়তক্ষেত্র রয়েছে?

চ্যালেঞ্জ

সংক্ষিপ্ততম ফাংশন / প্রোগ্রামটি লিখুন যা কোনও অ-টরয়েডাল গ্রিড / চিত্রে দৃশ্যমান আয়তক্ষেত্রের মোট সংখ্যা গণনা করে ।

সম্পর্কিত চ্যালেঞ্জ: অনন্য আয়তক্ষেত্র গণনা করুন! , 2 ডি বাইট অ্যারেতে আয়তক্ষেত্রের সংখ্যা সন্ধান করুন

ছক পূরণ করা

আপনার ফাংশন বা প্রোগ্রামটি পাঠ্য-ভিত্তিক ইনপুট বা গ্রাফিকাল ইনপুট দিয়ে কাজ করতে বেছে নিতে পারে।

পাঠ্য-ভিত্তিক ইনপুট

গ্রিডটি নিম্নোক্ত অক্ষরগুলির সমন্বয়ে একটি এম- বি- এন ( এম সারি, এন কলাম) এএসসিআইআই গ্রিড হবে:

  • স্পেস,
  • - অনুভূমিক রেখাংশের অংশগুলির জন্য,
  • | উল্লম্ব লাইন বিভাগের অংশগুলির জন্য এবং
  • + কোণে জন্য।

আপনি এই ASCII গ্রিডটি আপনার প্রোগ্রাম / ফাংশনের ইনপুট / আর্গুমেন্ট হিসাবে আকারে প্রবর্তন করতে পারেন

  • একটি একক স্ট্রিং রেখা-বিরতি দ্বারা সীমিত,
  • একটি স্ট্রিং নিউলাইনগুলি ছাড়াই তবে এক বা দুটি পূর্ণসংখ্যার গ্রিডের মাত্রাগুলি এনকোড করছে বা
  • স্ট্রিংগুলির একটি অ্যারে।

দ্রষ্টব্য: পাঠ্য-ভিত্তিক ইনপুটটিতে কমপক্ষে 1 টি সারি এবং কমপক্ষে 1 টি কলাম রয়েছে।

গ্রাফিকাল ইনপুট

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

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

এর অর্থ হ'ল প্রতিটি ব্লক কেবলমাত্র থেকে বেছে নেওয়া যেতে পারে নীল সীমানা উপেক্ষা করুন। (বৃহত্তর চিত্রের জন্য এখানে ক্লিক করুন)

দ্রষ্টব্য: নীল সীমানা কেবল চিত্রের উদ্দেশ্যে। গ্রাফিকাল ইনপুটটি কমপক্ষে 5 পিএক্স প্রশস্ত এবং 5 পিএক্স উচ্চ। আপনি গ্রাফিকাল ইনপুটটিকে কোনও একরঙা ছবিতে রূপান্তর করতে পারেন, সম্ভাব্যভাবে অন্যান্য চিত্র ফাইল ফর্ম্যাটগুলির)। যদি আপনি রূপান্তর করতে চান, দয়া করে উত্তরে উল্লেখ করুন। ধর্মান্তরের কোনও দণ্ড নেই।

আউটপুট ফরমেট

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

আপনি যদি কোনও ফাংশন লিখতে থাকেন তবে এটিতে একটি ইন-ইনপুটটিতে আয়তক্ষেত্রের মোট সংখ্যা নির্দেশ করে একটি অ-নেতিবাচক সংখ্যাও দেওয়া উচিত।

উদাহরণস্বরূপ কেস

কেস 1, গ্রাফিক: মামলা 1( 30 পিক্স * 30 পিক্স), এএসসিআইআই: ( 6 সারি, 6 টি কলস)

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

প্রত্যাশিত আউটপুট: 3

কেস 2, গ্রাফিক: মামলা 2( 20 পিক্স * 20 পিক্স), এএসসিআইআই: ( 4 টি সারি, 4 টি কলস)

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

প্রত্যাশিত আউটপুট: 6

কেস 3, গ্রাফিক: মামলা 3( 55 পিক্স * 40 পিক্স), এএসসিআইআই: ( 8 টি সারি, 11 টি ডানা)

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

প্রত্যাশিত আউটপুট: 9

কেস 4, গ্রাফিক: মামলা 4( 120 পিক্স * 65 পিক্স), এএসসিআইআই: ( 13 টি সারি, 24 টি কলস)

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

প্রত্যাশিত আউটপুট: 243

কেস 5, গ্রাফিক: মামলা ৫( 5 px আকারে * 5 । Px আকারে হ্যাঁ, এটা হল সেখানে!), হওয়া ASCII: শুধু একটি একক স্থান।

প্রত্যাশিত আউটপুট: 0

কেস 6, গ্রাফিক: মামলা 6( 35 px আকারে * 20 পিক্সেল), হওয়া ASCII: ( 4 সারি, 7 COLS)

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

প্রত্যাশিত আউটপুট: 5

অনুমিতি

জীবনকে আরও সহজ করার জন্য, আপনি গ্যারান্টিযুক্ত যে:

  • হওয়ার মাধ্যমে অ Toroidal , গ্রিড পারেন অনুভূমিকভাবে বা উল্লম্বভাবে মোড়ানো নেই।
  • কোনও আলগা প্রান্ত নেই, যেমন +--- বা +- -+। সমস্ত লাইন বিভাগে দুটি প্রান্ত থাকে।
  • দুটি লাইন যে মিলিত হয় + অবশ্যই সেই মুহুর্তে একে অপরকে ছেদ করতে পারে।
  • আপনাকে অবৈধ ইনপুটগুলি নিয়ে চিন্তা করতে হবে না।

স্ট্যান্ডার্ড লুফোলের বিরুদ্ধে বিধি প্রযোজ্য। স্কোয়ারগুলি আয়তক্ষেত্র হিসাবে বিবেচনা করুন। Allyচ্ছিকভাবে, আপনি গ্রিডের প্রতিটি সারিতে চলমান স্থানগুলি সরিয়ে ফেলতে পারেন।

এটি , সুতরাং আপনার এন্ট্রিটি যতটা সম্ভব সংক্ষিপ্ত করুন। পাঠ্য-ভিত্তিক এবং গ্রাফিকাল সমাধানগুলি একসাথে প্রতিযোগিতা করবে।

লিডারবোর্ড


একরঙা বিটম্যাপ অনুমোদিত?
ব্যবহারকারী 202729

@ ব্যবহারকারী 202729 হ্যাঁ। যদি আপনি নন-পিএনজি চিত্র নিয়ে কাজ করতে চান তবে দয়া করে উত্তরে এটি উল্লেখ করুন।
উন্মাদ লি

কি এই একটি বৈধ ইনপুট? (আয়তক্ষেত্র কোণটি বৃহত আয়তক্ষেত্রের সীমানা স্পর্শ করে)) যদি তাই হয় তবে এটি পরীক্ষার কেস হিসাবে যুক্ত করার বিষয়টি বিবেচনা করুন।
জগারব

@ জগারব এটি বৈধ ইনপুট। আমি পোস্টটিও সম্পাদনা করব।
উন্মাদ লি

আপনি প্রত্যাশিত আউটপুটগুলিকে স্পোলারদের মধ্যে রাখার কোনও কারণ আছে? দেখে মনে হচ্ছে এটি কেবল আপনার কোড যাচাই করে কিছুটা বিরক্তিকর করে তোলে।
FryAmTheEggman

উত্তর:


4

গ্রিম , 31 28 বাইট

T=\+[+\-]*\+/[+|]/+$
n`T&To2

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

ASCII ফর্ম্যাটে ইনপুট নেয়।

ব্যাখ্যা

গ্রিমের বাক্য গঠন নিয়মিত প্রকাশের খুব কাছে close প্রতিটি লাইন এমন একটি প্যাটার্ন নির্ধারণ করে যা অক্ষরের একটি আয়তক্ষেত্রের সাথে মেলে বা নাও পারে। Tএকটি আয়তক্ষেত্রের সাথে মেলে যার শীর্ষ সারি এবং বাম কলামটি বৈধ দেখাচ্ছে।

T=\+[+\-]*\+/[+|]/+$
T=                    Define T as
  \+[+\-]*\+          a row that matches this regex
            /         and below that
             [+|]/+   a column of + or |
                   $  with anything to its right.

দ্বিতীয় সারিটি "মূল প্রোগ্রাম"।

n`T&To2
n`       Print number of rectangles that match
  T      the pattern T
   &     and
    To2  T rotated 180 degrees.

6

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

g=a=>Math.max(...b=a.map(a=>a.length))-Math.min(...b)?``:f(a);f=
a=>a.map((b,i)=>[...b].map((_,j)=>n+=a.join`
`.split(eval(`/\\+(?=[-+]{${j}}\\+[^]{${l=b.length+~j}}([|+].{${j}}[|+][^]{${l}}){${i}}\\+[-+]{${j}}\\+)/`)).length>>1),n=0)|n
<textarea rows=8 cols=8 oninput=o.textContent=g(this.value.split`\n`)></textarea><pre id=o>

সমান দৈর্ঘ্যের স্ট্রিংগুলির অ্যারে হিসাবে ইনপুট নেয়। ব্যাখ্যা: নিয়মিত প্রকাশের একটি সিরিজ তৈরি করে যা সমস্ত সম্ভাব্য প্রস্থ এবং উচ্চতাগুলির আয়তক্ষেত্রগুলির সাথে মেলে (এবং কিছু অসম্ভব প্রশস্ততা এবং উচ্চতা তবে এটি আপনার জন্য কোড গল্ফ) এবং সেগুলি কতটি মিলছে তা গণনা করে। কারণ রেজিপ্সে একটি ক্যাপচারিং গ্রুপ আছে, ম্যাচের জন্য splitফিরে আসে , তাই আমি ম্যাচের সংখ্যা পেতে 1 রাইট শিফট করলাম, কারণ এটি গ্রুপকে ক্যাপচার করার কারণে বাইট সংরক্ষণ করে।2n+1n


হুম, কোড স্নিপেটটি আমার জন্য কাজ করছে না [ফায়ারফক্স 54.0.1 (32 বিট) বা ক্রোম 60.0.3112.90 (64 বিট) উভয় উইন্ডোজে (64 বিট)]।
জোনাথন অ্যালান

স্নিপেট এটি [ম্যাক (bit৪ বিট)] তে সাফারিটিতে কাজ করে না।
মিঃ এক্সকোডার

2
দেখে মনে হচ্ছে আমাদের পাঠ্য অঞ্চলে স্টাফ আটকে দিতে হবে। প্রতি লাইনে একই সংখ্যক অক্ষর প্রয়োজন।
উন্মাদ লি

আহ আমি দেখছি, ভাল জায়গা @ ফ্রেঞ্জলি!
জোনাথন অ্যালান

4

জে , 103 95 86 80 76 70 বাইট

[:+/@,]*/@('-|++'*/@(e.,&'+')~&>]({.,{:)&.>@;|:;{.;{:);._3"$~2+$#:i.@$

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

পিছনের স্থানগুলির সাথে স্ট্রিংগুলির একটি অ্যারের হিসাবে ইনপুট নেয় (যাতে প্রতিটি স্ট্রিং একই আকারের হয়)। 2 x 2 এর চেয়ে বড় প্রতিটি সাবহারে আকারের উপরে পুনরাবৃত্তি করতে পূর্ণ সুবরে অপারেটর ব্যবহার ;._3করে এবং বৈধ আয়তক্ষেত্রগুলির জন্য সাববারে গণনা করে। সমস্ত পরীক্ষার কেসগুলি প্রায় তাত্ক্ষণিকভাবে সম্পন্ন করে।


1
@ ফ্রেঞ্জলি ধন্যবাদ ফাংশনটি স্ট্রিংগুলির একটি অ্যারের হিসাবে ইনপুটটি গ্রহণ করছে, তবে আমি প্রতিটি প্রতিটি অ্যারেটিকে একটি ফ্ল্যাট স্ট্রিং হিসাবে পুনরায় আকারযুক্ত আকারে এনকোড করে ফাংশনটির জন্য একটি আর্গুমেন্ট হিসাবে ব্যবহার করার জন্য প্রতিটি ভেরিয়েবলগুলিতে সংরক্ষণ করেছি stored
মাইল

আহ্ ... আপনার ব্যাখ্যার জন্য আপনাকে ধন্যবাদ।
উন্মাদ লি

@ মাইলস দুর্দান্ত আপনি যখন ইনপুটটিকে স্ট্রিংগুলির অ্যারে হিসাবে বলেন, ইনপুটটি কি প্রতিটি স্টিং 1 স্টিং?
জোনাহ

@ জোনাহ স্ট্রিংস কেবলমাত্র অক্ষরের অ্যারে, সুতরাং ইনপুটটি আসলে চরের 2 ডি অ্যারে।
মাইল

3

গণিত, 136 134 132 বাইট

S=Tr@*Flatten;S@Table[1-Sign@S@{d[[{i,j},k;;l]],d[[i;;j,{k,l}]]},{i,($=Length)[d=ImageData@#]},{j,i+1,$@d},{k,w=$@#&@@d},{l,k+1,w}]&

ব্যবহার: (পুরানো 136-বাইট সংস্করণের জন্য, তবে নতুন সংস্করণটি মূলত অভিন্ন)

: _

বিঃদ্রঃ:

  • এটি সময় হে (মি 2 এন 2 সর্বাধিক (মি, এন)) এ চলে, সুতরাং কেবলমাত্র ছোট ইনপুট ব্যবহার করুন।
  • যদিও এটি বাইনারি চিত্রগুলির সাথে কাজ করার কথা রয়েছে, দৃশ্যত এটি নন-বাইনারি চিত্রগুলির সাথে কাজ করতে পারে। (তবে কালো অবশ্যই শূন্য হতে হবে)
  • গ্রাফিকগুলি অগত্যা 5x5 ব্লক দিয়ে নির্মিত হবে না, ব্লকগুলি আরও ছোট হতে পারে।
  • @*সংস্করণ 10. পুরোনো সংস্করণগুলি ইন নতুন, ব্যবহার Tr~Composition~Flattenপরিবর্তে Tr@*Flatten

এটি এমএমএর কোন সংস্করণে রয়েছে ? 9.0 এ, এর সাথে সাড়া দেয়"Tr@" cannot be followed by "*Flatten".
উন্মাদ লি

1
@ ফ্রেঞ্জলি 10.0। হ্যাঁ, @*(সংক্ষিপ্তকরণের জন্য Composition) সংস্করণ 10
তে

1
আপনি শুধু ব্যবহার করবেন না কেন RectangleCount[]?
MCMasty

2
@ এমসিমিস্ট্রি ম্যাথমেটিকা ​​প্রচুর অন্তর্নির্মিত থাকার জন্য বিখ্যাত, তবে এটি নয়।
ব্যবহারকারী 202729

@ ব্যবহারকারী202729 লোল ইয়েপ, আইএম জে কে
এমসিমিস্ট্রি

2

জেলি ,  60 53 52 51  50 বাইট

ÑFQe⁹ṚẆ;W¤
Ḣ,Ṫ
=”+ÇÇ€Ạȧ1ŀ
Zç⁾+-ȧç⁾+|$
Ẇ;"/€Ẇ€Ç€€FS

একটি সম্পূর্ণ প্রোগ্রাম স্ট্রিংগুলির তালিকা (সমান দৈর্ঘ্যের সারি) এবং কাউন্টটি মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন!
... অথবা অনুলিপি এবং আটকানো ইনপুটটির জন্য এই সম্পূর্ণ প্রোগ্রামটিব্যবহার করুন(লাইনগুলিতে বিভক্ত করার জন্য অতিরিক্ত বাইট সহ)
- লাইনগুলি মনে রাখবেন যে প্রোগ্রামটি সঠিকভাবে কাজ করার জন্য লাইনগুলিকে অবশ্যই পিছনের স্থান থাকতে হবে।

কিভাবে?

ÑFQe⁹ṚẆ;W¤   - Link 1, sidesAreValid?: list of lists, area; list allowedSideCharacters
Ñ            - call the next link (2) as a monad (get the sides in question
             -   note: these sides do not include the corners since the area was modified
             -   to not include the other sides by the first call to link 2 inside link 3.
 F           - flatten into a single list
  Q          - de-duplicate (unique characters)
         ¤   - nilad followed by link(s) as a nilad:
    ⁹        -   right argument (either "+-"                or "+|"               )
     Ṛ       -   reverse        (either "-+"                or "|+"               )
      Ẇ      -   all sublists   (either ["-","+","-+"]      or ["|","+","|+"]     )
        W    -   wrap           (either ["+-"]              or ["+|"]             )
       ;     -   concatenate    (either ["-","+","-+","+-"] or ["|","+","|+","+|"])
   e         - exists in?

Ḣ,Ṫ          - Link 2, topAndTail helper: list
Ḣ            - head (get the first element and modify the list)
  Ṫ          - tail (get the last element and modify the list)
 ,           - pair (the elements together)

=”+ÇÇ€Ạȧ1ŀ   - Link 3, isPartlyValid?: list of lists, area; list allowedSideCharacters
=”+          - equal to '+'? (vectorises across the whole area, 1 if so, 0 otherwise)
   Ç         - call the last link (2) as a monad (gets the values for two edges)
    Ç€       - call the last link (2) as a monad for €ach (...values for the four corners)
      Ạ      - all? (all corners are '+' 1 if so, 0 if not)
        1ŀ   - call link number 1 as a dyad with sideCharacters as the right argument
             -    ...and the modified area on the left
       ȧ     - logical and (both all corners are '+' and the sides in question look right)

Zç⁾+-ȧç⁾+|$  - Link 4, isValidSquare?: list of lists, area
Z            - transpose
 ç⁾+-        - call the last link (3) as a dyad with right argument "+-"
          $  - last two links as a monad:
      ç⁾+|   -   call the last link (3) as a dyad with right argument "+|"
     ȧ       - logical and (1 if so 0 otherwise)

Ẇ;"/€Ẇ€Ç€€FS - Main Link: list of lists of characters, rows
Ẇ            - all sublists (= all non-zero length runs of rows)
   /€        - reduce €ach by:
  "          -   zip with:
 ;           -     concatenation (= all non-zero length vertical edges)
     Ẇ€      - all sublists for €ach (= all possible areas)
       Ç€€   - call the last link (4) as a monad for €ach for €ach (for each area)
          F  - flatten
           S - sum


2

হাস্কেল, 180 167 166 বাইট

l=length
a%b=[a..b-1]
h c a g b=all(`elem`c)$g<$>[a..b]
f s|(#)<-(!!).(s!!)=sum[1|y<-1%l s,x<-1%l(s!!0),i<-0%y,j<-0%x,h"+|"i(#x)y,h"+-"j(y#)x,h"+|"i(#j)y,h"+-"j(i#)x]

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

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


1

জেলি , 41 39 34 33 বাইট

,Z;.ị$⁺€ḟ€"⁾-|Fḟ”+
ẆḊÐfZ€µ⁺€ẎÇÐḟL

এটি অনলাইন চেষ্টা করুন! বা সমস্ত ক্ষেত্রে দেখুন।

আমার উত্তর উপর ভিত্তি করে জে।

ব্যাখ্যা

,Z;.ị$⁺€ḟ€"⁾-|Fḟ”+  Helper. Input: 2d array of characters
 Z                  Transpose
,                   Pair
  ;                   Concatenate with
     $                The tail and head
   .ị                   Select at index 0.5 -> Select at index 0 and 1
                        Jelly uses 1-based modular indexing, so
                        0 means to select the tail
      ⁺€              Repeat on each - This selects the last and first rows,
                      last and first columns, and the 4 corners
           ⁾-|       The string array ['-', '|']
          "          Vectorize
        ḟ€             Filter each
              F      Flatten
                ”+   The character '+'
               ḟ

ẆḊÐfZ€µ⁺€ẎÇÐḟL  Main. Input: 2d array of characters
      µ         Combine into a monad
Ẇ                 Generate all sublists
  Ðf              Filter for the values that are truthy (non-empty)
 Ḋ                  Dequeue
    Z€            Transpose each
       ⁺€       Repeat on each
         Ẏ      Tighten, join all lists on the next depth
          ÇÐḟ   Discard the values where executing the helper returns truthy
             L  Length

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