দূষিত স্কোয়ার


17

ভূমিকা

আসুন নীচের বর্গটি পর্যবেক্ষণ করুন, কেবলমাত্র অঙ্কগুলি নিয়ে 0 - 9:

1034
4167
8414
3542

এই স্কোয়ারের বাইরের শেলটি হ'ল:

1034
4  7
8  4
3542

তাই আমরা প্রয়োজন এটা শূন্য রয়েছে ছুলা বাইরের শেল বন্ধ, যাব:

16
41

এই স্কোয়ারের বাইরের শেলটি হ'ল:

16
41

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

কাজটি

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

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

পরীক্ষার কেস 1:

Input         Output

1234          1234
2345          2345
3456          3456
4567          4567

পরীক্ষার কেস 2:

Input         Output

123           123
204           204
346           346

পরীক্ষার কেস 3:

Input         Output

101           1
010           
101           

পরীক্ষার কেস 4:

Input         Output

000           (none)
000
000

এটি , তাই সর্বনিম্ন পরিমাণ বাইটের সাথে জমাটি জয়!


আমি উদাহরণটি 416\n841\n354\n(নীচে-বাম কোণে) তৈরি করতে পারি না ?
লিকি নুন

ঠিক আছে, আপনি বলেছিলেন " বৃহত্তম দূষিত বর্গ "
লিকি নুন

ত্রুটি অনুমোদিত?
লিকি নুন

@ কেন্নি লাউ আপনি শেষ পরীক্ষার মামলায় বলতে চান? হ্যাঁ, যতক্ষণ না এটি আউটপুট 0বা এ জাতীয় কিছু না করে।
আদনান

2
"সংখ্যাগুলির স্কোয়ার" "অঙ্কের স্কোয়ার" হিসাবে আরও ভালভাবে বর্ণিত হবে
মেগো

উত্তর:


6

জেলি , 19 16 বাইট

Fœ^F}P
ḊṖZµ⁺⁸ßç?

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

ḊṖZµ⁺⁸ßç?  Main link. Argument: M (2D list)

Ḋ          Dequeue; remove the first row.
 Ṗ         Pop; remove the last row.
  Z        Zip; transpose rows with columns.
   µ       Combine the chain to the left into a link.
    ⁺      Copy the link, executing it twice.
           The copy removes the first and last column and restores the orientation.
       ç?  If the helper link returns a non-zero integer:
     ⁸       Return M unmodified.
      ß      Else, recursively call the main link on the "peeled" M.


Fœ^F}P     Helper link. Arguments: P ("peeled" M), M (unmodified)

F          Flatten P.
   F}      Flatten M.
 œ^        Perform multiset symmetric difference, removing the elements of P from
           the elements of M, respecting multiplicities, leaving precisely the
           elements of the outer shell.
     P     Return the product of the remaining elements.

8

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

8 পেট্রিক রবার্টসকে ধন্যবাদ 8 বাইট সংরক্ষিত!

l=a=>a.slice(1,-1)
p=a=>l(a).map(l)
c=a=>a.join``.replace(/[^0]/g,"")
s=a=>c(p(a))<c(a)?s(p(a)):a

ফাংশনটি সংজ্ঞায়িত করে s, যা ইনপুট হিসাবে 2D অ্যারের পূর্ণসংখ্যার পূর্বে পূর্ণসংখ্যার 2D অ্যারে প্রদান করে।

কিভাবে এটা কাজ করে

  • ফাংশন l: একটি অ্যারে দেওয়া a, তার প্রথম এবং শেষ সূচকগুলি ছাড়াই একটি অনুলিপি প্রদান করে।

  • ফাংশন p: একটি 2 ডি অ্যারে দেওয়া হয়েছে a, lপ্রথম এবং শেষ সারিটি সরিয়ে ফেলার জন্য কল দেয়, তারপরে প্রতিটি অবশিষ্ট সারির lজন্য মুঠ এবং শেষ কলামটি সরিয়ে ফেলার জন্য কল এটি পেঁয়াজের খোসা ছাড়ায়।

  • ফাংশন c: একটি 2D অ্যারের দেওয়া a, একটি স্ট্রিং, যাতে শুধুমাত্র রয়েছে ফেরৎ 0এর stringified আকারে গুলি a

  • ফাংশন s: একটি 2 ডি অ্যারে দেওয়া, দেওয়া অ্যারের খোসা ফর্মটিতে aকল cকরেp এবং অ্যারে নিজেই করেন। খোসা ফর্মটি 0মূলের চেয়ে কম এস আছে কিনা তা নির্ধারণ করতে এই স্ট্রিংগুলি ডিক্সিকোগ্রাফিকভাবে তুলনা করুন । যদি তা হয়ে থাকে তবে মূলটি দূষিত, তাই sখোলা ফর্মটিতে পুনরাবৃত্তভাবে কল করুন। অন্যথায় আসলটি ফিরিয়ে দিন।


2
আপনি ইন a.lengthএর endযুক্তি থেকে সরিয়ে 8 টি বাইট সংরক্ষণ করতে পারেন । একটি নেতিবাচক সূচক হতে অনুমতি দেওয়া হয়। array.slicelend
প্যাট্রিক রবার্টস

7

রেটিনা , 60 57 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে। পেছনের লাইনফিডটি তাৎপর্যপূর্ণ।

+`(?<=(?=.*0|[^_]+(¶0|0¶|0.*$))^[^_]*)(^.+¶|¶.+$|.?\b.?)

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

ব্যাখ্যা

পেছনের লাইনফিডের কারণে, এটি রেগেক্সের পরে সমস্ত মিল খুঁজে পায় `এবং সেগুলি ইনপুট থেকে সরিয়ে দেয়। নেতৃস্থানীয় কারণে+ বারবার এটি করা হয় যতক্ষণ না আউটপুট পরিবর্তন বন্ধ হয়ে যায় (যা হ'ল রেজেক্সের মিল বন্ধ হবে)।

রেগেক্স নিজেই, এটি দুটি অংশ নিয়ে গঠিত:

(?<=(?=.*0|[^_]+(¶0|0¶|0.*$))^[^_]*)

এই অংশটি 0বাইরের শেলের কোথাও আছে কিনা তা পরীক্ষা করে । এটি রেগেক্স ইঞ্জিনের "কার্সর" কে স্ট্রিংয়ের শুরুতে লুকবিহিন্ড দিয়ে সরিয়ে নিয়ে যায় (আমরা [^_]উভয় অঙ্ক এবং লাইনফিডের সাথে মিলিয়ে ব্যবহার করি ):

(?<=...^[^_]*)

এবং তারপরে সেই অবস্থান থেকে আমরা 0প্রথম লাইনে লাইনফিডের সাথে সংলগ্ন অথবা শেষ লাইনের মধ্যে একটি সন্ধানের জন্য সন্ধানে ব্যবহার করি:

(?=.*0|[^_]+(¶0|0¶|0.*$))

তারপরে আসল ম্যাচটি প্রথম লাইন (এর পেছনের লাইনফিড সহ), শেষ লাইন (তার শীর্ষস্থানীয় লাইনফিড সহ) বা একটি লাইনের প্রথম বা শেষ চরিত্রের সমন্বয়ে গঠিত হবে, যেখানে আমরা সীমানা শব্দের \bসাথে লাইনটির শুরু / শেষ হিসাবে ব্যবহার করি না নোঙ্গর:

(^.+¶|¶.+$|.?\b.?)

6

এমএটিএল , 26 21 বাইট

t"t5LY)y5LZ)h?}6Lt3$)

ইনপুট নিম্নলিখিত বিন্যাসে হয়

[1 0 3 4; 4 1 6 7; 8 4 1 4; 3 5 4 2]

অন্য চারটি পরীক্ষার মামলা হচ্ছে

[1 2 3 4; 2 3 4 5; 3 4 5 6; 4 5 6 7]
[1 0 1; 0 1 0; 1 0 1]
[1 2 3; 2 0 4; 3 4 6]
[0 0 0; 0 0 0; 0 0 0]

প্রোগ্রামটি শেষ পরীক্ষার ক্ষেত্রে ত্রুটিযুক্ত, তবে সঠিক আউটপুট তৈরি করে (যা কিছুই নয়)। লক্ষ্য করার জন্য @ ডেনিসকে ধন্যবাদ!

এটি অনলাইন চেষ্টা করুন! । বা সমস্ত পরীক্ষার কেস যাচাই করুন (এতে মোড়ানোর কোড অন্তর্ভুক্ত)।

ব্যাখ্যা

এটি ইনপুট ম্যাট্রিক্সের কলামগুলির সংখ্যা হিসাবে বহুগুণ পুনরাবৃত্তি করে যা যথেষ্ট পরিমাণে বেশি। প্রতিটি পুনরাবৃত্তিতে শেলটি তার মানগুলির উপর নির্ভর করে মুছে ফেলা বা রাখা হয়।

t            % Take a matrix as input. Duplicate
"            % For each column (i.e. repeat that many times)
  t5LY)      %   Duplicate top of the stack. Extract first and last rows
  y5LZ)      %   Duplicate the element below the top. Extract first and last columns
  h          %   Concatenate the two arrays into a row vector
  ?          %   If all its entries are non-zero: do nothing
  }          %   Else
    6Lt3$)   %     Get the central part
             % End if, end for. Implicitly display

5

পাইথ, 19 বাইট

.W}\0.-`H`JutCPG2HJ

পরীক্ষা স্যুট

.W}\0.-`H`JutCPG2HJ
.W                     While the first function returns true, apply the second
                       function, starting with the input.
           u    2H     Apply the following twice to the input:
              PG       Remove the last row
             C         Transpose
            t          Remove the first row
                       This removes the outermost shell.
          J            Save it to J
         `             Stringify the matrix
       `H              Stringify the input
     .-                Multiset difference
  }\0                  Check if there is a '0' in the resulting string.
                  J    If that succeeds, update the current value to J.
                       When it fails, return the current value.

4

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

f=s=>/^.*0|0\n|\n0|0.*$/.test(s)?f(s.replace(/^.*\n?|.(.*).|\n.*$/g,"$1")):s

প্রতিটি সারি পৃথক করে নতুন লাইনের সাথে স্ট্রিং আকারে ইনপুট নেয় (তবে কোনও শীর্ষস্থানীয় বা নতুন লাইনের পিছনে নেই)। ব্যাখ্যা: /^.*0|0\n|\n0|0.*$/যখন কোন RegExp যে ম্যাচ দূষিত স্কোয়ার হয় /^.*\n?|.(.*).|\n.*$/যে মিলগুলি স্কোয়ারের অংশের প্রয়োজন নেই, মুছে ফেলা হবে যে জন্য ব্যতীত (.*)যা দরকার রাখা যাইবে। (এটি নিউলাইন চরিত্রের জন্য সামনে বা পিছনে চেয়ে চেয়ে ছোট))


4

পার্ল 5, 63 + 3 = 66 বাইট

$_=<>;s/\A.*\n?|^.|.$|\n.*\Z//mg while/\A.*0|0$|^0|0.*\Z/;print

-0পতাকা প্রয়োজন । ইনপুটটিতে ট্রেলিং করা নতুন লাইনের অক্ষর থাকা উচিত নয়


3

পাইকে, 29 বাইট

"D3lt%sBR,"2*ER3*I
/)tOmtmOr;

এখানে চেষ্টা করুন!

এছাড়াও 29 বাইট

QeQhQmhQme]4sBI
/)QtOmtmO=Qr;

এখানে চেষ্টা করুন!


2
আমি উভয় লিঙ্কে ত্রুটি পেয়েছি। "রান" চাপার আগে আমাদের কি কিছু করা দরকার!
লুইস মেন্ডো

আমার সম্ভবত উল্লেখ করা উচিত ছিল যে দৌড়ানোর সময় সর্বদা ত্রুটি থাকবে। আউটপুট কোথাও দ্বিতীয় লাইনে রয়েছে (এটি আসলে মুদ্রিত এবং ত্রুটির বার্তার অংশ নয়)
ব্লু

2

পাইথ , 31 30 বাইট

L+hbeb.W!*F+1iRTs+yHyMHPtmPtdZ

পরীক্ষা স্যুট. (শেষ টেস্টকেস ত্রুটি)

উন্নতি: অংশটি বহির্মুখী লুপ এক্সট্রাক্টরকে একটি ফাংশন তৈরি করেছে ( L+hbeb)।

পূর্ববর্তী 31-বাইট সংস্করণ:

.W!*F+1iRTs++hHm+hdedHeHPtmPtdZ

কিভাবে এটা কাজ করে:

কোডটি মূলত: আউটারশেলের পণ্য শূন্য হওয়ার পরে এটি খোসা ছাড়ান।

আসুন আমরা মূল কোডটি বিশ্লেষণ করি (Q এখানে অন্তর্ভুক্ত):

.W<lambda:H><lambda:Z>Q

Q(ইনপুট) থেকে শুরু করুন, whileপ্রথম লাম্বদা, দ্বিতীয় ল্যাম্বদা করুন।

প্রথম অংশ হবে ল্যামডা মধ্যে H:

!*F+1iRTs++hHm+hdedHeH

দ্বিতীয় অংশ হবে ল্যামডা মধ্যে Z:

PtmPtdZ

প্রথম অংশ

!*F+1iRTs++hHm+hdedHeH

আসুন এটি বিশ্লেষণ করুন:

s++hHm+hdedHeH

s++             Concatenate:
   hH              1. the first row
     m+hdedH       2. the first and last item of each row
            eH     3. the last row

যেহেতু পাইথ প্রিফিক্স স্বরলিপি ব্যবহার করে তাই এর পরে মূল্যায়ন করা হবে:

!*F+1iRT

     iRT  Convert each to integer
 *F+1     Product
!         Negate. If any element of the outer shell is zero, this would return 1.

দ্বিতীয় অংশ

PtmPtdZ
  mPtdZ   the inner of each row
Pt        the inner rows

2

গণিত, 78 বাইট

NestWhile[#[[a=2;;-2,a]]&,#,Count[{#[[b={1,-1}]],#[[;;,b]]},0,3]>0&]~Check~{}&

বেনামে ফাংশন, ম্যাট্রিক্স হিসাবে ইনপুট নেয়। মৃত্যুর সময় কার্যকর হতে পারে এমন কোনও ত্রুটি উপেক্ষা করুন।

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