完美无国界广场


16

给定后n=m^2,返回一个整数列表,该列表与的整数m x m网格没有边界1 to n

例子

n = 1(m = 1)

网格:

[1]

返回:

[]

n = 4(m = 2)

网格:

[1,2]
[3,4]

返回:

[]

n = 9(m = 3)

网格:

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

返回:

[5]

n = 16(m = 4)

网格:

[ 1, 2, 3, 4]
[ 5, 6, 7, 8]
[ 9,10,11,12]
[13,14,15,16]

返回:

[6,7,10,11]

对于的较高值m答案可以提供很好的可视化效果。


规则:

  • 您可以输入mn(其中n = m*m)。
    • 如果考虑在n你被允许有不确定的操作那里不存在mn(例如15)。
    • n > 0m > 0:两者都必须是整数值。
  • 输出可以是一维/二维数组,矩阵或空格分隔的
  • 输出必须是从最小到最大的顺序。
    • 如果输出为矩阵,则意味着它必须与网格中的一样。
  • 这是,最低字节数获胜。

完全是我的错,我看错了。
DevelopingDeveloper

3
@DevelopingDeveloper嘿,伙计,如果我每次都做些小事,我就能买一两个啤酒。
魔术章鱼缸

如果输出为2D数组,结果中可以包含一个空数组吗?
毛茸茸的

Answers:




6

八度,26字节

@(m)find((t=[0:m-2 0])'*t)

该代码定义了一个匿名函数,该函数输入 m和输出(可能为空)列向量。

在线尝试!

说明

@(m)                          % Define anonymous function of m
          t=[0:m-2 0]         % Build row vector [0 1 2 ... m-2 0] and assign it
                              % to variable t
         (           )'       % Complex-conjugate transpose into a column vector
                       *t     % Matrix-multiply that column vector times the row
                              % vector t. This gives an m×m matrix with zeros in
                              % the border and nonzeros in the other entries.
    find(                )    % Linear indices of nonzero entries. The result is
                              % in increasing order

5

果冻,8 字节

’Ṗ×+€ṖḊ€

单链链接,获取m并返回列表列表(内部行)。

在线尝试!

怎么样?

’Ṗ×+€ṖḊ€ - Link m                    e.g. 5
’        - decrement                      4
 Ṗ       - pop (implicit range of input)  [1,2,3]
  ×      - multiply by m                  [5,10,15]
     Ṗ   - pop m                          [1,2,3,4]
   +€    - add €ach                       [[6,7,8,9],[11,12,13,14],[16,17,18,19]]
      Ḋ€ - dequeue €ach                   [[7,8,9],[12,13,14],[17,18,19]]

不想做一个python;)吗?
魔术章鱼缸

4

Pure Bash,49岁

无聊的答案:

for((i=$1;i++<$1*$1-$1;));{ ((i%$1>1))&&echo $i;}

在线尝试


或52的有趣答案:

(($1>2))&&eval echo \$[$1*{1..$[$1-2]}+{2..$[$1-1]}]

在线尝试





3

质子,28字节

k=>filter(u=>1<u%k,k..k*~-k)

在线尝试!

需要m为输入。

怎么样?

过滤[k,k 2 -k)中的整数,将它们除以k所得的余数大于1。这样可以确保修剪两端,因为第一个输出0,最后一个输出1。还可以保证为任何有效的整数返回较高的值,因为它们是连续的。







2

MATL,8字节

:G\1>&*f

输入为m。输出是数字递增的顺序。

在线尝试!

说明

以输入4为例。

:     % Implicit input: m. Push range [1 2 ... m-1 m]
      % STACK: [1 2 3 4]
G\    % Modulo m, element-wise
      % STACK: [1 2 3 0]
1>    % Greater than 1, element-wise.
      % STACK: [0 1 1 0]
&*    % Matrix of pair-wise products
      % STACK: [0 0 0 0;
                0 1 1 0;
                0 1 1 0;
                0 0 0 0]
f     % Column vector of linear indices of nonzeros. Implicit display
      % STACK: [ 6;
                 7;
                10;
                11]


2

批处理,85字节

@for /l %%i in (3,1,%1)do @for /l %%j in (3,1,%1)do @cmd/cset/a(%%i-2)*%1+%%j-1&echo(

我不能轻易地从2到循环,m-1所以我要从3到循环m并在计算中进行调整。




2

Japt,12个字节

我花了很长时间打高尔夫球以提取元素,以至于我没有时间去打高尔夫球阵列代。我现在也只是注意到我们可以n取而代之,因此我可以在其中保存一些内容。待重新审视...

òUnU²)òU m¤c

尝试一下


说明

                 :Implicit input of integer U=m     :e.g., 4
   U²            :U squared                         :16
 Un              :Minus U                           :12
ò                :Range [U,U**2-U]                  :[4,5,6,7,8,9,10,11,12]
      òU         :Partitions of length U            :[[4,5,6,7],[8,9,10,11],[12]]
         m       :Map
          ¤      :  Remove first 2 elements         :[[6,7],[10,11],[]]
           c     :Flatten                           :[6,7,10,11]

2

J23 19字节

-4个字节感谢FrownyFrog!

1 1}:@}.-@%:}:\1+i.

在线尝试!

我原来的幻想:

J,23个字节

[:|:@}:@}.^:2-@%:]\1+i.

以n为输入,返回一个矩阵

怎么运行的

1+i. -生成列表1..n

-@%: -找到n的平方根并取反(m)

]\ -从列表中创建一个表(矩阵)mxm

^:2 -进行两次以下操作:

|:@}:@}. -删除第一行,然后删除最后一行,然后转置

[: -盖上叉子

在线尝试!


1}:@}.-@%:}.@}:\1+i.
FrownyFrog

1
不,1 1}:@}.-@%:}:\1+i.
FrownyFrog

@FrownyFrog-太好了,谢谢!我不知道}.
Galen Ivanov

2

外壳,9个字节

‼ȯTthS↑CN

在线尝试!

说明

‼ȯTthS↑CN  Implicit input, say m=4.
       CN  Cut the natural numbers by m: [[1,2,3,4],[5,6,7,8],[9,10,11,12],..
     S↑    Take first m lists: [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
‼ȯ         Do this twice:
    h       Remove last row,
   t        remove first row,
  T         transpose.
           Result is [[6,7],[10,11]]; print it implicitly.

2

Japt,14个字节

²õ òU ÅkJ ®ÅkJ

需要m输入

说明

 ²õ òU ÅkJ ®ÅkJ                                      
                // U = input                         | 3
U²              // U squared                         | 9
  õ             // Range [1...U²]                    | [1,2,3,4,5,6,7,8,9]
    òU          // Cut into slices of U              | [[1,2,3],[4,5,6],[7,8,9]]
       Å        // Remove the first item             | [[4,5,6],[7,8,9]]
        kJ      // Remove the last item              | [[4,5,6]]
           ®    // Map:                              |
            ÅkJ //   Remove the first and last items | 5     

在线尝试!


需要的解决方案n也是14个字节:

õ òU¬ ÅkJ ®ÅkJ

在线尝试!


2

TI-BASIC,44 43字节(标记)

DC 4D 3F CE 4D 6D 32 3F CF 3F DE 2A 08 09 3F D0 3F 4D 71 32 3F 23 4D 70 32 70 58 70 32 B1 58 83 72 11 2B 58 2B 30 2B 72 0D 71 31

可读版本:

:Input M
:If M≤2
:Then
:Disp "{}
:Else
:M-2
:seq(M+2+X+2int(X/Ans),X,0,Ans²-1

不幸的是,由于TI-BASIC通常不允许这样做,因此必须手动打印空白列表。如果m给定大于两个的值,则代码可以减少到仅29个字节





1

Pyt, 13 bytes

ĐĐ⁻⁻ř*⇹⁻⁻ř⁺ɐ+

Port of Jonathan Allan's Jelly answer

Explanation:

                    Implicit input (takes m)
ĐĐ                  Triplicate the input (push it on the stack two more times)
  ⁻⁻                Decrement top of stack twice
    ř               Push [1,2,...,m-2]
     *              Multiplies by m
      ⇹             Swaps top two items on stack
       ⁻⁻           Decrement (m-2 is now on top)
         ř          Push [1,2,...,m-2]
          ⁺         Increment each element by 1
           ɐ+       Add [2,3,...,m-1] to each element of [m,2m,...,m(m-2)]
                    Implicit print

Try it online!


1

Python, 111 bytes

def f(s):
 r=[]
 for i in[i[1:-1]for i in[[(j*s)+i+1 for i in range(s)]for j in range(s)][1:-1]]:r+=i
 return r

1

Java 8, 241 183 170 162 160 132 122 bytes

j->{if(j<3)return new int[1];int e[]=new int[j*j-4*j+4],x=0,i=0;for(;++i<=j*j;)if(!(i<j|i>j*j-j|i%j<2))e[x++]=i;return e;}

Try it online!

Java makes it very tough(lots of bytes) when you have to create an array of somewhat "unknown" size.

  • -8 bytes thanks to Magic Octopus Urn
  • -28 bytes thanks to Mr. Xcoder
  • -10 bytes thanks to Kevin Cruijssen

1
Also, yes, Java is rough for code-golf. But you're obviously good at it. Man, you need to check out this language called Groovy it's basically shorthand Java.
Magic Octopus Urn

2
132 bytes by removing an extra condition from the if statement, and various tricks.
Mr. Xcoder

1
122 bytes continuing @Mr.Xcoder's 132-byte version above by combining the int, changing the || to |, and removing the brackets of the single-line if-body.
Kevin Cruijssen

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.