1) Spróbuj tego:
x <- 3 # input
n <- 2*x-1
m <- diag(n)
x - pmax(abs(row(m) - x), abs(col(m) - x))
dawanie:
[,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) Drugie podejście jest:
x <- 3 # input
n <- 2*x-1
mid <- pmin(1:n, n:1) # middle row/column
outer(mid, mid, pmin)
podając taki sam wynik jak poprzednio.
3) Jeszcze inne podejście mające pewne podobieństwa do poprzednich dwóch podejść jest:
x <- 3 # input
n <- 2*x-1
Dist <- abs(seq_len(n) - x)
x - outer(Dist, Dist, pmax)
Uwaga: Powyższy daje matrycy próbek pokazano na pytanie, ale przedmiotem pytanie mówi Pierścienie powinny się zwiększać, co może oznaczać zwiększenie od środka na zewnątrz, więc jeśli to jest to, co jest potrzebne, spróbuj tego, gdzie m
,i są jak wcześniej:
pmax(abs(row(m) - x), abs(col(m) - x)) + 1
lub
x - outer(mid, mid, pmin) + 1
lub
outer(Dist, Dist, pmax) + 1
Każdy z nich daje:
[,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