Hình vuông hoàn hảo không biên giới


16

Đưa ra n=m^2, trả về một danh sách các số nguyên không viền m x mlưới các số nguyên từ đó 1 to n.

Ví dụ

n = 1 (m = 1)

Lưới:

[1]

Trở về:

[]

n = 4 (m = 2)

Lưới:

[1,2]
[3,4]

Trở về:

[]

n = 9 (m = 3)

Lưới:

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

Trở về:

[5]

n = 16 (m = 4)

Lưới:

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

Trở về:

[6,7,10,11]

Đối với giá trị cao hơn m, này câu trả lời thực hiện một trực quan tuyệt vời.


Quy tắc:

  • Bạn có thể mất một trong hai mhoặc n(ở đâu n = m*m).
    • Nếu dùng trong nbạn được phép có hành vi không xác định nơi có tồn tại không mcho n(EG 15).
    • n > 0, m > 0: Cả hai phải là giá trị nguyên.
  • Đầu ra có thể là một mảng 1D / 2D, ma trận hoặc khoảng trắng được phân tách
  • Đầu ra phải theo thứ tự từ ít nhất đến lớn nhất.
    • Nếu xuất ra dưới dạng ma trận, điều này có nghĩa là nó phải nằm trong lưới.
  • Đây là , byte thấp nhất.

Lỗi hoàn toàn về phía tôi, tôi đọc nó không chính xác.
DevelopDeveloper

3
@DevelopingDeveloper hey, nếu tôi có một biệt danh cho mỗi lần tôi làm điều đó thì tôi có thể mua một hoặc hai cốc bia.
Bạch tuộc ma thuật Urn

Nếu xuất ra dưới dạng mảng 2D, kết quả có thể đưa vào một mảng trống không?
Xù xì

Câu trả lời:




6

Octave , 26 byte

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

Mã xác định một hàm ẩn danh đầu vào m và đầu ra một vectơ cột (có thể trống).

Hãy thử trực tuyến!

Giải trình

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

Thạch , 8 byte

’Ṗ×+€ṖḊ€

Một liên kết đơn lấy mvà trả về một danh sách các danh sách (các hàng bên trong).

Hãy thử trực tuyến!

Làm sao?

’Ṗ×+€ṖḊ€ - 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]]

Không cảm thấy thích làm con trăn;)?
Bạch tuộc ma thuật Urn



4

R , 44 43 32 byte

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

Hãy thử trực tuyến!

Trả về một vectơ.


Định dạng đầu ra gọn gàng, theo mặc định, ma trận được xuất ra trong R như thế nào?
Bạch tuộc ma thuật Urn

1
Đúng, đó là printchức năng cho a matrix.
Giuseppe

1
Bạn có thể bỏ qua phần thứ hai mtrong matrix(1:m^2,m,m,T):matrix(1:m^2,m,,T)
JAD

@JAD có, tất nhiên. Cảm ơn.
Giuseppe

Đẹp đấy, bạn nghĩ sao về việc sử dụng scan ()? Bạn có thể lưu 2 byte. Hãy thử trực tuyến!
Robert Hacken


3

Proton , 28 byte

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

Hãy thử trực tuyến!

Lấy m làm đầu vào.

Làm sao?

Lọc các số nguyên trong [k, k 2 -k) , khi chia cho k , sẽ mang lại phần còn lại cao hơn 1 . Điều này đảm bảo rằng cả hai đầu được cắt, bởi vì đầu tiên mang lại 0 và đầu cuối mang lại 1 . Nó cũng được đảm bảo trả về giá trị cao hơn cho bất kỳ số nguyên hợp lệ nào, bởi vì chúng là liên tiếp.







2

MATL , 8 byte

:G\1>&*f

Đầu vào là m. Đầu ra là những con số theo thứ tự tăng dần.

Hãy thử trực tuyến!

Giải trình

Hãy xem xét đầu vào 4là một ví dụ.

:     % 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

Mẻ, 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(

Tôi không thể dễ dàng lặp từ 2đến m-1để tôi lặp từ 3đến mvà điều chỉnh trong tính toán.




2

Japt, 12 byte

Tôi đã dành quá nhiều thời gian để chơi golf, việc khai thác các yếu tố mà tôi đã hết thời gian để chơi golf thế hệ mảng. Bây giờ tôi cũng chỉ nhận thấy rằng chúng ta có thể lấy nđầu vào thay thế để tôi có thể lưu thứ gì đó ở đó. Được xem lại ...

òUnU²)òU m¤c

Thử nó


Giải trình

                 :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 nhờ FrownyFrog!

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

Hãy thử trực tuyến!

Sự tiến bộ ban đầu của tôi:

J , 23 byte

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

Lấy n làm đầu vào, trả về một ma trận

Làm thế nào nó hoạt động

1+i. - tạo danh sách 1..n

-@%: - tìm căn bậc hai của n và phủ định nó (m)

]\ - tạo một bảng (ma trận) mxm từ danh sách

^:2 - làm hai lần sau:

|:@}:@}. - thả hàng đầu tiên, sau đó thả hàng cuối cùng, sau đó hoán vị

[: - nắp ngã ba

Hãy thử trực tuyến!


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

1
Không,1 1}:@}.-@%:}:\1+i.
FrownyFrog

@FrownyFrog - Tuyệt, cảm ơn! Tôi không biết về danh sách còn lại của cuộc tranh luận về}.
Galen Ivanov

2

Husk , 9 byte

‼ȯTthS↑CN

Hãy thử trực tuyến!

Giải trình

‼ȯ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

Lấy mlàm đầu vào

Giải trình

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

Hãy thử trực tuyến!


Giải pháp cần ncó cũng là 14 byte:

õ òU¬ ÅkJ ®ÅkJ

Hãy thử trực tuyến!


2

TI-BASIC, 44 43 byte (được mã hóa)

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

Phiên bản dễ đọc:

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

Thật không may, cần phải in các danh sách trống theo cách thủ công vì TI-BASIC thường không cho phép điều đó. Nếu mđược cho lớn hơn hai, mã có thể giảm xuống chỉ còn 29 byte .





1

Pyt , 13 byte

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

Câu trả lời của Jonathan Jonathan Allan

Giải trình:

                    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

Hãy thử trực tuyến!


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

Hãy thử trực tuyến!

Java làm cho nó rất khó khăn (rất nhiều byte) khi bạn phải tạo một mảng có kích thước hơi "không xác định".

  • -8 byte nhờ Magic Octopus Urn
  • -28 byte nhờ ông Xcoder
  • -10 byte nhờ Kevin Cruijssen

1
Ngoài ra, có, Java là thô cho golf-code. Nhưng rõ ràng là bạn giỏi về nó. Man, bạn cần kiểm tra ngôn ngữ này được gọi là GroovyJava về cơ bản.
Bạch tuộc ma thuật Urn

2
132 byte bằng cách loại bỏ một điều kiện bổ sung từ câu lệnh if và các thủ thuật khác nhau.
Ông Xcoder

1
122 byte tiếp tục @ Mr.Xcoder phiên bản 132-byte 's trên bằng cách kết hợp int, thay đổi ||đến |, và loại bỏ các dấu ngoặc của dòng đơn if-cơ thể.
Kevin Cruijssen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.