国境のない完璧な正方形


16

与えられたn=m^2m 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この答えは素晴らしい視覚化を行います。


ルール:

  • mまたはn(どこでn = m*m)摂取することができます。
    • 取り込んでいるn場合、mfor が存在しない場所で未定義の動作が許可されますn(EG 15)。
    • n > 0m > 0:両方とも整数値でなければなりません。
  • 出力は、1D / 2D配列、マトリックスまたは空白で区切られたものである場合があります
  • 出力は、最小から最大の順にする必要があります。
    • マトリックスとして出力する場合、これはグリッドの場合と同じでなければならないことを意味します。
  • これは、バイト数が最も少なくなります。

私の側の完全な障害、私はそれを間違って読んだ。
開発者

3
@DevelopingDeveloperちょっと男、それをするたびにニックがあれば、ビールを1つか2つ買うことができます。
魔法のタコ

2D配列として出力する場合、単一の空の配列を結果に含めることができますか?
シャギー

回答:




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

R44 43 32バイト

function(n)(x=n:(n^2-n))[x%%n>1]

オンラインでお試しください!

ベクトルを返します。


きちんとした出力形式、それはデフォルトで行列がRで出力される方法ですか?
魔法のタコ

1
はい、それprintはa の関数ですmatrix
ジュゼッペ

1
で2番目mを省略できますmatrix(1:m^2,m,m,T)matrix(1:m^2,m,,T)
JAD

@JADはい、もちろん。ありがとう。
ジュゼッペ

いいですね、scan()の使用についてどう思いますか?2バイト節約できます。オンラインでお試しください!
ロバートハッケン


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(

私はより簡単にループすることはできません2m-1の私のループ3mと計算して調整します。




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バイト

FrownyFrogのおかげで-4バイト!

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

オンラインでお試しください!

私のオリジナルのソリューション:

J、23バイト

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

入力としてnを取り、行列を返します

使い方

1+i. -リスト1..nを生成します

-@%: -nの平方根を見つけて否定します(m)

]\ -リストから表(行列)mxmを作成します

^:2 -次を2回実行します。

|:@}:@}. -最初の行をドロップし、最後の行をドロップしてから転置

[: -フォークのキャップ

オンラインでお試しください!


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

1
いいえ、1 1}:@}.-@%:}:\1+i.
-FrownyFrog

@FrownyFrog-クール、ありがとう!リストの左引数について知らなかった}.
ガレンイワノフ

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では通常許可されていないため、空のリストを手動で印刷する必要がありました。m2より大きい値を指定した場合、コードは29バイトに削減できます





1

Pyt、13 バイト

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

のポート ジョナサン・アランのジェリーの答え

説明:

                    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

オンラインでお試しください!


1

Python、111バイト

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

ジャワ8241の 183 170 162 160 132 122バイト

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;}

オンラインでお試しください!

多少「不明な」サイズの配列を作成する必要がある場合、Javaは非常に困難です(大量のバイト)。

  • Magic Octopus Urnのおかげで-8バイト
  • Xcoder氏のおかげで-28バイト
  • Kevin Cruijssenのおかげで-10バイト

1
また、はい、Javaはコードゴルフにとって大雑把です。しかし、あなたは明らかにそれが得意です。男、あなたはGroovyそれが基本的に速記のJavaであると呼ばれるこの言語をチェックアウトする必要があります。
魔法のタコ

2
ifステートメントから余分な条件を削除して132バイト、およびさまざまなトリック。
Mr Xcoder

1
を組み合わせて、@ Mr.Xcoderの132バイトバージョンを継続する122バイトint||toを変更し|、単一行のif-bodyの括弧を削除します。
ケビンクルーッセン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.