Quadrati perfetti senza bordi


16

Dato n=m^2, restituisce un elenco di numeri interi che non delimitano la m x mgriglia di numeri interi 1 to n.

Esempi

n = 1 (m = 1)

Griglia:

[1]

Ritorno:

[]

n = 4 (m = 2)

Griglia:

[1,2]
[3,4]

Ritorno:

[]

n = 9 (m = 3)

Griglia:

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

Ritorno:

[5]

n = 16 (m = 4)

Griglia:

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

Ritorno:

[6,7,10,11]

Per valori più alti di m, questa risposta offre un'ottima visualizzazione.


Regole:

  • Puoi accettare uno mo n(dove n = m*m).
    • Se prendendo in nsi è permesso di avere un comportamento indefinito in cui non esiste mper n(EG 15).
    • n > 0, m > 0: Entrambi devono essere valori interi.
  • L'output può essere un array 1D / 2D, una matrice o uno spazio bianco delimitato
  • L'output deve essere in ordine dal minimo al massimo.
    • Se l'output è una matrice, ciò significa che deve essere come nella griglia.
  • Questo è , vince il conteggio di byte più basso.

Completa colpa da parte mia, l'ho letto in modo errato.
DevelopingDeveloper

3
@SviluppoDeveloper hey amico, se avessi un nick per ogni volta che lo farei sarei in grado di comprare una birra o due.
Magic Octopus Urn

Se viene emesso come un array 2D, è possibile includere un singolo array vuoto nel risultato?
Shaggy

Risposte:




6

Ottava , 26 byte

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

Il codice definisce una funzione anonima che input me output un vettore di colonna (possibilmente vuoto).

Provalo online!

Spiegazione

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

Gelatina , 8 byte

’Ṗ×+€ṖḊ€

Un collegamento monadico che prende me restituisce un elenco di elenchi (le righe interne).

Provalo online!

Come?

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

Non ti andava di fare il pitone;)?
Magic Octopus Urn





3

Proton , 28 byte

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

Provalo online!

Prende m come input.

Come?

Filtra gli interi in [k, k 2 -k) che, se divisi per k , producono un resto maggiore di 1 . Questo assicura che entrambe le estremità vengano tagliate, perché la prima produce 0 e l'ultima produce 1 . È inoltre garantito che restituisca un valore più elevato per qualsiasi numero intero valido, poiché sono consecutivi.







2

MATL , 8 byte

:G\1>&*f

L'input è m. L'output è i numeri in ordine crescente.

Provalo online!

Spiegazione

Considera l'input 4come esempio.

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

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

Non riesco facilmente a eseguire il loop da 2a, m-1quindi eseguo il loop da 3a me mi adeguo nel calcolo.




2

Japt, 12 byte

Ho trascorso così tanto tempo a giocare a golf nell'estrazione di elementi che ho finito il tempo per giocare a golf con la generazione di array. Sto solo notando solo ora che possiamo prendere ncome input invece così potrei essere in grado di salvare qualcosa lì. Per essere rivisitato ...

òUnU²)òU m¤c

Provalo


Spiegazione

                 :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 grazie a FrownyFrog!

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

Provalo online!

La mia olution originale:

J , 23 byte

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

Prende n come input, restituisce una matrice

Come funziona

1+i. - genera un elenco 1..n

-@%: - trova la radice quadrata di n e la nega (m)

]\ - crea una tabella (matrice) mxm dall'elenco

^:2 - procedi due volte nel modo seguente:

|:@}:@}. - rilascia la prima riga, quindi rilascia l'ultima riga, quindi trasponi

[: - tappare la forcella

Provalo online!


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

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

@FrownyFrog - Fantastico, grazie! Non sapevo dell'elenco lasciato argomento di}.
Galen Ivanov,

2

Buccia , 9 byte

‼ȯTthS↑CN

Provalo online!

Spiegazione

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

Accetta mcome input

Spiegazione

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

Provalo online!


La soluzione che richiede nè anche 14 byte:

õ òU¬ ÅkJ ®ÅkJ

Provalo online!


2

TI-BASIC, 44 43 byte (tokenizzato)

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

Versione leggibile:

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

Purtroppo è stato necessario stampare manualmente elenchi vuoti poiché TI-BASIC normalmente non lo consente. Se mfossero stati dati più di due, il codice potrebbe essere ridotto a soli 29 byte .



1

Rosso , 63 62 byte

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

Provalo online!

Questa è una porta rossa della soluzione Python 2 di Haskell / Mr. Xcoder totalmente umana



1

Pyt , 13 byte

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

La risposta della gelatina di Port of Jonathan Allan

Spiegazione:

                    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

Provalo online!


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

Provalo online!

Java lo rende molto difficile (molti byte) quando devi creare un array di dimensioni un po '"sconosciute".

  • -8 byte grazie a Magic Octopus Urn
  • -28 byte grazie a Mr. Xcoder
  • -10 byte grazie a Kevin Cruijssen

1
Inoltre, sì, Java è approssimativo per il code-golf. Ma ovviamente sei bravo a farlo. Amico, devi dare un'occhiata a questo linguaggio chiamato Groovysostanzialmente Java abbreviato.
Magic Octopus Urn

2
132 byte rimuovendo una condizione aggiuntiva dall'istruzione if e vari trucchi.
Mr. Xcoder,

1
122 byte continuando alla precedente versione a 132 byte di Mr.Xcoder combinando int, modificando ||in |e rimuovendo le parentesi dell'if -corpo a riga singola.
Kevin Cruijssen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.