aboutsummaryrefslogtreecommitdiff
path: root/challenge-025/paulo-custodio/python/ch-2.py
blob: 6a39ecf9fc4eb062952725f8e4cd139395e48c76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/python3

# Challenge 025
#
# Task #2
# Create script to implement Chaocipher. Please checkout wiki page for more
# information.

import sys
import re

left  = "HXUCZVAMDSLKPEFJRIGTWOBNYQ"
right = "PTLNBQDEOYSFAVZKGJRIHWXUMC"

def permute_alphabets(pos):
    global left, right

    # permute left alphabet
    left = left[pos:]+left[:pos]
    left = left[0]+left[2:14]+left[1]+left[14:]

    # permute right alphabet
    right = right[pos:]+right[:pos]
    right = right[1:]+right[0]
    right = right[:2]+right[3:14]+right[2]+right[14:]

def find_pos(letter, alphabet):
    found = re.search(letter, alphabet)
    return found.start(0)

def encode(text):
    global left, right

    encoded = ""
    for letter in text:
        pos = find_pos(letter, right)
        code = left[pos]
        encoded += code

        permute_alphabets(pos)
    return encoded

def decode(encoded):
    global left, right

    text = ""
    for code in encoded:
        pos = find_pos(code, left)
        letter = right[pos]
        text += letter

        permute_alphabets(pos)
    return text

if sys.argv[1]=="encode":
    print(encode(sys.argv[2]))
elif sys.argv[1]=="decode":
    print(decode(sys.argv[2]))
else:
    print("Usage: ch-2.py encode|decode text")