Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
3
Task/Spiral-matrix/R/spiral-matrix-1.r
Normal file
3
Task/Spiral-matrix/R/spiral-matrix-1.r
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
spiral <- function(n) matrix(order(cumsum(rep(rep_len(c(1, n, -1, -n), 2 * n - 1), n - seq(2 * n - 1) %/% 2))), n, byrow = T) - 1
|
||||
|
||||
spiral(5)
|
||||
15
Task/Spiral-matrix/R/spiral-matrix-2.r
Normal file
15
Task/Spiral-matrix/R/spiral-matrix-2.r
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
spiral_matrix <- function(n) {
|
||||
spiralv <- function(v) {
|
||||
n <- sqrt(length(v))
|
||||
if (n != floor(n))
|
||||
stop("length of v should be a square of an integer")
|
||||
if (n == 0)
|
||||
stop("v should be of positive length")
|
||||
if (n == 1)
|
||||
m <- matrix(v, 1, 1)
|
||||
else
|
||||
m <- rbind(v[1:n], cbind(spiralv(v[(2 * n):(n^2)])[(n - 1):1, (n - 1):1], v[(n + 1):(2 * n - 1)]))
|
||||
m
|
||||
}
|
||||
spiralv(1:(n^2))
|
||||
}
|
||||
27
Task/Spiral-matrix/R/spiral-matrix-3.r
Normal file
27
Task/Spiral-matrix/R/spiral-matrix-3.r
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
spiralMatrix <- function(n)
|
||||
{
|
||||
spiral <- matrix(0, nrow = n, ncol = n)
|
||||
firstNumToWrite <- 0
|
||||
neededLength <- n
|
||||
startPt <- cbind(1, 0)#(1, 0) is needed for the first call to writeRight to work. We need to start in row 1.
|
||||
writingDirectionIndex <- 0
|
||||
#These two functions select a collection of adjacent elements and replaces them with the needed sequence.
|
||||
#This heavily uses R's vector recycling rules.
|
||||
writeDown <- function(seq) spiral[startPt[1] + seq, startPt[2]] <<- seq_len(neededLength) - 1 + firstNumToWrite
|
||||
writeRight <- function(seq) spiral[startPt[1], startPt[2] + seq] <<- seq_len(neededLength) - 1 + firstNumToWrite
|
||||
while(firstNumToWrite != n^2)
|
||||
{
|
||||
writingDirectionIndex <- writingDirectionIndex %% 4 + 1
|
||||
seq <- seq_len(neededLength)
|
||||
switch(writingDirectionIndex,
|
||||
writeRight(seq),
|
||||
writeDown(seq),
|
||||
writeRight(-seq),
|
||||
writeDown(-seq))
|
||||
if(writingDirectionIndex %% 2) neededLength <- neededLength - 1
|
||||
max <- max(spiral)
|
||||
firstNumToWrite <- max + 1
|
||||
startPt <- which(max == spiral, arr.ind = TRUE)
|
||||
}
|
||||
spiral
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue