সদৃশ মান সহ সমস্ত (অ্যান্টি) ডায়াগোনাল স্পট করুন


17

চ্যালেঞ্জ:

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

[[aa,ab,ac,ad,ae,af],
 [ba,bb,bc,bd,be,bf],
 [ca,cb,cc,cd,ce,cf],
 [da,db,dc,dd,de,df]]

সমস্ত তির্যক এবং অ্যান্টি-কর্ণ হবে:

[[aa],[ab,ba],[ac,bb,ca],[ad,bc,cb,da],[ae,bd,cc,db],[af,be,cd,dc],[bf,ce,dd],[cf,de],[df],
 [af],[ae,bf],[ad,be,cf],[ac,bd,ce,df],[ab,bc,cd,de],[aa,bb,cc,dd],[ba,cb,dc],[ca,db],[da]]

উদাহরণ:

[[1,2,1,2,1,2],
 [1,2,3,4,5,6],
 [6,5,4,3,2,1],
 [2,1,2,1,2,1]]

সমস্ত তির্যক এবং অ্যান্টি-কর্ণ হবে:

[[1],[2,1],[1,2,6],[2,3,5,2],[1,4,4,1],[2,5,3,2],[6,2,1],[1,2],[1],
 [2],[1,6],[2,5,1],[1,4,2,1],[2,3,3,2],[1,2,4,1],[1,5,2],[6,1],[2]]

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

[[2,3,5,2],[1,4,4,1],[2,5,3,2],[1,4,2,1],[2,3,3,2],[1,2,4,1]]

সুতরাং আউটপুট হ'ল ডুপ্লিকেট সংখ্যাসহ ত্রিভুজ এবং অ্যান্টি-ডায়াগোনেলের পরিমাণ:

6

চ্যালেঞ্জ বিধি:

  • যদি ইনপুট ম্যাট্রিক্স খালি থাকে, কেবলমাত্র 1 টি সংখ্যা রয়েছে বা পুরো ম্যাট্রিক্সে কেবলমাত্র অনন্য সংখ্যা রয়েছে তবে আউটপুট সর্বদা থাকে 0
  • ইনপুটটি কেবল ইতিবাচক অঙ্কগুলি রাখার গ্যারান্টিযুক্ত [1,9] (এটি সম্পূর্ণ খালি না হলে)।
  • ম্যাট্রিক্স সর্বদা আয়তক্ষেত্রাকার হবে (অর্থাত্ সমস্ত সারি একই দৈর্ঘ্যের)।
  • I / O নমনীয়। ইনপুটটি পূর্ণসংখ্যার তালিকার একটি তালিকা হিসাবে নেওয়া যেতে পারে, বা 2D অ্যারের পূর্ণসংখ্যার স্ট্রিং হিসাবে, বা কোনও ম্যাট্রিক্স-অবজেক্ট ইত্যাদি স্ট্রিং ইত্যাদি You যদি এটি আপনার পছন্দের ভাষায় বাইটগুলি সংরক্ষণ করে।

সাধারণ নিয়ম:

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

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

Input:                     Output:

[[1,2,1,2,1,2],            6
 [1,2,3,4,5,6],
 [6,5,4,3,2,1],
 [2,1,2,1,2,1]]

[[]]                       0

[[1,2],                    0
 [3,4]]

[[1,1],                    2
 [1,1]]

[[9,9,9],                  6
 [9,9,9],
 [9,9,9]]

[[7,7,7,7],                8
 [7,7,7,7],
 [7,7,7,7]]

[[1,1,1],                  1
 [2,3,4],
 [2,5,1]]

[[1,8,4,2,9,4,4,4],        12
 [5,1,2,7,7,4,2,3],
 [1,4,5,2,4,2,3,8],
 [8,5,4,2,3,4,1,5]]

[[1,2,3,4],                4
 [5,6,6,7],
 [8,6,6,9],
 [8,7,6,5]]

উত্তর:


4

জেলি , 10 বাইট

ŒD;ŒdQƑÐḟL

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

বিকল্প:

ŒD;ŒdQƑ€¬S
ŒD;ŒdQƑ€ċ0

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

ŒD;ŒdQƑÐḟL – Monadic link / Full program.
  ;        – Join:
ŒD           – The diagonals
             with
   Œd        – The anti-diagonals.
       Ðḟ  – Discard the lists that are not:
     QƑ      – Invariant under deduplication.
         L – Length (count them).

10

আর , 92 86 82 78 বাইট

function(m,x=row(m),y=col(m),`|`=split,`^`=Map)sum(max^table^c(m|x-y,m|x+y)>1)

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

ব্যাখ্যা

প্রথমে, আমরা অতিরিক্ত ভেরিয়েবলগুলি এক্স এবং Y ঘোষণা করি যা যথাক্রমে সারি এবং কলাম সূচকগুলির জন্য দাঁড়িয়ে। তারপরে আমরা তাদের পার্থক্য এবং যোগফলটি নিয়ে তির্যক এবং অ্যান্টি-কর্ণগুলি বর্ণনা করতে পারি। যেমন 4x4 ম্যাট্রিক্সের জন্য:

এক্স-Y

0 -1 -2 -3 1 0 -1 -2 2 1 0 -1 3 2 1 0

এক্স+ +Y

2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8

এখন split(m, x-y)এবং split(m, x+y)ত্রিভুজ এবং অ্যান্টি-কর্ণগুলির প্রকৃত তালিকা উত্পাদন করুন, যা আমরা একসাথে যোগদান করি।

পরিশেষে, আমরা ফলাফলের তালিকার এন্ট্রিগুলি গণনা করি যেখানে সদৃশ উপস্থিত রয়েছে।

সংরক্ষিত বাইট জন্য ধন্যবাদ:

-4 ক্রিমিনালিভালগার দ্বারা
-4 ডিগইএমএল দ্বারা


1
Guess আমি যোগ করতে পারেন rowএবং col'অত্যন্ত পরিস্থিতিগত ফাংশন' এর আমার তালিকা করতে। সত্যিই চতুর সমাধান।
অপরাধমূলকভাবে

1
আমি মনে করি আপনি c(m|x-y,m|x+y)সরল কলটিতে সরাসরি সরতে পারেন, l=অংশটি সরাতে পারেন । আমি কোনও ব্যর্থ পরীক্ষা দেখতে পাচ্ছি না। এটি অনলাইন চেষ্টা করুন!
অপরাধে

হ্যাঁ, এটা ঠিক, আমি আমার প্রথম গল্ফের পরে মিস করেছি, কেবলমাত্র একটি একক lঘটনা বাকি ছিল।
কিরিল এল।

1
তারা অবশ্যই আজ সকালে আর তে ফাংশন rowএবং columnফাংশন যুক্ত করেছে , কারণ আমি তাদের সম্পর্কে কখনও শুনিনি।
এনজিএম

5

জে , 21 20 বাইট

-1 বাইট জোনাকে ধন্যবাদ!

1#.|.,&((~:&#~.)/.)]

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

ব্যাখ্যা:

1#.                   find the sum of the  
     ,                concatenation of
       (          )   the result of the verb in the parentheses applied to
                   ]  the input
      &               and
   |.                 the reversed input
        (      )/.    for each diagonal
         ~:&#~.       check if all elements are unique and negate the result 

1
এটি এমন এক ক্রেজি যে আপনি (-.@-:~.)জেতে "অনন্য আইটেমগুলির সাথে মেলে না" এর চেয়ে ভাল কিছু করতে পারবেন না তবে আমি এর আগেও অনেকবার মুখোমুখি হয়েছি এবং আমি মনে করি না আপনি পারবেন ... আমাদের আছে =এবং ~:এক হাত, -:এবং <this is missing>
জোনা

আসলে, বন্ধ 1 এর আরও বেশি বাইট শেভ পরিচালিত ছিল: 1#.|.,&((~:&#~.)/.)]এটি অনলাইন চেষ্টা করুন!
জোনা

@ জোনাহ: &ধন্যবাদ এর দুর্দান্ত ব্যবহার !
গ্যালেন ইভানভ

5

জাপট , 31 বাইট

ËcUî
ËéEÃÕc¡XéYnÃÕ mf fÊk_eZâÃl

সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন

ব্যাখ্যা:

Ëc                            #Pad each row...
  Uî                          #With a number of 0s equal to the number of rows

ËéEÃÕ                         #Get the anti-diagonals:
ËéEÃ                          # Rotate each row right a number of times equal to the row's index
    Õ                         # Get the resulting columns
     c                        #Add to that...
      ¡XéYnÃÕ                 #The diagonals:
      ¡XéYnà                  # Rotate each row left a number of times equal to the row's index
            Õ                 # Get the resulting columns
              mf              #Remove the 0s from each diagonal
                 fÊ           #Remove the all-0 diagonals
                   k_   Ã     #Remove the ones where:
                     eZâ      # The list contains no duplicates
                         l    #Return the number of remaining diagonals

আমি কিরিল এল এর হাস্কেল উত্তরের উপর ভিত্তি করে একটি সংস্করণও চেষ্টা করেছিলাম , তবে "এক্স এবং ওয়াই সূচকগুলির একটি ফাংশন দ্বারা গ্রুপ" করার ভাল উপায় খুঁজে পাইনি এবং যে বিকল্পটি আমি পেয়েছি তা যথেষ্ট ভাল ছিল না।



4

জাভাস্ক্রিপ্ট (ES6),  107 105 101  98 বাইট

f=(m,d=s=1)=>(m+0)[s-=~d/2]?m.some(o=(r,y)=>!r.every((v,x)=>x+d*y+m.length-s?1:o[v]^=1))+f(m,-d):0

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

বিঃদ্রঃ

এই কোডটি যেভাবে গল্ফ করা হয়েছে, একমাত্র নীচে-বাম ঘরটি সহ অ্যান্টি-ডায়াগোনালটি কখনই পরীক্ষা করা হয় না। এটি ঠিক আছে কারণ এটি সম্ভবত নকল মান থাকতে পারে না।

মন্তব্য

f = (                    // f = recursive function taking:
  m,                     //   m[] = input matrix
  d =                    //   d   = direction (1 for anti-diagonal or -1 for diagonal)
  s = 1                  //   s   = expected diagonal ID, which is defined as either the sum
) =>                     //         or the difference of x and y + the length of a row
  (m + 0)[               //
    s -= ~d / 2          // increment s if d = -1 or leave it unchanged otherwise
  ] ?                    // if s is less than twice the total number of cells:
    m.some(o =           //   o = object used to store encountered values in this diagonal
    (r, y) =>            //   for each row r[] at position y in m[]:
      !r.every((v, x) => //     for each cell of value v at position x in r[]:
        x + d * y +      //       x + d * y + m.length is the ID of the diagonal
        m.length - s ?   //       if it's not equal to the one we're looking for:
          1              //         yield 1
        :                //       else:
          o[v] ^= 1      //         toggle o[v]; if it's equal to 0, v is a duplicate and
                         //         every() fails which -- in turn -- makes some() succeed
      )                  //     end of every()
    )                    //   end of some()
    + f(m, -d)           //   add the result of a recursive call in the opposite direction
  :                      // else:
    0                    //   stop recursion

4

05AB1E , 25 বাইট

í‚εεygÅ0«NFÁ]€ø`«ʒ0KDÙÊ}g

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

ব্যাখ্যা

í                          # reverse each row in input
 ‚                         # and pair with the input
  ε                        # for each matrix
   ε                       # for each row in the matrix
    ygÅ0«                  # append len(row) zeroes
         NFÁ               # and rotate it index(row) elements to the right
            ]              # end loops
             €ø            # transpose each matrix
               `«          # append them together
                 ʒ     }   # filter, keep only rows that
                  0K       # when zeroes are removed
                    DÙÊ    # are not equal to themselves without duplicate values                           
                        g  # push length of the result

আমার মনে হচ্ছে আমি এখানে কিছু মিস করেছি।
আরও পরে এটি চেষ্টা এবং গল্ফ করা প্রয়োজন।


1
এ সব সাহায্য না, কিন্তু rotate N leftহবে N._এখন। সুতরাং í‚εεygÅ0«N._]এছাড়াও কাজ করে। এই নতুন পরিবর্তনের সাথে ফ্ল্যাটটিকেও সরিয়ে ফেলতে পারে ... এখনও কোনও বাইট সঞ্চয় নেই:í‚vyεygÅ0«N._}ø}«ʒ0KDÙÊ}g
ম্যাজিক অক্টোপাস উরান

1
@ ম্যাজিক অ্যাক্টোপাস ইউরান: আকর্ষণীয়। আমি সেই আদেশটি মিস করেছি। যদিও কেবল একটি বাম এটা বিরক্তিকর.
এমিগানা

1
@ এমিগনা আপনি N(._আমার অনুমানের সাথে ঠিক যেতে পারেন , তবে NFÁ}একই ]সাথে লুপ এবং মানচিত্র একসাথে বন্ধ করার কারণে আপনার দৈর্ঘ্য একই এবং আরও ছোট sh সামগ্রিকভাবে ._কেবল তখন তুলনায় 1 বাইট সংরক্ষণ করতে বামে যেতে কার্যকর হয় NFÀ}
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: আহা, দুর্দান্ত। যদিও আপনি বলেছেন, খুব দরকারী নয়।
এমিগানা


3

অক্টাভা , 98 বাইট

@(A)nnz([(q=@(Q)arrayfun(@(n)nnz(z=diag(Q,n))-nnz(unique(z)),-([m,n]=size(Q)):n))(A),q(rot90(A))])

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


1
অ্যারে কি আসলেই মজাদার? ; পি
কেভিন ক্রুইজসেন

এবং অক্টাভা ফরম্যাটে পরীক্ষার কেসগুলি প্রস্তুত করার জন্য ধন্যবাদ!
লুইস মেন্ডো

2
@ কেভিন ক্রুইজসেন কেবল অ্যারে নয়! আপনার cellfunকাছেও থাকতে পারে, এবং তাত্ক্ষণিকভাবেও structfun। অক্টাভে, এটি হয় একটি লুপ বা থাকার fun!
19'19

এবং বি-এসএক্স-মজা ভুলবেন না!
লুইস মেন্ডো

3

হাস্কেল, 118 112 বাইট

import Data.List
r#(a:b)=sum[1|(/=)=<<nub$[h|h:_<-a:r]]+[t|_:t<-a:r]#b
[]#_=0
a#_=a#[[]]
h x=[]#x+[]#(reverse x)

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

r#(a:b)                      -- function '#' calculates the ant-diagonals of a matrix
                             -- where 'a' is the first row and 'b' all the others
                             -- as we recursively walk down the rows of the matrix,
                             -- 'r' holds the rows from before with the respective
                             -- head dropped
                             --
          [h|h:_<-a:r]       -- if the heads of the the current row and the rows
                             -- before
       (/=)=<<nub$           -- contain duplicates
    [1|                ]     -- make a singleton list [1] (else the empty list)
 sum                         -- and take the sum thereof
      +                      -- and add
             #               -- a recursive call with
 [t|_:t<-a:r]                -- the tails of the current row and the rows before
              b              -- and the rows below
                             --
[]#_=0                       -- base case if there aren't any tails anymore, return 0
a#_=a#[[]]                   -- if there are tails, but no further rows below,
                             -- continue with tails

h x=[]#x+[]#(reverse x)      -- main function, call '#' with input matrix 'x'
                             -- and the reverse of it to get the number of diagonals
                             -- and anti-diagonals. Recursion starts with no
                             -- rows before the 1st row.

-- example trace of function '#'
-- input matrix:
--   [[1,2,3,4],
--    [5,6,7,8],
--    [9,9,9,9]]
--
--  | r         a          b              a:r          heads   tails (r of next call)
-- -+----------------------------------------------------------------------------------
-- 1| []        [1,2,3,4]  [[5,6,7,8],    [[1,2,3,4]]  [1]     [[2,3,4]]
--  |                       [9,9,9,9]]
--  | 
-- 2| [[2,3,4]]  [5,6,7,8]  [[9,9,9,9]]   [[5,6,7,8],  [5,2]   [[6,7,8],
--  |                                      [2,3,4  ]]           [3,4  ]]
--  |
-- 3| [[6,7,8],  [9,9,9,9]  []            [[9,9,9,9],  [9,6,3] [[9,9,9],
--  |  [3,4  ]]                            [6,7,8  ],           [7,8  ]
--  |                                      [3,4    ],           [4    ]
--  |
--  | ....

2

কাঠকয়লা , 61 56 53 বাইট

F²FLθFL§θ⁰F⟦⁻κ×⊖⊗ιλ⟧⊞υ⊞O⎇∧λ﹪⁺μιLθ⊟υ⟦⟧§§θμλILΦυ⊙ι‹⌕ιλμ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

F²

ফরোয়ার্ড এবং বিপরীত ত্রিভুজ লুপ; i=0i=1বিপরীত ত্রিভুজ উপস্থাপন করার সময় সম্মুখের কর্ণগুলি উপস্থাপন করে।

FLθ

প্রতিটি সারি সূচক উপর লুপ। এটি তির্যক শুরুর সূচকের প্রতিনিধিত্ব করে।

FL§θ⁰«

প্রতিটি কলাম সূচক উপর লুপ।

F⟦⁻κ×⊖⊗ιλ⟧

এই কলাম সূচীতে তির্যকের সারি সূচক গণনা করুন। আমি একটি ব্যবহারfor একটি অ্যাসাইনমেন্টের পরিবর্তে একটি একক-উপাদান অ্যারের উপরে লুপ কারণ এটি নিম্নলিখিত বিবৃতি সহ অ্যাসাইনমেন্টটি একটি ব্লকে মোড়ক করা থেকে বিরত থাকে, এইভাবে একটি বাইট সংরক্ষণ করে।

⎇∧λ﹪⁺μιLθ

এটি পরীক্ষা করুন যে এটি প্রথম কলাম বা তির্যকটি নীচে এবং শীর্ষের মধ্যে প্রায় মোড়া করতে চলেছে।

⊟υ

যদি তা না হয় তবে তালিকার তালিকা থেকে শেষ তালিকাটি পপ করুন।

⟦⟧

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

⊞O...§§θμλ

সেই তালিকায় বর্তমান তির্যক এন্ট্রি যুক্ত করুন।

⊞υ

এবং তালিকার তালিকায় সেই তালিকাটি (পিছনে) চাপুন।

ILΦυ⊙ι‹⌕ιλμ

সদৃশ থাকা তালিকার সংখ্যা গণনা করুন।

আসুন কখন i=0এবং কখন একটি উদাহরণ নিই k=1। এর অর্থ হ'ল আমরা ইতিমধ্যে দুটি তির্যক সংগ্রহ করেছি [[1,1,5,2],[9,4,3,5]],। আমাদের ইনপুটটি এখানে:

 1 8 4 2 9 4 4 4
[5]1 2 7 7 4 2 3
 1 4 5 2 4 2 3 8
 8 5 4 2 3 4 1 5

আমরা তখন লুপ lথেকে 0থেকে 7। এটি প্রতিটি সময় সারি এবং কলাম উভয়কেই অগ্রসর করে:

 1 8 4 2 9 4 4 4
[5]1 2 7 7 4 2 3
 1[4]5 2 4 2 3 8
 8 5[4]2 3 4 1 5

তালিকা এখন [[1,1,5,2],[9,4,3,5],[5,4,4]]। যাইহোক, যখন lআমাদের রয়েছে 3, k+l=4অ্যারের উচ্চতার একাধিক। এর অর্থ হল আমরা একটি নতুন তালিকা শুরু করতে যে: [[1,1,5,2],[9,4,3,5],[5,4,4],[]]। তারপরে আমরা তির্যক উপাদানগুলি সংগ্রহ করতে থাকি:

 1 8 4[2]9 4 4 4
[5]1 2 7[7]4 2 3
 1[4]5 2 4[2]3 8
 8 5[4]2 3 4[1]5

তালিকা এখন [[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1]]। এখন যখন lহয় 7, আমরা k+l=8, এরে উচ্চতা আরেকটি একাধিক। এর অর্থ হল আমরা একটি নতুন তালিকা, যা তির্যক এর শেষ উপাদান সঙ্গে শেষ পর্যন্ত শুরু করতে যে: [[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1],[4]]

 1 8 4[2]9 4 4[4]
[5]1 2 7[7]4 2 3
 1[4]5 2 4[2]3 8
 8 5[4]2 3 4[1]5

প্রতিটি সারির প্রথম উপাদান থেকে শুরু করে মোড়কের তির্যক সংগ্রহ করে আমরা শেষ পর্যন্ত অ্যারের সমস্ত তির্যকগুলি জমা করি।


2

ওল্ফ্রাম ল্যাঙ্গুয়েজ (ম্যাথমেটিকা) , 99 98 96 94 83 বাইট

Count[DuplicateFreeQ@Diagonal[#,i]~Table~{i,-t,t=#~Total~2}&/@{#,Reverse@#},1<0,2]&

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

  • Function[a,a~Diagonal~#&/@Range[t=-#~Total~2,-t]]এর সমস্ত কর্ণগুলি পেয়ে যায় a- যা কাজ করে কারণ #~Total~2যে কোনও মাত্রার চেয়ে বড় a

1

এপিএল + উইন, 69 বাইট

4 6⍴1 2 1 2 1 2 1 2 1 2 3 4 5 6 6 5 4 3 2 1 2 1 2 1 2 1 ফর্মের 2 ডি ম্যাট্রিক্সের জন্য অনুরোধ

এই ফলন:

1 2 1 2 1 2
1 2 3 4 5 6
6 5 4 3 2 1
2 1 2 1 2 1

+/~(v⍳¨v)≡¨⍳¨⍴¨v←(v←⊂[1](⌽0,⍳1↓n)⌽(n⍴0),m,((n←0 ¯1+↑⍴m)⍴0),⌽m←⎕)~¨0

এটি অনলাইন চেষ্টা করুন! সৌজন্যে ডায়ালগ ক্লাসিক

ব্যাখ্যা:

(⌽0,⍳1↓n)⌽(n⍴0),m pad m with zeros to isolate diagonals

((n←0 ¯1+↑⍴m)⍴0),⌽m pad rotated m with zeros to isolate anti-diagonals

উৎপাদনের:

1 2 1 2 1 2 0 0 0 2 1 2 1 2 1 0 0 0
0 1 2 3 4 5 6 0 0 0 6 5 4 3 2 1 0 0
0 0 6 5 4 3 2 1 0 0 0 1 2 3 4 5 6 0
0 0 0 2 1 2 1 2 1 0 0 0 1 2 1 2 1 2

v←(v←⊂[1](.....)~¨0 enclose the diagonals as a nested vector with padded zeros removed

+/~(v⍳¨v)≡¨⍳¨⍴¨v identify diagnols with duplicate entries and sum


1

টিএসকিউএল, 140 128 বাইট

গল্ফের 12 টি অক্ষরের একটি উপায় খুঁজে পেয়েছি। এটি আর দীর্ঘতম সমাধান নয়।

Golfed:

SELECT sum(iif(y+x=j+i,1,0)+iif(y-x=j-i,1,0))FROM
@,(SELECT x i,y j,max(y)over()m,v w
FROM @)d WHERE(x*y=0or m=y)and v=w and x<i

Ungolfed:

DECLARE @ table(v int,x int,y int)
-- v = value
-- x = row 
-- y = column
INSERT @ values
(1,0,0),(2,0,1),(1,0,2),(2,0,3),(1,0,4),(2,0,5),
(1,1,0),(2,1,1),(3,1,2),(4,1,3),(5,1,4),(6,1,5),
(6,2,0),(5,2,1),(4,2,2),(3,2,3),(2,2,4),(1,2,5),
(2,3,0),(1,3,1),(2,3,2),(1,3,3),(2,3,4),(1,3,5)


SELECT sum(iif(y+x=j+i,1,0)+iif(y-x=j-i,1,0))
FROM @,(SELECT x i,y j,max(y)over()m,v w FROM @)d
WHERE
  (x*y=0or m=y)
  and v=w
  and x<i

চেষ্টা কর

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