gpt4 book ai didi

kotlin - Kotlin-如何用可变对对的元素替换字符串?

转载 作者:行者123 更新时间:2023-12-02 13:06:56 27 4
gpt4 key购买 nike

我正在研究Monoalphabetic密码,我必须通过用任何其他字母替换消息来加密消息。

fun encrypt(message:String){
//Assume message as ABCD
var encrypt:String = ""

val alphabets = ('A'..'Z').toMutableList() //['A','B','C','D',....]

var shuffAlp = alphabets.shuffled() // Assume shuffled op as ['D','L','N','J',....]

var pair = alphabets.zip(shuffAlp)
println(pair) // Assume pair as [(A, D), (B, L), (C, N), (D, J), ...] acc to shuffled op

for(m in message){
for (p in pair){
if(p.first == m)
encrypt+=p.second
}
}
println(encrypt) //DLNJ according to given pair
}
如您所见,我使用了两个for循环来生成我的加密字符串。我想知道是否有等效的Lambda函数或扩展会丢弃两个循环?

最佳答案

压缩后,请使用toMap,以便您可以轻松查找加密值而无需循环。
您正在使用var,其中变量可以是常量val,而MutableList是不必要的中间步骤。

// Assumes message contains only capital letters
fun encrypt (message: String): String {
val alphabet = 'A'..'Z'
val cipher = alphabet.zip(alphabet.shuffled()).toMap()
return message.map { cipher[it] }.joinToString("")
}
但是,如果您希望以后可以解密一条消息,则需要单独的功能,以便您可以存储密码并重新使用它。像这样:
fun createCipher(): Map<Char, Char> {
val alphabet = 'A'..'Z'
return alphabet.zip(alphabet.shuffled()).toMap()
}

fun encrypt(message: String, cipher: Map<Char, Char>): String {
return message.map { cipher[it] }.joinToString("")
}

fun decrypt(encrpytedMessage: String, cipher: Map<Char, Char>): String {
val invertedCipher = cipher.entries.associate { it.value to it.key }
return encrpytedMessage.map { invertedCipher [it] }.joinToString("")
}

关于kotlin - Kotlin-如何用可变对对的元素替换字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63327741/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com