LoginSignup
1
0

More than 3 years have passed since last update.

Kotlin でシーザー暗号をつくってみた

Last updated at Posted at 2019-10-22

需要は全くありませんがKotlinのクラスの練習でシーザー暗号を書いてみました
インスタンス生成のときにシフトする数を指定できます。
そしてクラス内の関数で暗号化と復号をするという感じです。
コードは我ながら汚いですがご愛嬌

caesar.kt
 class Caesar(var shiftnum : Int){
     init {
         print("this is $shiftnum shift Caesar cipher \n")
     }

     fun enc(s:String){
         var Sentence_enc = mutableListOf<Char>()
         print("Ciphertext is : ")
         for (i in 0..s.length-1) {
             Sentence_enc.add(s[i] - shiftnum)
             print(Sentence_enc[i])
         }
         Sentence_enc.clear()
         print("\n")
     }

     fun dec(s:String){
         var Sentence_dec = mutableListOf<Char>()
         print("Decryption is : ")
         for (i in 0..s.length-1) {
             Sentence_dec.add(s[i] + shiftnum)
             print(Sentence_dec[i])
         }
         Sentence_dec.clear()
         print("\n")
     }
 }

実行結果

jikkou.kt
val test = Caesar(13)
test.enc("hello")
test.dec("[X__b")
this is 13 shift Caesar cipher 
Ciphertext is : [X__b
Decryption is : hello

追記(同日)

@sdkei さんのご指摘でコードの冗長な部分を一部修正しました。
一応自分の知識にあるもので簡単に、、、ほんの少し、スッキリしたと思います。
以下に修正したコードを再掲載します。
@sdkei さん貴重なフィードバックありがとうございました。

caesar.kt
 class Caesar(val shiftnum : Int){
     val Sentence = mutableListOf<Char>()
     init {
         println("this is $shiftnum shift Caesar cipher")
     }
     fun enc(s:String){
         for (i in 0 until s.length) Sentence.add(s[i] - shiftnum)
         println("Ciphertext is : ${Sentence.joinToString("")}")
         Sentence.clear()
     }

     fun dec(s:String){
         for (i in 0 until s.length) Sentence.add(s[i] + shiftnum)
         println("Decryption is : ${Sentence.joinToString("")}")
         Sentence.clear()
     }
 }

fun main() {
    val test = Caesar(13)
    test.enc("hello")
    test.dec("[X__b")
}

実行結果

this is 13 shift Caesar cipher
Ciphertext is : [X__b
Decryption is : hello

まとめ

もっと綺麗にかけるようにがんばります
勉強不足!

1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0