Advertisement
DoubleA_W

Untitled

Oct 30th, 2018
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.64 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "os"
  7.     "strings"
  8. )
  9.  
  10. var str strings.Builder
  11.  
  12. func decode(encoded string, charNums []int) string {
  13.     i, j, newChar := 0, 0, 0
  14.     for {
  15.         if encoded[i] == ' ' {
  16.         //  fmt.Println("was a space")
  17.             str.WriteString(" ")
  18.             i += 1
  19.             continue
  20.         }
  21.         newChar = int(encoded[i]) - charNums[j]
  22.         if newChar < 97 {
  23.             newChar = newChar + 26
  24.         }
  25.         str.WriteString(string(newChar))
  26.         if i == len(encoded)-1 {
  27.             break
  28.         }
  29.         if j == len(charNums)-1 {
  30.             j = 0
  31.             i += 1
  32.             continue
  33.         }
  34.     //  fmt.Println(i, j)
  35.         i += 1
  36.         j += 1
  37.     }
  38.     return str.String()
  39. }
  40.  
  41. func codeNumbers(code string, m map[string]int) []int {
  42.     charNums := []int{}
  43.  
  44.     for _, v := range code {
  45.     //  fmt.Println(v)
  46.         if v == ' '{
  47.             continue
  48.         }
  49.         if _, ok := m[string(v)]; ok {
  50.  
  51.             charNums = append(charNums, m[string(v)])
  52.         } else {
  53.             panic("Only alphabetical characters allowed!")
  54.         }
  55.     }
  56. //  fmt.Println(charNums)
  57.     return charNums
  58. }
  59.  
  60. func messageNumbers(message string, m map[string]int) []int {
  61.     charNums := []int{}
  62.  
  63.     for _, v := range message {
  64.         fmt.Println(v)
  65.         if _, ok := m[string(v)]; ok {
  66.             charNums = append(charNums, m[string(v)])
  67.         } else {
  68.             panic("Only alphabetical characters allowed!")
  69.         }
  70.     }
  71. //  fmt.Println(charNums)
  72.     return charNums
  73. }
  74.  
  75. func encode(message string, charNums []int) string {
  76.     i, j, newChar := 0, 0, 0
  77.     for {
  78.         if message[i] == ' ' {
  79.         //  fmt.Println("was a space")
  80.             str.WriteString(" ")
  81.             i += 1
  82.             continue
  83.         }
  84.         newChar = int(message[i]) + charNums[j]
  85.         if newChar > 122 {
  86.             newChar = newChar - 26
  87.         }
  88.         str.WriteString(string(newChar))
  89.         if i == len(message)-1 {
  90.             break
  91.         }
  92.         if j == len(charNums)-1 {
  93.             j = 0
  94.             i += 1
  95.             continue
  96.         }
  97.     //  fmt.Println(i, j)
  98.         i += 1
  99.         j += 1
  100.     }
  101.     return str.String()
  102. }
  103.  
  104. func main() {
  105.     reader := bufio.NewReader(os.Stdin)
  106.  
  107.    
  108.  
  109.     letters := map[string]int{
  110.         "a": 0,
  111.         "b": 1,
  112.         "c": 2,
  113.         "d": 3,
  114.         "e": 4,
  115.         "f": 5,
  116.         "g": 6,
  117.         "h": 7,
  118.         "i": 8,
  119.         "j": 9,
  120.         "k": 10,
  121.         "l": 11,
  122.         "m": 12,
  123.         "n": 13,
  124.         "o": 14,
  125.         "p": 15,
  126.         "q": 16,
  127.         "r": 17,
  128.         "s": 18,
  129.         "t": 19,
  130.         "u": 20,
  131.         "v": 21,
  132.         "w": 22,
  133.         "x": 23,
  134.         "y": 24,
  135.         "z": 25,
  136.     }
  137.  
  138.    
  139.     for{
  140.  
  141.         fmt.Print("Do you want to encode or decode? ")
  142.         response, _ := reader.ReadString('\n')
  143.         response = strings.ToLower(response[:len(response)-2])
  144.         if response == "encode"{
  145.             fmt.Print("Enter message, Alphabetical characters only: ")
  146.             message, _ := reader.ReadString('\n')
  147.  
  148.             message = strings.ToLower(message[:len(message)-2])
  149.  
  150.             fmt.Print("Enter code, Alphabetical characters only: ")
  151.             code, _ := reader.ReadString('\n')
  152.  
  153.             code = strings.ToLower(code[:len(code)-2])
  154.             codeNums := codeNumbers(code, letters)
  155.             fmt.Println("Here is your message encoded:", encode(message, codeNums))
  156.             break
  157.  
  158.         }else if response == "decode"{
  159.             fmt.Print("Enter encoded message, Alphabetical characters only: ")
  160.             encMessage, _ := reader.ReadString('\n')
  161.  
  162.             encMessage = strings.ToLower(encMessage[:len(encMessage)-2])
  163.  
  164.             fmt.Print("Enter code, Alphabetical characters only: ")
  165.             code, _ := reader.ReadString('\n')
  166.  
  167.             code = strings.ToLower(code[:len(code)-2])
  168.             codeNums := codeNumbers(code, letters)
  169.             fmt.Println("Here is your encoded message decoded: ", decode(encMessage, codeNums))
  170.             break
  171.  
  172.         }else{
  173.             fmt.Println("Enter either \"encode\" or \"decode\"")
  174.             break
  175.         }
  176.     }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement