สี่เหลี่ยมที่สมบูรณ์แบบไร้พรมแดน


16

ได้รับn=m^2กลับรายการของจำนวนเต็มที่ไม่ชายแดนตารางของจำนวนเต็มจากm x m1 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คุณได้รับอนุญาตให้มีพฤติกรรมที่ไม่ได้กำหนดซึ่งไม่มีmสำหรับn(EG 15)
    • n > 0, m > 0: ทั้งสองต้องเป็นค่าจำนวนเต็ม
  • ผลลัพธ์อาจเป็นอาร์เรย์ 1D / 2D เมทริกซ์หรือช่องว่างที่คั่นด้วย
  • เอาต์พุตต้องอยู่ในลำดับตั้งแต่น้อยไปหามากที่สุด
    • ถ้าเอาท์พุทเป็นเมทริกซ์นี่หมายความว่ามันจะต้องเป็นอย่างที่มันจะเป็นในตาราง
  • นี่คือชนะน้อยที่สุดนับไบต์

ทำผิดพลาดเสร็จฉันอ่านผิด
กำลังพัฒนาผู้พัฒนา

3
@DevelopingDeveloper นักพัฒนาเฮ้คนถ้าฉันมี nickle ทุกครั้งที่ฉันทำที่ฉันจะสามารถซื้อเบียร์หนึ่งหรือสอง
Magic Octopus Urn

หากการแสดงผลเป็นอาเรย์ 2 มิติจะสามารถรวมอาเรย์ที่ว่างเปล่าเดี่ยวไว้ในผลลัพธ์ได้หรือไม่
ขนปุย

คำตอบ:




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 ไบต์

’Ṗ×+€ṖḊ€

ลิงก์ monadic ที่รับ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]]

ไม่รู้สึกอยากทำงูหลามใช่ไหม?)
Magic Octopus Urn



4

R , 44 43 32 ไบต์

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

ลองออนไลน์!

ส่งคืนเวกเตอร์


รูปแบบเอาต์พุตที่เรียบร้อยแล้วนั่นเป็นค่าเริ่มต้นว่าเมทริกซ์จะเป็นเอาต์พุตใน R หรือไม่?
Magic Octopus Urn

1
อ้างว่าเป็นฟังก์ชั่นสำหรับprint matrix
Giuseppe

1
คุณสามารถละเว้นส่วนที่สองได้mในmatrix(1:m^2,m,m,T):matrix(1:m^2,m,,T)
JAD

@ JAD ใช่แน่นอน ขอบคุณ
Giuseppe

เยี่ยมมากคุณคิดอย่างไรกับการใช้การสแกน () คุณอาจบันทึก 2 ไบต์ ลองออนไลน์!
Robert Hacken

3

เยลลี่ 8 ไบต์

sƽḊṖ$⁺€

ลองออนไลน์!


การใช้งานmก็ทำได้²s⁸ḊṖ$⁺€เช่นกัน (ฉันได้โพสต์mวิธีอื่นด้วย)
Jonathan Allan

@JonathanAllan ค้นพบแล้ว แต่ไม่มีการบันทึกจำนวนไบต์คุณไม่สามารถลบ:(
Erik the Outgolfer

3

โปรตอนขนาด 28 ไบต์

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

ลองออนไลน์!

ใช้เวลาเป็นอินพุต

อย่างไร?

กรองจำนวนเต็มใน[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

J , 23 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 - เจ๋งขอบคุณ! ฉันไม่รู้เกี่ยวกับอาร์กิวเมนต์ที่เหลือของรายการ}.
กาเลนอีวานอฟ

2

Husk , 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 ไบต์

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

คำตอบของเยลลี่พอร์ตของJonathan Allan

คำอธิบาย:

                    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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.