Des carrés parfaits sans frontières

16

Étant donné n=m^2, renvoyez une liste d'entiers qui ne bordent pas la m x mgrille d'entiers 1 to n.

Exemples

n = 1 (m = 1)

La grille:

[1]

Revenir:

[]

n = 4 (m = 2)

La grille:

[1,2]
[3,4]

Revenir:

[]

n = 9 (m = 3)

La grille:

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

Revenir:

[5]

n = 16 (m = 4)

La grille:

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

Revenir:

[6,7,10,11]

Pour des valeurs plus élevées de m, cette réponse permet une excellente visualisation.


Règles:

  • Vous pouvez prendre soit mou n(où n = m*m).
    • Si la prise en nvous sont autorisés à avoir un comportement indéfini où il existe pas mpour n(EG 15).
    • n > 0, m > 0: Les deux doivent être des valeurs entières.
  • La sortie peut être un tableau 1D / 2D, une matrice ou un espace séparé
  • La sortie doit être dans l'ordre du plus petit au plus grand.
    • Si la sortie sous forme de matrice, cela signifie qu'elle doit être comme elle le serait dans la grille.
  • Il s'agit du , le plus petit nombre de victoires d'octets.
Urne de poulpe magique
la source
Faute complète de ma part, je l'ai mal lu.
DevelopingDeveloper
3
@DevelopingDeveloper hey man, si j'avais un nickle pour chaque fois que je le faisais, je pourrais acheter une bière ou deux.
Magic Octopus Urn
Si la sortie est un tableau 2D, un seul tableau vide peut-il être inclus dans le résultat?
Shaggy

Réponses:

6

Octave , 31 octets

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

Renvoie une matrice.

Essayez-le en ligne!

Steadybox
la source
2
Agréable! Je n'ai jamais rencontré cette vec2matfonction auparavant.
Tom Carpenter
6

Octave , 26 octets

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

Le code définit une fonction anonyme qui entre met sort un vecteur de colonne (éventuellement vide).

Essayez-le en ligne!

Explication

@(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
la source
5

Gelée , 8 octets

’Ṗ×+€ṖḊ€

Un lien monadique prenant met renvoyant une liste de listes (les lignes intérieures).

Essayez-le en ligne!

Comment?

’Ṗ×+€ṖḊ€ - 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
la source
Vous n'aviez pas envie de faire le python;)?
Magic Octopus Urn
4

Pure Bash, 49

La réponse ennuyeuse:

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

Essayez-le en ligne .


Ou la réponse intéressante pour 52:

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

Essayez-le en ligne .

Traumatisme numérique
la source
4

Haskell , 31 octets

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

Essayez-le en ligne!

Version mathématique:

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

: P

totalement humain
la source
Attendez, ce n'est pas valide, f(5)devrait être7,8,9,12,13,14,17,18,19
Magic Octopus Urn
Attendez, oups je suis un idiot.
2018
4

R , 44 43 32 octets

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

Essayez-le en ligne!

Renvoie un vecteur.

Giuseppe
la source
Format de sortie soigné, est-ce par défaut la sortie d'une matrice dans R?
Magic Octopus Urn
1
Oui, c'est la printfonction pour a matrix.
Giuseppe
1
Vous pouvez omettre le deuxième mdans matrix(1:m^2,m,m,T):matrix(1:m^2,m,,T)
JAD
@JAD oui, bien sûr. Merci.
Giuseppe
Bien, que pensez-vous de l'utilisation de scan ()? Vous pourriez économiser 2 octets. Essayez-le en ligne!
Robert Hacken
3

Gelée , 8 octets

sƽḊṖ$⁺€

Essayez-le en ligne!

Erik le Outgolfer
la source
En utiliser mun pourrait ²s⁸ḊṖ$⁺€aussi faire l'affaire . (J'ai également publié une mautre méthode alternative.)
Jonathan Allan
@JonathanAllan Déjà découvert que, mais aucun octet de sauvegarde là-bas, vous ne pouvez pas supprimer le :(
Erik the Outgolfer
3

Proton , 28 octets

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

Essayez-le en ligne!

Prend m comme entrée.

Comment?

Filtre les entiers dans [k, k 2 -k) qui, lorsqu'ils sont divisés par k , donnent un reste supérieur à 1 . Cela garantit que les deux extrémités sont coupées, car la première donne 0 et la dernière donne 1 . Il est également garanti de retourner une valeur plus élevée pour tout entier valide, car ils sont consécutifs.

M. Xcoder
la source
2

05AB1E , 9 octets

LItä¦¨ε¦¨

Essayez-le en ligne!

M. Xcoder
la source
LItä¦¨ε¦¨est très bien, la sortie peut être un tableau 2D.
Urne de poulpe magique le
Oh, j'aurais dû mieux lire la spécification. Merci pour l'information!
M. Xcoder
2

Python 2 , 44 octets

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

Essayez-le en ligne!

Je promets que c'est ma dernière réponse (à ce défi) aujourd'hui. Prend m comme entrée.

M. Xcoder
la source
2

Rubis , 32 octets

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

Prend m, renvoie un tableau unidimensionnel.

Essayez-le en ligne!

Réintégrer Monica - notmaynard
la source
2

MATL , 8 octets

:G\1>&*f

L'entrée est m. La sortie correspond aux nombres en ordre croissant.

Essayez-le en ligne!

Explication

Considérez l'entrée 4comme exemple.

:     % 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
la source
2

Lot, 85 octets

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

Je ne peux pas facilement boucler de 2à m-1donc je boucle de 3à met ajuste le calcul.

Neil
la source
2

Japt, 12 octets

J'ai passé tellement de temps à jouer au golf à l'extraction d'éléments que j'ai manqué de temps pour jouer à la génération de tableaux. Je remarque également seulement maintenant que nous pouvons prendre ncomme entrée à la place afin que je puisse être en mesure d'enregistrer quelque chose là-bas. A revisiter ...

òUnU²)òU m¤c

Essayez-le


Explication

                 :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]
Hirsute
la source
2

J , 23 19 octets

-4 octets grâce à FrownyFrog!

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

Essayez-le en ligne!

Ma solution originale:

J , 23 octets

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

Prend n en entrée, retourne une matrice

Comment ça fonctionne

1+i. - génère une liste 1..n

-@%: - trouve la racine carrée de n et la nie (m)

]\ - crée un tableau (matrice) mxm à partir de la liste

^:2 - procédez deux fois:

|:@}:@}. - déposez la première ligne, puis déposez la dernière ligne, puis transposez

[: - coiffer la fourche

Essayez-le en ligne!

Galen Ivanov
la source
1}:@}.-@%:}.@}:\1+i.
FrownyFrog
1
Non,1 1}:@}.-@%:}:\1+i.
FrownyFrog
@FrownyFrog - Cool, merci! Je ne connaissais pas l'argument de gauche de la liste}.
Galen Ivanov
2

Coque , 9 octets

‼ȯTthS↑CN

Essayez-le en ligne!

Explication

‼ȯ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
la source
2

Japt , 14 octets

²õ òU ÅkJ ®ÅkJ

Prend men entrée

Explication

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

Essayez-le en ligne!


La solution qui prend naussi 14 octets:

õ òU¬ ÅkJ ®ÅkJ

Essayez-le en ligne!

Oliver
la source
2

TI-BASIC, 44 43 octets (à jeton)

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

Version lisible:

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

Il était malheureusement nécessaire d'imprimer des listes vides manuellement car TI-BASIC ne le permet normalement pas. Si mon leur donnait plus de deux, le code pourrait être réduit à seulement 29 octets .

fakedad
la source
1

Rouge , 63 62 octets

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

Essayez-le en ligne!

Ceci est un port rouge de la solution Python 2 de Haskell / Mr. Xcoder totalement humaine

Galen Ivanov
la source
1

Pyt , 13 octets

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

Réponse de Jelly au port de Jonathan Allan

Explication:

                    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

Essayez-le en ligne!

mudkip201
la source
1

Python, 111 octets

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
la source
1

Java 8 , 241 183 170 162 160 160 132 122 octets

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

Essayez-le en ligne!

Java le rend très difficile (beaucoup d'octets) lorsque vous devez créer un tableau de taille quelque peu "inconnue".

  • -8 octets grâce à l'urne Magic Octopus
  • -28 octets grâce à M. Xcoder
  • -10 octets grâce à Kevin Cruijssen
DevelopingDeveloper
la source
1
Aussi, oui, Java est rude pour le golf de code. Mais vous êtes évidemment bon dans ce domaine. Man, vous devez vérifier ce langage appelé Groovyessentiellement Java.
Magic Octopus Urn
2
132 octets en supprimant une condition supplémentaire de l'instruction if et diverses astuces.
M. Xcoder
1
122 octets se poursuivant @ La version de 132 octets de Mr.Xcoder ci -dessus en combinant le int, en changeant le ||en |et en supprimant les crochets du corps de ligne unique.
Kevin Cruijssen
1
101 octets
plafondcat