Tenho um conjunto muito simples de funções que pegam uma variável de caractere de entrada (uma palavra ou frase) e retornam uma nova. Basicamente, cada uma dessas funções realiza uma criptografia diferente na palavra de entrada.
Como tanto a entrada quanto a saída dessas funções são variáveis de caracteres, a saída de uma função pode ser usada como entrada para outra, de modo que várias cifras sequenciais podem ser aplicadas. Por exemplo:
#install.packages("ciphertext")
library(ciphertext)
first_output <- ciphertext::caesar("hello"); first_output
[1] "ifmmp"
ciphertext::atbash(first_output)
[1] "runnk"
Eu queria saber se existe a possibilidade em R de criar uma função (que nomeei combinef
abaixo) que recebe como entrada uma variável de caractere inicial ("olá", no meu exemplo) e aplica sequencialmente outras funções listadas como argumentos adicionais.
Então o algoritmo seria algo como:
- Pegue a palavra inicial ("olá")
- Aplique a primeira função listada à palavra inicial e obtenha uma nova palavra
- repita o passo 1 com a nova palavra até usar todos os argumentos listados
Como eu gostaria que funcionasse e o resultado final esperado:
combinef("hello", caesar, atbash) #apply caesar function to "hello", and then atbash
[1] "runnk"
combinef("hello", caesar, atbash, polybius) #apply polybius after the atbash
"42 45 33 33 25"
Todas as minhas tentativas de criar tal função são extremamente prolixas, pois tentei fazer uso de if (argument2 == "function_name")
estruturas, mas isso se tornou impraticável quando o número de métodos de cifragem potenciais aumentou.
Qualquer ajuda ou sugestão será muito apreciada!
Aqui está uma abordagem básica R com
Reduce()
, que usa uma função binária para combinar sucessivamente os elementos de um determinado vetor e um possível valor inicial :Alternativamente, você pode usar
purrr::compose()
, que cria uma nova função que é a composição de múltiplas funções :Tenho certeza de que algum pacote já implementa algo assim, mas você pode escrever uma função recursiva:
Qualquer um destes funcionaria:
Atualizar
Apresentação reorganizada.