Idealne kwadraty bez granic


16

Biorąc pod uwagę n=m^2, zwraca listę liczb całkowitych, które nie graniczą z m x msiatką liczb całkowitych od 1 to n.

Przykłady

n = 1 (m = 1)

Krata:

[1]

Powrót:

[]

n = 4 (m = 2)

Krata:

[1,2]
[3,4]

Powrót:

[]

n = 9 (m = 3)

Krata:

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

Powrót:

[5]

n = 16 (m = 4)

Krata:

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

Powrót:

[6,7,10,11]

Dla wyższych wartości m, to odpowiedź robi wielką wizualizację.


Zasady:

  • Możesz wziąć jeden mlub n(gdzie n = m*m).
    • Jeśli biorąc w nwas mogą mieć niezdefiniowane zachowanie tam gdzie nie istnieje mdla n(np 15).
    • n > 0, m > 0: Obie muszą być liczbami całkowitymi.
  • Dane wyjściowe mogą być w postaci tablicy 1D / 2D, macierzy lub białych znaków
  • Dane wyjściowe muszą być uporządkowane od najmniejszej do największej.
    • Jeśli dane wyjściowe mają postać macierzy, oznacza to, że musi być tak, jak w siatce.
  • To jest , wygrana o najniższej liczbie bajtów.

Całkowity błąd z mojej strony, źle go odczytałem.
DevelopingDeveloper

3
@ DevelopingDeveloper hej człowieku, gdybym miał za każdym razem monetę, mógłbym kupić piwo lub dwa.
Magic Octopus Urn

Jeśli wynik jest generowany jako tablica 2D, czy wynik może zawierać pojedynczą pustą tablicę?
Kudłaty

Odpowiedzi:




6

Oktawa , 26 bajtów

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

Kod definiuje anonimową funkcję, która wprowadza mi wyprowadza (prawdopodobnie pusty) wektor kolumny.

Wypróbuj online!

Wyjaśnienie

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

Galaretka , 8 bajtów

’Ṗ×+€ṖḊ€

Monadyczny link pobierający mi zwracający listę list (wewnętrzne rzędy).

Wypróbuj online!

W jaki sposób?

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

Nie miałeś ochoty zrobić Pythona;)?
Magic Octopus Urn





3

Proton , 28 bajtów

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

Wypróbuj online!

Przyjmuje m jako dane wejściowe.

W jaki sposób?

Filtruje liczby całkowite w [k, k 2 -k), które po podzieleniu przez k dają resztę wyższą niż 1 . Zapewnia to obcinanie obu końców, ponieważ pierwszy daje 0, a ostatni 1 . Gwarantowane jest również zwrócenie wyższej wartości dla dowolnej poprawnej liczby całkowitej, ponieważ są one następujące po sobie.







2

MATL , 8 bajtów

:G\1>&*f

Dane wejściowe to m. Dane wyjściowe to liczby w porządku rosnącym.

Wypróbuj online!

Wyjaśnienie

Rozważ dane wejściowe 4jako przykład.

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

Partia, 85 bajtów

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

Nie mogę łatwo zapętlać od 2do, m-1więc zapętlam od 3do mi dostosowuję obliczenia.




2

Japt, 12 bajtów

Tak długo grałem w ekstrakcję elementów, że zabrakło mi czasu na grę w golfa. Dopiero teraz zauważam, że nzamiast tego możemy wziąć jako dane wejściowe, więc mogę coś tam zapisać. Do ponownego odwiedzenia ...

òUnU²)òU m¤c

Spróbuj


Wyjaśnienie

                 :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 bajtów

-4 bajty dzięki FrownyFrog!

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

Wypróbuj online!

Mój oryginalny olution:

J , 23 bajty

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

Pobiera n jako dane wejściowe, zwraca macierz

Jak to działa

1+i. - generuje listę 1..n

-@%: - znajduje pierwiastek kwadratowy z n i neguje go (m)

]\ - tworzy tabelę (macierz) mxm z listy

^:2 - wykonaj dwa razy następujące czynności:

|:@}:@}. - upuść pierwszy rząd, następnie upuść ostatni rząd, a następnie transponuj

[: - zakryj widelec

Wypróbuj online!


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

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

@FrownyFrog - Fajnie, dziękuję! Nie wiedziałem o liście pozostawionej argument}.
Galen Iwanow

2

Łuska , 9 bajtów

‼ȯTthS↑CN

Wypróbuj online!

Wyjaśnienie

‼ȯ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 bajtów

²õ òU ÅkJ ®ÅkJ

Pobiera mjako dane wejściowe

Wyjaśnienie

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

Wypróbuj online!


Rozwiązanie, które zajmuje nrównież 14 bajtów:

õ òU¬ ÅkJ ®ÅkJ

Wypróbuj online!


2

TI-BASIC, 44 43 bajty (tokenizowane)

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

Wersja do odczytu:

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

Niestety konieczne było ręczne drukowanie pustych list, ponieważ TI-BASIC normalnie na to nie pozwala. Jeśli mpodano więcej niż dwa, kod można by zmniejszyć do zaledwie 29 bajtów .





1

Pyt , 13 bajtów

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

Port galaretki Jonathana Allana

Wyjaśnienie:

                    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

Wypróbuj online!


1

Python, 111 bajtów

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 bajtów

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

Wypróbuj online!

Java sprawia, że ​​jest bardzo trudny (dużo bajtów), gdy trzeba stworzyć tablicę nieco „nieznanego” rozmiaru.

  • -8 bajtów dzięki Magic Octopus Urn
  • -28 bajtów dzięki Mr. Xcoder
  • -10 bajtów dzięki Kevin Cruijssen

1
Tak, tak, Java jest ostra do gry w golfa. Ale oczywiście jesteś w tym dobry. Człowieku, musisz sprawdzić ten język, który nazywa Groovysię w skrócie Java.
Magic Octopus Urn

2
132 bajty poprzez usunięcie dodatkowego warunku z instrukcji if i różne sztuczki.
Pan Xcoder,

1
122 bajtów ciągłe @ Mr.Xcoder jest w wersji 132-bajtowy powyżej łączenie int, zmieniające ||się |i usuwanie wsporniki pojedynczej linii, jeśli ciało.
Kevin Cruijssen

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.