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.

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 , 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

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]]

Tidak merasa ingin melakukan python;)?
Magic Octopus Urn



4

R , 44 43 32 byte

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

Cobalah online!

Mengembalikan vektor.


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

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.





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.



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]


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.




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]

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!


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.

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!


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 .



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



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!


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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.