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.

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

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

Vous n'aviez pas envie de faire le python;)?
Magic Octopus Urn



4

R , 44 43 32 octets

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

Essayez-le en ligne!

Renvoie un vecteur.


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

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.







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]


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.




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]

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!


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.

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!


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 .





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!


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

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.