64 lines
1.6 KiB
R
64 lines
1.6 KiB
R
# Function to calculate Padovan sequence iteratively
|
|
padovan_sequence <- function(n) {
|
|
recurrences <- numeric(n)
|
|
recurrences[1:3] <- c(1, 1, 1)
|
|
if (n > 3) {
|
|
for (i in 4:n) {
|
|
recurrences[i] <- recurrences[i-2] + recurrences[i-3]
|
|
}
|
|
}
|
|
recurrences
|
|
}
|
|
|
|
# Function to calculate Padovan floor
|
|
padovan_floor <- function(aN) {
|
|
PP <- 1.324717957244746025960908854
|
|
SS <- 1.0453567932525329623
|
|
floor((PP^(aN - 1)) / SS + 0.5)
|
|
}
|
|
|
|
# Function to create L-system
|
|
create_l_system<- function() {
|
|
words <- c("A")
|
|
text <- "A"
|
|
|
|
while (length(words) < 32) {
|
|
text <- strsplit(text, "")[[1]] # Split the string into a list of characters
|
|
text <- sapply(text, function(char) {
|
|
if (char == "A") {
|
|
return("B")
|
|
} else if (char == "B") {
|
|
return("C")
|
|
} else if (char == "C") {
|
|
return("AB")
|
|
}
|
|
})
|
|
text <- paste(text, collapse = "") # Collapse the list back into a single string
|
|
words <- c(words, text) # Append the new word to the list
|
|
}
|
|
|
|
words
|
|
}
|
|
|
|
|
|
# Main script
|
|
num_terms <- 64
|
|
padovan_seq <- padovan_sequence(num_terms)
|
|
floors <- sapply(0:(num_terms-1), padovan_floor)
|
|
|
|
cat("The first 20 terms of the Padovan sequence:\n")
|
|
cat(padovan_seq[1:20], sep=" ", end="\n")
|
|
cat("\n")
|
|
|
|
cat("Recurrence and floor functions agree for first 64 terms?", all(padovan_seq == floors), "\n\n")
|
|
|
|
words <- create_l_system()
|
|
|
|
cat("The first 10 terms of the L-system:\n")
|
|
cat(words[1:10], sep=" ", end="\n")
|
|
cat("\n")
|
|
|
|
cat("Length of first 32 terms produced from the L-system match Padovan sequence? ")
|
|
word_lengths <- sapply(words, nchar)
|
|
cat(all(word_lengths[1:32] == padovan_seq[1:32]))
|