1) Prova questa:
x <- 3 # input
n <- 2*x-1
m <- diag(n)
x - pmax(abs(row(m) - x), abs(col(m) - x))
dono:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 1 2 2 2 1
[3,] 1 2 3 2 1
[4,] 1 2 2 2 1
[5,] 1 1 1 1 1
2) Un secondo approccio è:
x <- 3 # input
n <- 2*x-1
mid <- pmin(1:n, n:1) # middle row/column
outer(mid, mid, pmin)
dando lo stesso risultato di prima.
3) ancora un altro approccio avente alcune somiglianze precedenti due approcci è:
x <- 3 # input
n <- 2*x-1
Dist <- abs(seq_len(n) - x)
x - outer(Dist, Dist, pmax)
Nota: Quanto precede rende la matrice del campione mostrato in questione, ma l'oggetto della domanda dice il gli anelli dovrebbero aumentare, il che potrebbe significare aumentare dal centro verso l'esterno, quindi se è quello che si vuole, provare questo dove m
, mid
e Dist
sono come prima:
pmax(abs(row(m) - x), abs(col(m) - x)) + 1
o
x - outer(mid, mid, pmin) + 1
o
outer(Dist, Dist, pmax) + 1
Qualsiasi di queste danno:
[,1] [,2] [,3] [,4] [,5]
[1,] 3 3 3 3 3
[2,] 3 2 2 2 3
[3,] 3 2 1 2 3
[4,] 3 2 2 2 3
[5,] 3 3 3 3 3