首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找到J孪生兄弟

找到J孪生兄弟
EN

Code Golf用户
提问于 2022-03-30 12:50:14
回答 5查看 826关注 0票数 17

对于二维数组,我们将将第一行或最后一列中的元素定义为数组中最大的“J-括号”。例如,在J-括号中的以下数组元素中突出显示:

\begin{bmatrix} \color{red}{\underline 1} & \color{red}{\underline 2} & \color{red}{\underline 4} & \color{red}{\underline 8} \\ 9 & 3 & 6 & \color{red}{\underline 7} \\ 3 & 3 & 2 & \color{red}{\underline 9} \end{bmatrix}

J-括号是从第一行的第一个元素开始,顺时针方向排列的。行和列中的元素不重复。因此,对于上述情况,即:

\left[1, 2, 4, 8, 7, 9\right]

要获得下一个最大的J-括号,只需从数组中移除最大的J-括号,并取其余的最大J-括号:

\begin{bmatrix} {\color{lightgrey}{1}} & {\color{lightgrey}{2}} & {\color{lightgrey}{4}} & {\color{lightgrey}{8}} \\ \color{red}{\underline 9} & \color{red}{\underline 3} & \color{red}{\underline 6} & {\color{lightgrey}{7}} \\ 3 & 3 & \color{red}{\underline 2} & {\color{lightgrey}{9}} \end{bmatrix}

以此类推,直到每个元素都在1J括号中。

数组中的J括号集合不一定是唯一的。事实上,如果矩阵是非平方的,那么每个矩阵都有一个具有相同J-括号集的孪生体。

\begin{bmatrix} \color{red}{\underline 1} & \color{red}{\underline 2} & \color{red}{\underline 4} & \color{red}{\underline 8} \\ \color{green}9 & \color{green}3 & \color{green}6 & \color{red}{\underline 7} \\ \color{blue}{\overline 3} & \color{blue}{\overline 3} & \color{green}2 & \color{red}{\underline 9} \end{bmatrix} \cong \begin{bmatrix} \color{red}{\underline 1} & \color{red}{\underline 2} & \color{red}{\underline 4} \\ {\color{green}{9}} & \color{green}3 & \color{red}{\underline 8} \\ \color{blue}{\overline 3} & \color{green}6 & \color{red}{\underline 7} \\ \color{blue}{\overline 3} & \color{green}2 & \color{red}{\underline 9} \end{bmatrix}

这个孪生体有相反的维度,在方阵的情况下,它是自己的孪生体。

你的任务是接受一个二维正整数数组并输出它的J-孪生子。您可以采用任何标准格式的输入和输出,但输入格式应与输出相同。

这是密码-高尔夫,所以答案将以字节为单位得分,目标是更少的字节。

测试用例

代码语言:javascript
运行
复制
[[2]] -> [[2]]
[[1,2,3]] -> [[1],[2],[3]]
[[1,2,4,8],[9,3,6,7],[3,3,2,9]] -> [[1,2,4],[9,3,8],[3,6,7],[3,2,9]]
[[1,2,4],[9,3,8],[3,6,7],[3,2,9]] -> [[1,2,4,8],[9,3,6,7],[3,3,2,9]]
EN

回答 5

Code Golf用户

发布于 2022-03-30 17:33:13

果冻,10 字节数

代码语言:javascript
运行
复制
ZL_Lṙ@ŒdŒḍ

一种一元链接,它接受列表的矩形列表,并将其J-括号-孪生作为列表列表。

在网上试试!或者看测试套件

怎么做?

代码语言:javascript
运行
复制
ZL_Lṙ@ŒdŒḍ - Link: list of lists, A
Z          - transpose A
 L         - length of that -> columnCount(A)
   L       - length of A -> rowCount(A)
  _        - columnCount(A) subtract rowCount(A) = N
      Œd   - anti-diagonals of A
    ṙ@     - rotate this list of anti-diagonals left by N
        Œḍ - create a matrix with these anti-diagonals
票数 7
EN

Code Golf用户

发布于 2022-03-30 13:22:02

R,76字节

代码语言:javascript
运行
复制
\(m)array(unsplit(split(m,i),rev(t(i<-pmin(row(m),rev(col(m)))))),dim(t(i)))

在网上试试!

如在另一个挑战中,splits的数组找到了J-括号.然后unsplits,并添加array结构,得到J-孪生子作为一个矩阵.

更详细的解释。

票数 4
EN

Code Golf用户

发布于 2022-03-30 15:18:22

Python 3,111个字节

代码语言:javascript
运行
复制
def f(x):
 r,*a=x;k=len(a)
 if k*r[1:]:r+=map(list.pop,a);x=*zip(r[:k],*f(a)),r[k:]
 return[*map(list,zip(*x))]

在网上试试!

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

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

复制
相关文章

相似问题

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