J'ai écrit un script pour crypter et décrypter des chaînes dans R, la première partie du code définit un vecteur contenant un ensemble de caractères. Ensuite, je crée un dictionnaire de chiffrement en mélangeant le vecteur et en attribuant des noms à chacun d'entre eux. Cette partie est temporaire, éventuellement j'aurai un vecteur de cryptage fixe. Là où j'ai des problèmes, c'est en écrivant mes fonctions de cryptage et de décryptage efficacement. J'obtiens la sortie désirée, mais je pense qu'il y a une façon plus élégante d'y arriver - celle qui nécessite moins de calcul. Les idées qui viennent à l'esprit remplacent les boucles for par lapply (ou vapply), trouvant une alternative pour ne pas avoir à convertir la chaîne en vecteur, en utilisant des expressions régulières, et ainsi de suite. Cependant, je suis nouveau à R et n'ai pas été capable de maîtriser son pouvoir. Voici mon code:R - cryptage efficace d'une chaîne dans R
# Script to encode and decode strings.
# Useful for passwords, email messages
# that do not contain images, and other
# text applications.
# Steps to create a vector containing all characters
## Numeric characters
nums <- c("1","2","3", "4", "5", "6", "7",
"8", "9", "0")
## Symbols
sym <- c("!", "@", "#", "$", "%", "^",
"&", "*", "(", ")", "-", "_",
"=", "+", "[", "{", "]", "}",
"|", "\\", ":", "/", "?", ".",
">", "<", ",", "`", "~", ";",
"'", " ")
## Vector with numeric, symbols, and letters
chars <- c(LETTERS, letters, sym, nums)
# Create a code vector
## Randomly sorted 'chars' vector
code <- sample(chars)
## Assing names to facilitate coding and decoding
names(code) <- chars
# Define a string to code and decode
text <- "Hello World!"
# Function to code string
coder <- function(text, code){
# Make string into a vector to facilitate iteration
# over items
t <- unlist(strsplit(as.character(text), split=''))
# Initiate a vector to store coded vector
new <- c()
# For loop to code each element in the vector
for(i in 1:length(t)){
new <- c(new, names(code)[which(code == t[i])])
}
# Collape vector into string
paste(new, collapse = '')
}
# Function call to verify output
encoded_str <- coder(text, code)
print(encoded_str)
decoder <- function(text, code){
# Make string into a vector to facilitate iteration
# over items
t <- unlist(strsplit(as.character(text), split=''))
# Initiate a vector to store decoded vector
new <- c()
# For loop to decode each element in the vector
for(i in 1:length(t)){
new <- c(new, code[[t[i]]])
}
# Collape vector into string
paste(new, collapse = '')
}
# Function call to verify output
decoded_str <- decoder(encoded_str, code)
print(decoded_str)
Est-ce juste pour des fins éducatives ou de production? – zaph
Usage personnel et (auto) éducatif – Agarp