ম্যাট্রিক্সের সমস্ত অ-শূন্য উপাদান সংযুক্ত আছে কিনা তা পরীক্ষা করুন


19

ইনপুট:

পরিসীমাতে পূর্ণসংখ্যাযুক্ত একটি ম্যাট্রিক্স [0 - 9]

চ্যালেঞ্জ:

সমস্ত অ-শূন্য উপাদান একে অপরের সাথে উল্লম্ব এবং / অথবা অনুভূমিকভাবে সংযুক্ত কিনা তা নির্ধারণ করুন।

আউটপুট:

একজন truthy মান যদি সব সংযুক্ত আছেন, এবং একটি falsy মান যদি নন-জিরো উপাদান / যে অন্যান্য উপাদান / গ্রুপ সংযুক্ত নেই দলগুলির।

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

পরীক্ষার কেসগুলি লাইন দ্বারা পৃথক করা হয়। পরীক্ষার কেসগুলি এখানে আরও সুবিধাজনক বিন্যাসে পাওয়া যাবে ( কুডোস থেকে দাদা )।

নিম্নলিখিতগুলি সমস্ত সংযুক্ত রয়েছে এবং সত্যের মানটি ফিরিয়ে আনতে হবে:

0
--- 
0 0
---
1 1 1
0 0 0
---
1 0 0
1 1 1
0 0 1
---
0 0 0 0 0 0
0 0 3 5 1 0
0 1 0 2 0 1
1 1 0 3 1 6
7 2 0 0 3 0
0 8 2 6 2 9
0 0 0 0 0 5

নিম্নলিখিতগুলি সমস্ত সংযুক্ত নেই এবং এগুলি একটি মিথ্যা মানটি ফিরিয়ে আনবে:

0 1
1 0
---
1 1 1 0
0 0 0 2
0 0 0 5
---
0 0 5 2
1 2 0 0
5 3 2 1
5 7 3 2
---
1 2 3 0 0 5
1 5 3 0 1 1
9 0 0 4 2 1
9 9 9 0 1 4
0 1 0 1 0 0

এটি , তাই প্রতিটি ভাষার সংক্ষিপ্ততম জমাটি জয়লাভ করে। ব্যাখ্যা উত্সাহিত হয়!


এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত ।


সম্ভবত ইনপুটটিতে কেবলমাত্র একটি এবং জিরো (বা ট্রুথিসি এবং ফলসিস) থাকতে হবে, কারণ এটি মূলত সংযুক্ত উপাদানগুলি সম্পর্কে।
নিকোনিহার

আমরা কি 1 ডি অ্যারে এবং বহু সংখ্যক কলাম হিসাবে ইনপুট নিতে পারি?
ovs

@ নিশ্চিত। আমি দেখতে পাচ্ছি না যে এটি ইতিমধ্যে উত্তর দিয়ে থাকা অন্য লোকদের চেয়ে কোনও সুবিধা দেয়।
স্টিভি গ্রিফিন

2
সম্পর্কিত : সমস্ত ননজারো উপাদানগুলিকে সংযুক্ত করতে আপনাকে কতটি শূন্যের পরিবর্তন দরকার
ডাইলানান

সম্পর্কিত : উপাদানগুলির সংখ্যা গণনা করুন (তবে ত্রিভুজ এন্ট্রি সংলগ্ন)।
মিশা লাভরভ

উত্তর:


9

রেটিনা 0.8.2 , 80 77 বাইট

T`d`@1
1`1
_
+m`^((.)*)(1|_)( |.*¶(?<-2>.)*(?(2)(?!)))(?!\3)[1_]
$1_$4_
^\D+$

এটি অনলাইন চেষ্টা করুন! সম্পাদনা করুন: @ ফ্রাইআমএইজিজিম্যানকে 1 বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা:

T`d`@1

@এস এবং 1এস এর অ্যারে সরলীকৃত করুন ।

1`1
_

একটি পরিবর্তন 1একটি থেকে _

+m`^((.)*)(1|_)( |.*¶(?<-2>.)*(?(2)(?!)))(?!\3)[1_]
$1_$4_

বন্যা ভরাট থেকে _সংলগ্ন 1গুলি।

^\D+$

কোনও 1বাম আছে কিনা তা পরীক্ষা করুন ।


@ ফ্রাইআম দ্য এজম্যান ধন্যবাদ, এবং আপনি আমাকে আরও একটি দুটি বাইট কীভাবে সংরক্ষণ করবেন সে সম্পর্কে ধারণা দিয়েছেন!
নীল

7

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

একটি বুলিয়ান ফেরত দেয়।

m=>!/[1-9]/.test((g=(y,x=0)=>1/(n=(m[y]||0)[x])&&!z|n?(m[y++][x]=0,z=n)?g(y,x)&g(--y-1,x)&g(y,x+1)||g(y,x-1):g(m[y]?y:+!++x,x):m)(z=0))

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

মন্তব্য

রিকার্সিভ ফাংশন জি () প্রথমে একটি শূন্য-কক্ষের সন্ধান করে (যতক্ষণ না বিশ্বব্যাপী সংজ্ঞায়িত পতাকা জেড 0 তে সেট করা থাকে ) এবং তারপরে সেখান থেকে বন্যা-ভরাট শুরু হয় ( z হিসাবে শীঘ্রই ! = 0 )।

m =>                               // given the input matrix m
  !/[1-9]/.test((                  // test whether there's still a non-zero digit
    g = (y, x = 0) =>              //   after recursive calls to g(), starting at (x=0,y=0):
      1 / (n = (m[y] || 0)[x]) &&  //     n = current cell; if it is defined:
      !z | n ? (                   //       if z is zero or n is non-zero:
          m[y++][x] = 0,           //         we set the current cell to zero
          z = n                    //         we set z to the current cell
        ) ?                        //         if z is non-zero:
          g(y, x) &                //           flood-fill towards bottom
          g(--y - 1, x) &          //           flood-fill towards top
          g(y, x + 1) ||           //           flood-fill towards right
          g(y, x - 1)              //           flood-fill towards left
        :                          //         else:
          g(m[y] ? y : +!++x, x)   //           look for a non-zero cell to start from
      :                            //       else:
        m                          //         return the matrix
    )(z = 0)                       //   initial call to g() + initialization of z
  )                                // end of test()

7

এমএটিএল , 7 বাইট

4&1ZI2<

এই ম্যাট্রিক্স হিসাবে সব বেশী ধারণকারী দেয় truthy আউটপুট, অথবা অন্তত একটি শূন্য হিসাবে সমন্বিত একটি ম্যাট্রিক্স falsyএটি অনলাইন চেষ্টা করুন!

আপনি ফুটারে একটি if- elseশাখা যুক্ত করে সত্যতা / মিথ্যাচার যাচাই করতে পারেন ; এটাও চেষ্টা করে দেখুন!

বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

4       % Push 4 (defines neighbourhood)
&       % Alternative input/output specification for next function
1ZI     % bwlabeln with 2 input arguments: first is a matrix (implicit input),
        % second is a number (4). Nonzeros in the matrix are interpreted as
        % "active" pixels. The function gives a matrix of the same size
        % containing positive integer labels for the connected components in 
        % the input, considering 4-connectedness
2<      % Is each entry less than 2? (That would mean there is only one
        % connected component). Implicit display

1
ও.পি. এর নোট: যদি কোনও সন্দেহ থাকে: ফলাফলগুলি পুরোপুরি ভাল এবং লিঙ্কযুক্ত মেটা পোস্টকে মেনে চলে।
স্টিভি গ্রিফিন

এটি আমার মনকে উড়িয়ে দিচ্ছে যে এমএটিএল / মতলব সংখ্যার একটি অ্যারেটিকে সত্যবাদী হিসাবে বিবেচনা করে যদি এটিতে কোনও জিরো থাকে না। mathworks.com/help/matlab/ref/if.html (আগের মন্তব্য মুছে ফেলা হয়েছে)
স্পার

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


4

সি, 163 বাইট

দুটি বাইট সংরক্ষণ করার জন্য @ ব্যবহারকারী 202729 কে ধন্যবাদ!

*A,N,M;g(j){j>=0&j<N*M&&A[j]?A[j]=0,g(j+N),g(j%N?j-1:0),g(j-N),g(++j%N?j:0):0;}f(a,r,c)int*a;{A=a;N=c;M=r;for(c=r=a=0;c<N*M;A[c++]&&++r)A[c]&&!a++&&g(c);return!r;}

প্রথম অ-শূন্য উপাদান না পাওয়া পর্যন্ত ম্যাট্রিক্সের মধ্য দিয়ে লুপ হয়। তারপরে কিছুক্ষণের জন্য লুপিং বন্ধ করে এবং পুনরুক্তিভাবে পাওয়া উপাদানটির সাথে সংযুক্ত প্রতিটি অ-শূন্য উপাদানকে শূন্যে সেট করে। তারপরে প্রতিটি ম্যাট্রিক্স এখন শূন্য কিনা তা পরীক্ষা করে বাকি ম্যাট্রিক্সের মধ্য দিয়ে লুপ করে।

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

Unrolled:

*A, N, M;

g(j)
{
    j>=0 & j<N*M && A[j] ? A[j]=0, g(j+N), g(j%N ? j-1 : 0), g(j-N), g(++j%N ? j : 0) : 0;
}

f(a, r, c) int*a;
{
    A = a;
    N = c;
    M = r;

    for (c=r=a=0; c<N*M; A[c++] && ++r)
        A[c] && !a++ && g(c);

    return !r;
}

2

পার্ল, 80 79 78 73 70 বাইট

+2জন্য অন্তর্ভুক্ত0a

STDIN এ ফাঁকা ছাড়াই ইনপুট ম্যাট্রিক্স দিন (বা বাস্তবে সারি হিসাবে কোনও ধরণের সাদা অংশে পৃথক করা হয়েছে)

perl -0aE 's%.%$".join"",map chop,@F%seg;s%\b}|/%z%;y%w-z,-9%v-~/%?redo:say!/}/'
000000
003510
010201
110316
720030
082629
000005
^D

কোনও ফাইল রাখলে পড়তে সহজ:

#!/usr/bin/perl -0a
use 5.10.0;
s%.%$".join"",map chop,@F%seg;s%\b}|/%z%;y%w-z,-9%v-~/%?redo:say!/}/

1

জাভা 8, 226 বাইট

m->{int c=0,i=m.length,j;for(;i-->0;)for(j=m[i].length;j-->0;)if(m[i][j]>0){c++;f(m,i,j);}return c<2;}void f(int[][]m,int x,int y){try{if(m[x][y]>0){m[x][y]=0;f(m,x+1,y);f(m,x,y+1);f(m,x-1,y);f(m,x,y-1);}}catch(Exception e){}}

এটি বেশ খানিকটা সময় নিয়েছে, তাই আমি এখন কাজ করে আনন্দিত ..

ব্যাখ্যা:

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

m->{                   // Method with integer-matrix parameter and boolean return-type
  int c=0,             //  Amount of non-zero islands, starting at 0
      i=m.length,j;    //  Index integers
  for(;i-->0;)         //  Loop over the rows
    for(j=m[i].length;j-->0;)
                       //   Inner loop over the columns
      if(m[i][j]>0){   //    If the current cell is not 0:
        c++;           //     Increase the non-zero island counter by 1
        f(m,i,j);}     //     Separate method call to flood-fill the matrix
  return c<2;}         //  Return true if 0 or 1 islands are found, false otherwise

void f(int[][]m,int x,int y){
                        // Separated method with matrix and cell input and no return-type
  try{if(m[x][y]>0){    //  If the current cell is not 0:
    m[x][y]=0;          //   Set it to 0
    f(m,x+1,y);         //   Recursive call south
    f(m,x,y+1);         //   Recursive call east
    f(m,x-1,y);         //   Recursive call north
    f(m,x,y-1);}        //   Recursive call west
  }catch(Exception e){}}//  Catch and swallow any ArrayIndexOutOfBoundsExceptions
                        //  (shorter than manual if-checks)


1

জেলি , 23 বাইট

FJṁa@µ«Ḋoµ€ZUµ4¡ÐLFQL<3

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


ব্যাখ্যা।

প্রোগ্রামটি প্রতিটি আকারের উপাদানগুলিকে বিভিন্ন সংখ্যার সাথে লেবেল দেয়, তারপরে 3 টিরও কম সংখ্যক আছে কিনা তা পরীক্ষা করে দেখুন। (সহ 0)

ম্যাট্রিক্সের একটি সারি বিবেচনা করুন।

«Ḋo   Given [1,2,3,0,3,2,1], return [1,2,3,0,2,1,1].
«     Minimize this list (element-wise) and...
 Ḋ      its dequeue. (remove the first element)
      So min([1,2,3,0,3,2,1],
             [2,3,0,3,2,1]    (deque)
      ) =    [1,2,0,0,2,1,1].
  o   Logical or - if the current value is 0, get the value in the input.
         [1,2,0,0,2,1,1] (value)
      or [1,2,3,0,3,2,1] (input)
      =  [1,2,3,0,2,1,1]

ম্যাট্রিক্সের সমস্ত সারি এবং কলামগুলির জন্য এই ক্রিয়াকলাপটি বারবার প্রয়োগ করুন, শেষ পর্যন্ত সমস্ত আকারের উপাদানগুলির একই লেবেল থাকবে।

µ«Ḋoµ€ZUµ4¡ÐL  Given a matrix with all distinct elements (except 0),
               label two nonzero numbers the same if and only if they are in
               the same morphological component.
µ«Ḋoµ          Apply the function above...
     €           for ach row in the matrix.

      Z        Zip, transpose the matrix.
       U       Upend, reverse all rows in the matrix.
               Together, ZU rotates the matrix 90° clockwise.
         4¡    Repeat 4 times. (after rotating 90° 4 times the matrix is in the
               original orientation)
           ÐL  Repeat until fixed.

এবং পরিশেষে...

FJṁa@ ... FQL<3   Main link.
F                 Flatten.
 J                Indices. Get `[1,2,3,4,...]`
  ṁ               old (reshape) the array of indices to have the same
                  shape as the input.
   a@             Logical AND, with the order swapped. The zeroes in the input
                  mask out the array of indices.
      ...         Do whatever I described above.
          F       Flatten again.
           Q      uniQue the list.
            L     the list of unique elements have Length...
             <3   less than 3.

আনুষ্ঠানিক অনুগ্রহ যদি আপনি লিনিয়ার সময়ে এটি করতে পারেন। আমি মনে করি এটি জেলিতে সম্ভব নয়, এমনকি ¦ও (এন) লাগে।
ব্যবহারকারী 202729

(পাইথন
ইওল

1

Haskell, , 132 বাইট

 \m->null.snd.until(null.fst)(\(f,e)->partition(\(b,p)->any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f])e).splitAt 1.filter((/=0).(m!)).indices$m

থেকে নিষ্কাশিত সমাধান Hitori থেকে প্রহেলিকা

indices m তালিকাভুক্ত (line,cell)ইনপুট গ্রিডের অবস্থানগুলি ।

filter((/=0).(m!)) শূন্য-না মান সহ সমস্ত অবস্থান ফিল্টার করে।

splitAt 1 প্রথম সদস্যকে বিশ্রাম তালিকার পাশের সিঙ্গলটন তালিকায় বিভাজনগুলি।

any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f](b,p)সীমান্ত স্পর্শ করে কিনা তা বলেf

\(f,e)->partition(\(b,p)->touches(b,p)f)e [এখনও] স্পর্শকারীদের থেকে স্পর্শকারীদের বিভক্ত করুন।

until(null.fst)advanceFrontier সীমানা আর অগ্রসর না হওয়া পর্যন্ত এটি পুনরাবৃত্তি করে।

null.snd ফলাফলটি দেখুন যে সমস্ত লোকেশন পৌঁছাতে হবে তা সত্যই পৌঁছেছে কিনা।

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


1

গ্রিম , 37 বাইট

C=[,0]&<e/\0{/e\0*0$e|CoF^0oX
e`C|:\0

ছাপে 1ম্যাচের জন্য এবং 0কোনো মিল জন্য। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

ননটার্মিনালটি এমন Cকোনও ননজারো চরিত্রের সাথে মেলে যা ইংরেজি পড়ার ক্রমে ম্যাট্রিক্সের প্রথম নোনজারো চরিত্রের সাথে সংযুক্ত।

C=[,0]&<e/\0{/e\0*0$e|CoF^0oX
C=                             A rectangle R matches C if
  [,0]                         it is a single character other than 0
      &                        and
       <                       it is contained in a rectangle S which matches this pattern:
        e/\0{/e\0*0$e           R is the first nonzero character in the matrix:
        e                        S has an edge of the matrix over its top row,
         /0{/                    below that a rectangle of 0s, below that
             e\0*0$e             a row containing an edge, then any number of 0s,
                                 then R (the unescaped 0), then anything, then an edge.
                    |CoF^0oX    or R is next to another match of C:
                     CoF         S is a match of C (with fixed orientation)
                        ^0       followed by R,
                          oX     possibly rotated by any multiple of 90 dergees.

কিছু ব্যাখ্যা: eশূন্য প্রস্থ বা উচ্চতার একটি আয়তক্ষেত্রের সাথে মেলে যা ইনপুট ম্যাট্রিক্সের প্রান্তের অংশ, এবং $একটি "ওয়াইল্ডকার্ড" যা কোনও কিছুর সাথে মেলে। এক্সপ্রেশন নীচে e/\0{/e\0*0$eহিসাবে চাক্ষুষ করা যেতে পারে:

+-e-e-e-e-e-e-e-+
|               |
|      \0{      |
|               |
+-----+-+-------+
e \0* |0|   $   e
+-----+-+-------+

এক্সপ্রেশনটি CoX^0oXআসলে পার্স করা হয় ((CoF)0)oX; oFএবংoX পোস্টসাফিক্স অপারেটর ও টোকেন উপায়ে সংযুক্তকরণের অনুভূমিক সংযুক্তকরণের হয়। ^একটি উচ্চ প্রাধান্য তারপর সন্নিধি দেয় oXযাতে ঘূর্ণন সমগ্র উপ-অভিব্যক্তি প্রয়োগ করা হয়। এটি oFঘোরার Cপরে এর ওরিয়েন্টেশনকে সংশোধন করে oX; অন্যথায় এটি ঘোরানো ইংলিশ পড়ার ক্রমে প্রথম ননজারো স্থানাঙ্কের সাথে মেলে।

e`C|:\0
e`       Match entire input against pattern:
    :    a grid whose cells match
  C      C
   |     or
     \0  literal 0.

এর অর্থ হ'ল সমস্ত ননজারো অক্ষর অবশ্যই প্রথমটির সাথে সংযুক্ত থাকতে হবে। গ্রিড নির্দিষ্টকরণকারী: প্রযুক্তিগতভাবে একটি পোস্টফিক্স অপারেটর, তবে C|:\0এটি সিনট্যাকটিক চিনি (C|\0):



0

পাইথন 2 , 211 163 150 বাইট

m,w=input()
def f(i):a=m[i];m[i]=0;[f(x)for x in(i+1,i-1,i+w,i-w)if(x>=0==(i/w-x/w)*(i%w-x%w))*a*m[x:]]
f(m.index((filter(abs,m)or[0])[0]))<any(m)<1>q

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

আউটপুটটি প্রস্থান কোডের মাধ্যমে হয়। ইনপুটটি 1 ডি তালিকা এবং ম্যাট্রিক্সের প্রস্থ হিসাবে।

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