Kotak Sempurna Tanpa Batas

16

Diberikan n=m^2, kembalikan daftar bilangan bulat yang tidak membatasi m x mkisi - kisi integer 1 to n.

Contohnya

n = 1 (m = 1)

Kisi:

[1]

Kembali:

[]

n = 4 (m = 2)

Kisi:

[1,2]
[3,4]

Kembali:

[]

n = 9 (m = 3)

Kisi:

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

Kembali:

[5]

n = 16 (m = 4)

Kisi:

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

Kembali:

[6,7,10,11]

Untuk nilai yang lebih tinggi dari m, jawaban ini melakukan visualisasi yang hebat.


Aturan:

  • Anda dapat menerima salah satu matau n(di mana n = m*m).
    • Jika menerima nAnda diperbolehkan memiliki perilaku tidak terdefinisi di mana tidak ada muntuk n(EG 15).
    • n > 0, m > 0: Keduanya harus berupa nilai integer.
  • Outputnya bisa berupa array 1D / 2D, matriks atau dibatasi spasi
  • Outputnya harus berurutan dari yang terkecil hingga yang terbesar.
    • Jika keluaran sebagai matriks ini berarti harus seperti di grid.
  • Ini adalah , kemenangan byte-count terendah.
Guci Gurita Ajaib
sumber
Salah total pada akhirnya, saya salah membacanya.
DevelopingDeveloper
3
@DevelopingDeveloper, hei, jika saya punya uang untuk setiap kali saya melakukannya saya akan bisa membeli satu atau dua bir.
Magic Octopus Urn
Jika menghasilkan sebagai array 2D, dapatkah satu array kosong dimasukkan dalam hasil?
Shaggy

Jawaban:

6

Oktaf , 31 byte

@(m)vec2mat(1:m*m,m--)(2:m,2:m)

Mengembalikan matriks.

Cobalah online!

Steadybox
sumber
2
Bagus! Saya belum pernah menemukan vec2matfungsi sebelumnya.
Tom Carpenter
6

Oktaf , 26 byte

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

Kode mendefinisikan fungsi anonim yang diinput m dan output vektor kolom (mungkin kosong).

Cobalah online!

Penjelasan

@(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
Luis Mendo
sumber
5

Jelly , 8 byte

’Ṗ×+€ṖḊ€

Tautan monadik yang mengambil mdan mengembalikan daftar daftar (baris dalam).

Cobalah online!

Bagaimana?

’Ṗ×+€ṖḊ€ - 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]]
Jonathan Allan
sumber
Tidak merasa ingin melakukan python;)?
Magic Octopus Urn
4

Pure Bash, 49

Jawaban yang membosankan:

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

Cobalah online .


Atau jawaban menarik untuk 52:

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

Cobalah online .

digital Trauma
sumber
4

Haskell , 31 byte

f m=[i|i<-[m..m*m-m],mod i m>1]

Cobalah online!

Versi matematika:

f(m) = {i : i  (m, m² - m), i mod m < 1}

: P

benar-benar manusiawi
sumber
Tunggu, ini tidak valid, f(5)seharusnya7,8,9,12,13,14,17,18,19
Magic Gurita Guci
Tunggu, oops, aku tolol.
totallyhuman
4

R , 44 43 32 byte

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

Cobalah online!

Mengembalikan vektor.

Giuseppe
sumber
Format output yang rapi, apakah itu secara default bagaimana sebuah matriks dihasilkan dalam R?
Magic Octopus Guci
1
Yap, itulah printfungsi untuk matrix.
Giuseppe
1
Anda dapat menghilangkan yang kedua mdi matrix(1:m^2,m,m,T):matrix(1:m^2,m,,T)
JAD
@ JAD ya, tentu saja. Terima kasih.
Giuseppe
Bagus, apa pendapat Anda tentang menggunakan pemindaian ()? Anda mungkin menghemat 2 byte. Cobalah online!
Robert Hacken
3

Jelly , 8 byte

sƽḊṖ$⁺€

Cobalah online!

Erik the Outgolfer
sumber
Menggunakan msatu juga bisa dilakukan ²s⁸ḊṖ$⁺€. (Saya juga memposting mmetode alternatif lain .)
Jonathan Allan
@ JonathanAllan Sudah menemukan itu, tapi tidak ada penghematan byte di sana, Anda tidak dapat menghapus :(
Erik the Outgolfer
3

Proton , 28 byte

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

Cobalah online!

Mengambil m sebagai input.

Bagaimana?

Memfilter bilangan bulat dalam [k, k 2 -k) yang, ketika dibagi dengan k , menghasilkan sisanya lebih tinggi dari 1 . Ini memastikan bahwa kedua ujungnya terpotong, karena yang pertama menghasilkan 0 dan yang terakhir menghasilkan 1 . Ini juga dijamin untuk mengembalikan nilai yang lebih tinggi untuk bilangan bulat yang valid, karena mereka berturutan.

Tuan Xcoder
sumber
2

Utilitas Bash + GNU, 35

seq $1 $[$1*$1-$1]|sed 1~$1d\;2~$1d

Cobalah online .

digital Trauma
sumber
2

05AB1E , 9 byte

LItä¦¨ε¦¨

Cobalah online!

Tuan Xcoder
sumber
LItä¦¨ε¦¨baik-baik saja, outputnya bisa berupa array 2D.
Magic Gurita Guci
Oh, aku seharusnya membaca spec lebih baik. Terimakasih atas peringatannya!
Tn. Xcoder
2

Python 2 , 44 byte

lambda t:[k for k in range(t,~-t*t)if k%t>1]

Cobalah online!

Saya berjanji ini adalah jawaban terakhir saya (untuk tantangan ini) hari ini. Mengambil m sebagai input.

Tuan Xcoder
sumber
2

Ruby , 32 byte

->m{(m..m*m-m).reject{|e|e%m<2}}

Mengambil m, mengembalikan array satu dimensi.

Cobalah online!

Pasang kembali Monica - notmaynard
sumber
2

MATL , 8 byte

:G\1>&*f

Masukan adalah m. Output adalah angka dalam urutan yang meningkat.

Cobalah online!

Penjelasan

Pertimbangkan input 4sebagai contoh.

:     % 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]
Luis Mendo
sumber
2

Batch, 85 byte

@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(

Saya tidak bisa dengan mudah lingkaran dari 2ke m-1jadi saya lingkaran dari 3ke mdan menyesuaikan dalam perhitungan.

Neil
sumber
2

Japt, 12 byte

Saya menghabiskan begitu lama golf ekstraksi elemen yang saya kehabisan waktu untuk golf generasi array. Saya juga baru sekarang memperhatikan bahwa kita dapat mengambil ninput sebagai gantinya sehingga saya mungkin dapat menyimpan sesuatu di sana. Untuk ditinjau kembali ...

òUnU²)òU m¤c

Cobalah


Penjelasan

                 :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]
Shaggy
sumber
2

J , 23 19 byte

-4 byte terima kasih kepada FrownyFrog!

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

Cobalah online!

Olution asli saya:

J , 23 byte

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

Dibawa n sebagai input, mengembalikan matriks

Bagaimana itu bekerja

1+i. - menghasilkan daftar 1..n

-@%: - Menemukan akar kuadrat dari n dan meniadakannya (m)

]\ - membuat tabel (matriks) mxm dari daftar

^:2 - lakukan hal berikut dua kali:

|:@}:@}. - jatuhkan baris pertama, lalu jatuhkan baris terakhir, lalu transpos

[: - tutup garpu

Cobalah online!

Galen Ivanov
sumber
1}:@}.-@%:}.@}:\1+i.
FrownyFrog
1
Tidak,1 1}:@}.-@%:}:\1+i.
FrownyFrog
@FrownyFrog - Keren, terima kasih! Saya tidak tahu tentang daftar argumen kiri}.
Galen Ivanov
2

Sekam , 9 byte

‼ȯTthS↑CN

Cobalah online!

Penjelasan

‼ȯ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.
Zgarb
sumber
2

Japt , 14 byte

²õ òU ÅkJ ®ÅkJ

Dibawa msebagai input

Penjelasan

 ²õ ò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     

Cobalah online!


Solusi yang dibutuhkan njuga 14 byte:

õ òU¬ ÅkJ ®ÅkJ

Cobalah online!

Oliver
sumber
2

TI-BASIC, 44 43 byte (tokenized)

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

Versi yang dapat dibaca:

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

Sayangnya perlu mencetak daftar kosong secara manual karena TI-BASIC biasanya tidak mengizinkan itu. Jika mdiberi lebih dari dua, kode dapat dikurangi menjadi hanya 29 byte .

fakedad
sumber
1

Merah , 63 62 byte

f: func[n][repeat i(n - 2 * n)[if(a: n + i)// n > 1[print a]]]

Cobalah online!

Ini adalah port Merah dari solusi Python 2 Haskell / Mr. Xcoder yang benar-benar manusiawi

Galen Ivanov
sumber
1

Pyt , 13 byte

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

Port of Jonathan Jonathan menjawab Jelly

Penjelasan:

                    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

Cobalah online!

mudkip201
sumber
1

Python, 111 byte

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
sonrad10
sumber
1

Java 8 , 241 183 170 162 160 132 122 byte

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

Cobalah online!

Java membuatnya sangat sulit (banyak byte) ketika Anda harus membuat array dengan ukuran yang "tidak diketahui".

  • -8 Bytes berkat Magic Octopus Mm
  • -28 byte terima kasih kepada Tn. Xcoder
  • -10 byte terima kasih kepada Kevin Cruijssen
Pengembang Berkembang
sumber
1
Juga, ya, Java kasar untuk kode-golf. Tapi Anda jelas pandai dalam hal itu. Man, Anda perlu memeriksa bahasa ini disebut Groovypada dasarnya Jawa singkatan.
Magic Gurita Guci
2
132 byte dengan menghapus kondisi tambahan dari pernyataan if, dan berbagai trik.
Tn. Xcoder
1
122 byte melanjutkan @ 132 versi Mr.Xcoder di atas dengan menggabungkan int, mengubah ||ke |, dan menghapus tanda kurung baris-tunggal jika-tubuh.
Kevin Cruijssen
1
101 bytes
ceilingcat