বৃহত্তম স্কোয়ার


9

এই প্রশ্নটি গ্রিডের বৃহত্তম স্কোয়ারের মতো ।

চ্যালেঞ্জ

স্ট্রিং ফর্ম্যাট বা অ্যারে ফর্ম্যাটের একটি ম্যাট্রিক্স দেওয়া 1এবং 0আপনি একটি ফাংশন তৈরি করবেন যা সবকটি বৃহত বর্গাকার সাবম্যাট্রিক্সের ক্ষেত্র নির্ধারণ করে ।"xxxx,xxxxx,xxxx,xx.."["xxxx","xxxx","xxxx",...]1

একটি বর্গাকার সাবম্যাট্রিক্স সমান প্রস্থ এবং উচ্চতার মধ্যে একটি এবং আপনার ফাংশনটি কেবলমাত্র বৃহত সাবম্যাট্রিক্সের ক্ষেত্রটি ফিরে আসে 1

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

প্রদত্ত "10100,10111,11111,10010", এটি নিম্নলিখিত ম্যাট্রিক্সের মতো দেখাচ্ছে:

1 0 1 0 0

1 0 1 1 1

1 1 1 1 1

1 0 0 1 0

আপনি সাহসী 1আকার 2x2 আকারের বৃহত্তম বর্গাকার সাবম্যাট্রিক্স তৈরি করতে দেখতে পারেন , তাই আপনার প্রোগ্রামটি 4 নম্বর অঞ্চলটি ফিরিয়ে আনতে হবে।

বিধি

  • সাবম্যাট্রিক্স অবশ্যই সমান প্রস্থ এবং উচ্চতার একটি হতে হবে
  • সাবম্যাট্রিক্সে অবশ্যই মান থাকতে হবে 1
  • আপনার ফাংশনটি অবশ্যই বৃহত্তম সাবমেট্রিক্সের ক্ষেত্রটি ফেরত দিতে হবে
  • যদি কোনও সাবম্যাট্রিক্স না পাওয়া যায় তবে ফিরে আসুন 1
  • আপনি সংখ্যা বেড়ে চলেছে দ্বারা submatrix এলাকা নিরূপণ করতে পারেন 1submatrix মধ্যে

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

ইনপুট: "10100,10111,11111,10010" আউটপুট: 4

ইনপুট: "0111,1111,1111,1111" আউটপুট: 9

ইনপুট "0111,1101,0111" আউটপুট: 1


এই , তাই বাইটস মধ্যে সংক্ষিপ্ত উত্তর।


3
স্ট্রিং ফর্ম্যাট কেন?
স্টিভি গ্রিফিন

3
আমরা কি বাইনারি (সংখ্যাগত) ম্যাট্রিক্স হিসাবে ইনপুট নিতে পারি?
স্টিভি গ্রিফিন

5
[0] এর জন্য এখনও 1 আউটপুট দেওয়া দরকার?
l4m2

6
স্থির থাকুন, যখন সমস্ত 1-সাব-ম্যাট্রিক্স পাওয়া যায় না তখন কেন 1 ফিরে আসবেন, 0 কি আরও বেশি অর্থবোধ করবে না? (অন্যথায় এটি হ্যান্ডেল করা কেবল একটি বিশেষ ক্ষেত্রে)
জোনাথন অ্যালান

2
এটি যেমন দাঁড়িয়েছে আমি মনে করি আপনি যদি চশমাগুলি পরিবর্তন করেন তবে উভয় উত্তরদাতারা আপত্তি করবেন না এবং আমি দৃ strongly়ভাবে এটি করার পরামর্শ দিচ্ছি কারণ 1 ফেরার কোনও কারণ নেই এবং এটি জমাগুলি আরও আকর্ষণীয় করে তোলে না।
15

উত্তর:


2

জেলি , 18 বাইট

নো-অল -1 সাবলিস্ট উপস্থিত আউটপুট পরিচালনা করতে +2

ẆZṡ¥"L€$ẎȦÐfL€Ṁ²»1

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

ẆZṡ¥"L€$ẎȦÐfL€Ṁ²»1 - Link: list of lists of 1s and 0s
Ẇ                  - all slices (lists of "rows") call these S = [s1,s2,...]
       $           - last two links as a monad:
     L€            -   length of each (number of rows in each slice) call these X = [x1, x2, ...]
    "              -   zip with (i.e. [f(s1,x1),f(s2,x2),...]):
   ¥               -     last two links as a dyad:
 Z                 -       transpose (get the columns of the current slice)
  ṡ                -       all slices of length xi (i.e. squares of he slice)
        Ẏ          - tighten (to get a list of the square sub-matrices)
          Ðf       - filter keep if:
         Ȧ         -   any & all (all non-zero when flattened?)
            L€     - length of €ach (the side length)
              Ṁ    - maximum
               ²   - square (the maximal area)
                »1 - maximum of that and 1 (to coerce a 0 found area to 1)

অসাধারণ. আপনি কিছু ব্যাখ্যা যোগ করতে পারেন?
লুইস ফিলিপ দে জেসুস মুনোজ 25'18

আমি করব, আমি প্রথমে খাটো চিন্তা করার চেষ্টা করছি ...
জোনাথন অ্যালান

@ মিঃ এক্সকোডার আমি এখনই প্রয়োজনীয়তাটি পরিচালনা করতে আপডেট করেছি
জোনাথন অ্যালান

5

হাস্কেল , 113 121 118 117 বাইট

x!s=[0..length x-s]
t#d=take t.drop d
f x=last$1:[s*s|s<-min(x!0)$x!!0!0,i<-x!!0!s,j<-x!s,all(>'0')$s#i=<<(s#j)x,s>0]

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

-৩ বাইট লাইকনি ধন্যবাদ !

-1 বাইট লিনকে ধন্যবাদ !

অল -1 এস সাব-ম্যাট্রিক্সের জন্য 1 ফেরত দেওয়ার হাস্যকর প্রয়োজনের জন্য +8 বাইটস ..

ব্যাখ্যা / Ungolfed

নিম্নলিখিত সাহায্যকারী ফাংশন xএগুলি হ্রাস করার অনুমতি দেওয়ার জন্য কেবল অফসেটগুলি তৈরি করে s:

x!s=[0..length x-s]

x#yyতালিকা থেকে উপাদানগুলি বাদ দেবে এবং তারপরে নেবে x:

t#d=take t.drop d

ফাংশনটি fসাব-ম্যাট্রিক্সের জন্য সমস্ত সম্ভাব্য আকারের ক্রম অনুসারে লুপ করে, সংশ্লিষ্ট আকারের প্রতিটি উপ-ম্যাট্রিক্স উত্পন্ন করে, এতে কেবলমাত্র '1'গুলি রয়েছে এবং আকার সংরক্ষণ করে কিনা তা পরীক্ষা করে । সুতরাং সমাধান তালিকার শেষ প্রবেশ হবে:

--          v prepend a 1 for no all-1s submatrices
f x= last $ 1 : [ s*s
                -- all possible sizes are given by the minimum side-length
                | s <- min(x!0)$x!!0!0
                -- the horizontal offsets are [0..length(x!!0) - s]
                , i <- x!!0!s
                -- the vertical offsets are [0..length x - s]
                , j <- x!s
                -- test whether all are '1's
                , all(>'0') $
                -- from each row: drop first i elements and take s (concatenates them to a single string)
                              s#i =<<
                -- drop the first j rows and take s from the remaining
                                      (s#j) x
                -- exclude size 0...........................................
                , s>0
                ]

4

হাস্কেল , 99 97 বাইট

b s@((_:_):_)=maximum$sum[length s^2|s==('1'<$s<$s)]:map b[init s,tail s,init<$>s,tail<$>s]
b _=1

ইনপুটটি কেবলমাত্রগুলির বর্গ ম্যাট্রিক্স s==('1'<$s<$s)কিনা তা যাচাই করে তবে যদি উত্তরটি দৈর্ঘ্য 2 ডলার হয় তবে অন্য 0 হয় Then

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



3

জে , 33 27 বাইট

ফ্রাউনফ্রোগের জন্য -6 বাইট ধন্যবাদ!

[:>./@,,~@#\(#**/)@,;._3"$]

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

ব্যাখ্যা:

আমি আমার ব্যাখ্যায় প্রথম পরীক্ষার কেসটি ব্যবহার করব:

    ] a =. 3 5$1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1

আমি ইনপুটটির সারিগুলির সংখ্যার সাথে আকার সহ সমস্ত সম্ভাব্য স্কোয়ার সাবম্যাট্রিক্স উত্পন্ন করি।

,~@#\,.ইনপুটটির ধারাবাহিক উপসর্গের দৈর্ঘ্য টেজহটারে সেলাই করে সাবম্যাট্রিকের আকারগুলির জন্য জোড়ার একটি তালিকা তৈরি করে #\:

   ,~@#\ a
1 1
2 2
3 3

তারপরে আমি x u ;. _3 yসাবমেট্রিকগুলিতে ইনপুট কাটতে তাদের ব্যবহার করব । আমার কাছে ইতিমধ্যে x(আকারগুলির তালিকা) রয়েছে; yসঠিক যুক্তি ](ইনপুট)।

 ((,~@#\)<;._3"$]) a
┌─────┬─────┬─────┬───┬─┐
│1    │0    │1    │0  │0│
│     │     │     │   │ │
│     │     │     │   │ │
├─────┼─────┼─────┼───┼─┤
│1    │0    │1    │1  │1│
│     │     │     │   │ │
├─────┼─────┼─────┼───┼─┤
│1    │1    │1    │1  │1│
└─────┴─────┴─────┴───┴─┘

┌─────┬─────┬─────┬───┬─┐
│1 0  │0 1  │1 0  │0 0│ │
│1 0  │0 1  │1 1  │1 1│ │
│     │     │     │   │ │
├─────┼─────┼─────┼───┼─┤
│1 0  │0 1  │1 1  │1 1│ │
│1 1  │1 1  │1 1  │1 1│ │
├─────┼─────┼─────┼───┼─┤
│     │     │     │   │ │
└─────┴─────┴─────┴───┴─┘

┌─────┬─────┬─────┬───┬─┐
│1 0 1│0 1 0│1 0 0│   │ │
│1 0 1│0 1 1│1 1 1│   │ │
│1 1 1│1 1 1│1 1 1│   │ │
├─────┼─────┼─────┼───┼─┤
│     │     │     │   │ │
│     │     │     │   │ │
├─────┼─────┼─────┼───┼─┤
│     │     │     │   │ │
└─────┴─────┴─────┴───┴─┘

প্রতিটি সাবম্যাট্রিক্সের জন্য আমি এটি পরীক্ষা করে দেখি যে এটি সম্পূর্ণ 1s এর সমন্বয়ে গঠিত: (#**/)@,ম্যাট্রিক্স সমতল করুন এবং তাদের পণ্য অনুসারে আইটেমের সংখ্যাটি বহুগুণিত করুন। সমস্ত আইটেম যদি 1s হয় তবে ফলাফলটি তাদের যোগফল হবে, অন্যথায় - 0:

   (#**/)@, 3 3$1 0 0 1 1 1 1 1 1
0
   (#**/)@, 2 2$1 1 1 1
4 

   ((,~@#\)(+/**/)@,;._3"$]) a
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1

0 0 0 0 0
0 0 4 4 0
0 0 0 0 0

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

পরিশেষে আমি প্রতিটি সাবম্যাট্রিক্সের জন্য ফলাফলের তালিকাটি সমতল করি এবং সর্বাধিক সন্ধান করি:

>./@,

   ([:>./@,,~@#\(+/**/)@,;._3"$]) a
4

1
,~@#\এবং "1 2->"$
ফ্রাউনফ্রোগ

নিবন্ধন করুন আমি জানিনা"$
গ্যালেন ইভানোভ

1
#1 টি যোগ করার চেয়ে ছোট।
ফ্রাউনফ্রোগ 13

@ ফ্রাউনফ্র্যাগ হুম, এটি আসলেই। শীতল ধন্যবাদ!
গ্যালেন ইভানভ


2

রেটিনা , 143 বাইট

%`$
,;#
+%(`(\d\d.+;#)#*
$1¶$&¶$&#
\G\d(\d+,)|\G((;#+¶|,)\d)\d+
$1$2
)r`((11)|\d\d)(\d*,;?#*)\G
$#2$3
1,
#
Lv$`(#+).*;\1
$.($.1*$1
N`
-1G`
^$
1

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। কমা-বিচ্ছিন্ন স্ট্রিং হিসাবে ইনপুট নেয়। ব্যাখ্যা:

%`$
,;#

,শেষ স্ট্রিংটি শেষ করতে একটি যুক্ত করুন , ;স্ট্রিংগুলি #গুলি থেকে আলাদা করতে এবং #কাউন্টার হিসাবে একটি যুক্ত করুন।

+%(`
)

আর সাবস্কিটিশন না হওয়া অবধি ব্লকের পুনরাবৃত্তি করুন (কারণ প্রতিটি স্ট্রিং এখন কেবলমাত্র এক ডিজিট দীর্ঘ)।

(\d\d.+;#)#*
$1¶$&¶$&#

প্রথম লাইনে কাউন্টারটি 1 এ সেট করে এবং শেষ লাইনে এটি বাড়িয়ে রেখাকে ত্রিভুজ করুন।

\G\d(\d+,)|\G((;#+¶|,)\d)\d+
$1$2

প্রথম লাইনে, প্রতিটি স্ট্রিংয়ের প্রথম অঙ্কটি মুছুন, দ্বিতীয় লাইনে থাকাকালীন সমস্ত অঙ্কটি মুছুন তবে প্রথমটি।

r`((11)|\d\d)(\d*,;?#*)\G
$#2$3

তৃতীয় লাইনে, বিটওয়াইস এবং প্রথম দুটি অঙ্ক একসাথে।

1,
#

এই মুহুর্তে, প্রতিটি লাইনে দুটি মান থাকে, ক) একটি অনুভূমিক প্রস্থের কাউন্টার এবং খ) বিটওয়াসা এবং প্রতিটি স্ট্রিং থেকে নেওয়া অনেকগুলি বিট। বাকী যে কোনও 1গুলিকে এস তে রূপান্তর করুন #যাতে সেগুলি কাউন্টারের সাথে তুলনা করা যায়।

Lv$`(#+).*;\1
$.($.1*$1

1মূল ইনপুটটিতে s এর স্কোয়ারের সাথে মিলে কাউন্টারের (অনুভূমিকভাবে) মেলে এমন কোনও রান (উল্লম্বভাবে) সন্ধান করুন এবং দৈর্ঘ্যটি বর্গক্ষেত্র করুন।

N`

সংখ্যা অনুসারে বাছাই করুন।

-1G`

সবচেয়ে বড় নিন।

^$
1

বিশেষ ক্ষেত্রে কে শূন্য ম্যাট্রিক্স।


2

জাভাস্ক্রিপ্ট, 92 বাইট

a=>(g=w=>a.match(Array(w).fill(`1{${w}}`).join(`..{${W-w}}`))?w*w:g(w-1))(W=a.indexOf`,`)||1


2

Recursion! নিস!
জাকারি

@ জ্যাচারý ধন্যবাদ প্রকৃতপক্ষে, পুনরাবৃত্তির পরিবর্তে আমি monadic f এর জন্য k এর f \ x এর মতো কিছু পছন্দ করতাম, যা কনভার্জেশন অবধি (x; fx; ffx; ...), তবে এপিএলে (এখনও) এর সমতুল্য নেই। ⍣≡ দিয়ে এটি করতে অনেকগুলি বাইট লাগে।
এনজিএন

2

পাইথন 2 , 117 109 বাইট

আমার একটি অতিরিক্ত বাইট ব্যয় করে এমন একটি অদক্ষতা উল্লেখ করার জন্য @ ইটিনকে ক্রেডিট।

lambda s:max(i*i for i in range(len(s))if re.search(("."*(s.find(',')-i+1)).join(["1"*i]*i),s))or 1
import re

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

কমা-বিচ্ছিন্ন স্ট্রিং হিসাবে ইনপুট নেয়। এটি একটি রেজেক্স-ভিত্তিক পদ্ধতির যা 111.....111.....111স্কোয়ারের সমস্ত সম্ভাব্য মাপের ফর্মের নিদর্শনগুলির সাথে ইনপুট স্ট্রিংয়ের সাথে মেলে চেষ্টা করে ।

আমার গণনায়, বেনামে ল্যাম্বডা দিয়ে এটি করা সংজ্ঞায়িত ফাংশন বা একটি সম্পূর্ণ প্রোগ্রামের চেয়ে কেবলমাত্র ছোট sh or 1শেষ অংশ অদ্ভুত প্রান্ত ক্ষেত্রে, যেখানে আমরা আবশ্যক আউটপুট হ্যান্ডেল করতে শুধুমাত্র প্রয়োজনীয় 1যদি ইনপুটে কোনো বেশী।


2

পাইথন 2 , 116 115 117 109 বাইট

আমাকে আরও গল্ফ সাহায্য করার জন্য এবং তার চালাক এবং প্রাথমিক সমাধানের জন্য @ কিরিলকে কৃতিত্ব

সম্পাদনা করুন : ল্যাম্বডা ব্যবহার করে 1 বাইট গল্ফ করা, আমি জানি না যে এটি কোনও ভেরিয়েবলকে নির্ধারণ করা বাইট গণনা অনুসারে গণনা করা হয় না।

সম্পাদনা 2 : কিরিল উল্লেখ করেছেন যে আমার সমাধানগুলি এমন ক্ষেত্রে কাজ করে না যেখানে কেবল ইনপুট থাকে1 গুলি , আমাকে এটি ঠিক করতে হয়েছিল এবং দুটি মূল্যবান বাইট হারিয়েছি ...

সম্পাদনা 3 : কিরিলকে আরও গল্ফিং ধন্যবাদ

কমা দ্বারা পৃথক করা স্ট্রিং নেয়, পূর্ণসংখ্যা ফেরত দেয়।

lambda g:max(i*i for i in range(len(g))if re.search(("."*(g.find(",")+1-i)).join(["1"*i]*i),g))or 1
import re

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

আমি স্বতন্ত্রভাবে একটি উত্তর পেয়েছি যা কিরিলের একটির নিকটবর্তী, অর্থাৎ রেজেক্স ভিত্তিক, আমি ব্যবহার করি re.search এবং এdef

এটি একটি ক্রমবর্ধমান বৃহত বর্গক্ষেত্রের সাথে মেলে প্রতিটি লুপের সময় নির্মিত একটি রেজেক্স ব্যবহার করে এবং বৃহত্তম বা 1 প্রদান করে।


1
ভাল ifলাগল , আমি একরকম স্বয়ংক্রিয়ভাবে অ্যাপ্রোচটিকে "নিশ্চিতভাবেই অনেক দীর্ঘ" হিসাবে বাতিল করে দিয়েছি , তবে তারপরে ম্যাচটি থেকে বের করে কিছুটা মূল্য অর্জন করতে হবে other দুর্ভাগ্যক্রমে, আপনার সমাধানটি একটি পয়েন্ট মিস করে - আপনার ঠিক থাকতে পারে না range(l)- যখন কোনও শূন্য নেই তখনই এটি কেস মিস করবে। উদাহরণস্বরূপ, ২ য় পরীক্ষার কেস নিন এবং এটিকে সব 1 করান - এটি 16 হওয়া উচিত, 9 নয়
কিরিল এল।

অভি, আমি সমস্ত শূন্যের সাথে পরীক্ষা করার কথা ভেবেছিলাম কিন্তু সকলের সাথে নয় (চ্যালেঞ্জের মধ্যে কখনই উল্লেখ করা হয়নি ...)। আমি কিছু আপ করার চেষ্টা করব।
etene

@KirillL। যাইহোক, আপনি দ্রুত! যখন আপনি নিজের পোস্ট করেছিলেন তখন আমি আমার উত্তরে কাজ করে যাচ্ছিলাম এবং যখন দেখলাম আমাদের পদ্ধতিগুলি একই রকম ছিল ... তখন কাছাকাছি স্তরটি চিত্তাকর্ষক।
etene

1
আরো কয়েকটি Golfed সদৃশ পরিত্রাণ পেয়ে বাইট find। এখন যেহেতু আমাদের কোডগুলি আর অভিন্ন নয়, আমি আপনাকে কমপক্ষে একে অপরের থেকে স্পষ্টত ভুলগুলি সমাধান করার পরামর্শ দিই - আপনার ক্ষেত্রে ("1"*i,)তালিকার পরিবর্তে টুপল ব্যবহার করে অতিরিক্ত বাইট আসে ।
কিরিল এল।

আপনাকে ধন্যবাদ, হ্যাঁ বেহুদা টিপলটি আমার পক্ষে বেশ বোকা। এবং অতিরিক্ত অতিরিক্ত find, এটি আপনার চালাক ছিল।
etene

2

রুবি -n , 63 বাইট

p (1..l=$_=~/,|$/).map{|i|/#{[?1*i]*i*(?.*(l-i+1))}/?i*i:1}.max

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

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

রুবি , 70 68 বাইট

->s{(1..l=s=~/,|$/).map{|i|s=~/#{[?1*i]*i*(?.*(l-i+1))}/?i*i:1}.max}

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




1

ক্লোজার, 193 বাইট

#(apply max(for [f[(fn[a b](take-while seq(iterate a b)))]R(f next %)R(f butlast R)n[(count R)]c(for[i(range(-(count(first R))n -1)):when(apply = 1(for[r R c(subvec r i(+ i n))]c))](* n n))]c))

বাহ, জিনিস বাড়ানো: ও

কম গল্ফড:

(def f #(for [rows (->> %    (iterate next)    (take-while seq)) ; row-postfixes
              rows (->> rows (iterate butlast) (take-while seq)) ; row-suffixes
              n    [(count rows)]
              c    (for[i(range(-(count(first rows))n -1)):when(every? pos?(for [row rows col(subvec row i(+ i n))]col))](* n n))] ; rectangular subsections
          c))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.