首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移除2d数组的周围零点

移除2d数组的周围零点
EN

Code Golf用户
提问于 2018-07-27 13:41:24
回答 19查看 4.1K关注 0票数 41

这是这个问题的二维版本.

给定一个非空的二维数组/矩阵,其中只包含非负整数:

$$ {b矩阵}{色{红}}和{色{红}}\\色{红}}&{色{红}}和{色{红}}和{\颜色{红色}}&0和0和1颜色{红色}}和{\颜色{红色}}&1和1和1\\颜色{红色}}和{\颜色{红色}}\结束{b矩阵} $$

输出周围零被移除的数组,即没有周围零的最大的连续子数组:

$$ \begin{b矩阵}0&1和0\0和0&1&1和1&1\结束{b矩阵} $$

示例:

$$ {b矩阵}{色{红}}和{色{红}}\\色{红}}&{色{红}}和{色{红}}和{\颜色{红色}}&0和0和1颜色{红}和{色{红}}&1和1和1\色{红}}和{色{红}}\\结束{b矩阵} \mapsto \开始{b矩阵}0和0\0和0和0和1和1和1\结束{b矩阵} $$

代码语言:javascript
复制
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]

Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]

$$ {b矩阵}{色{红}和{色{红}}和{色{红}}&0和0&3\{色{红}}和0和0\颜色{红色}和5和0和0\\颜色{红色}}和{颜色{红色}0}}&{颜色{红色}}和{\彩色{红色}}\结束{b矩阵} \mapsto开始{b矩阵}0和3\0和0和0和0和0和0&0结束{b矩阵} $$

代码语言:javascript
复制
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]

Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]

$$ \begin{b矩阵}1&2和3\4和5和6\7和8&9\\结束{b矩阵} \mapsto \begin{b矩阵}1和2和3\4和5和6\7和8和9\end{b矩阵} $$

代码语言:javascript
复制
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

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

$$ {b矩阵}{{色{红}}&{色{红}}和{色{红色}}&{颜色{红色}}{Red}0} &{色{红色}\\end{b矩阵} \mapsto开始{b矩阵}\\end{b矩阵} $$

代码语言:javascript
复制
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Output:
[]

$$ {b矩阵}{色{红}}和{色{红}}\1和1和1和1,{色{红}}\\结束{b矩阵} \mapsto \开始{b矩阵}1和1和1和1\结束{b矩阵} $$

代码语言:javascript
复制
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]

Output:
[[1, 1, 1, 1]]

$$ \begin {b矩阵}{{红色}和1&{颜色{红色}}和{\颜色{红色}}和{\颜色{红色}}&1和{\颜色{红色}}和{\颜色{红色}}&1和{\颜色{红色}}和{\颜色{红色}} \mapsto结束{b矩阵}\mapsto开始\\开始。{b矩阵}1\1\1\结束{b矩阵} $$

代码语言:javascript
复制
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]

Output:
[[1], [1], [1]]

$$ \begin{b矩阵}1和1、1和1、2和3、1、1和1、1和1、1和1\结束{b矩阵} \mapsto \begin{b矩阵}1和1、1和1、2和3、1、1、1和1、1和1\结束{bmatrix} $$

代码语言:javascript
复制
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]

Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
EN

回答 19

Code Golf用户

回答已采纳

发布于 2018-07-27 14:56:07

马蒂尔,3字节

代码语言:javascript
复制
JYa

在网上试试!验证所有测试用例.

解释

代码语言:javascript
复制
J      % Push 1j
Ya     % With complex 2nd input, this unpads the matrix in the
       % 1st input (implicit). The unpad value is 0 by default
       % Display (implicit)
票数 12
EN

Code Golf用户

发布于 2018-07-27 16:58:13

JavaScript (ES6),98字节

代码语言:javascript
复制
(a,z)=>(g=A=>A.slice(A.map(m=M=(r,i)=>M=(z?a:r).some(n=>z?n[i]:n)?1/m?i:m=i:M)|m,M+1))(a).map(z=g)

在网上试试!

怎么做?

为了克服压缩内置的不足,我们定义了一个函数g(),它能够对输入矩阵a的行或列进行操作,这取决于全局标志<#>z的值。

g()查找非空行(如果z未定义)或非空列(如果z已定义)的最小索引m和最大索引M,并返回矩阵本身或矩阵中给定行的相应切片。

概括地说:

  • 我们首先通过调用z未定义的矩阵上的<#>g()来删除行。
  • 然后,通过调用定义了z的每一行上的g()来删除列,这将导致非常不寻常的.map(z=g)

评论

代码语言:javascript
复制
(a, z) => (               // a[] = input matrix; z is initially undefined
  g = A =>                // g() = function taking A = matrix or row
    A.slice(              //   eventually return A.slice(m, M + 1)
      A.map(m = M =       //     initialize m and M to non-numeric values
        (r, i) =>         //     for each row or cell r at position i in A:
        M = (z ? a : r)   //       iterate on either the matrix or the row
        .some(n =>        //       and test whether there's at least one
          z ? n[i] : n    //       non-zero cell in the corresponding column or row
        ) ?               //       if so:
          1 / m ? i       //         update the maximum index M (last matching index)
                : m = i   //         and minimum index m (first matching index)
        :                 //       otherwise:
          M               //         let M (and m) unchanged
      ) | m,              //     end of map(); use m as the first parameter of slice()
      M + 1               //     use M+1 as the second parameter of slice()
    )                     //   end of slice()
  )(a)                    // invoke g() on the matrix with z undefined
  .map(z = g)             // invoke g() on each row of the matrix with z defined
票数 14
EN

Code Golf用户

发布于 2018-07-27 14:09:50

皮斯,13字节

代码语言:javascript
复制
V2=.sCQ]m0Q;Q

在网上试试!

票数 6
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/169366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档