Skip to content

Commit

Permalink
Added test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
harshildarji committed Aug 2, 2016
1 parent 525b945 commit f68690f
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 53 deletions.
67 changes: 51 additions & 16 deletions ciphers/brute-force_caesar_cipher.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,53 @@
message = input("Encrypted message: ")
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def decrypt(message):
"""
>>> decrypt('TMDETUX PMDVU')
Decryption using Key #0: TMDETUX PMDVU
Decryption using Key #1: SLCDSTW OLCUT
Decryption using Key #2: RKBCRSV NKBTS
Decryption using Key #3: QJABQRU MJASR
Decryption using Key #4: PIZAPQT LIZRQ
Decryption using Key #5: OHYZOPS KHYQP
Decryption using Key #6: NGXYNOR JGXPO
Decryption using Key #7: MFWXMNQ IFWON
Decryption using Key #8: LEVWLMP HEVNM
Decryption using Key #9: KDUVKLO GDUML
Decryption using Key #10: JCTUJKN FCTLK
Decryption using Key #11: IBSTIJM EBSKJ
Decryption using Key #12: HARSHIL DARJI
Decryption using Key #13: GZQRGHK CZQIH
Decryption using Key #14: FYPQFGJ BYPHG
Decryption using Key #15: EXOPEFI AXOGF
Decryption using Key #16: DWNODEH ZWNFE
Decryption using Key #17: CVMNCDG YVMED
Decryption using Key #18: BULMBCF XULDC
Decryption using Key #19: ATKLABE WTKCB
Decryption using Key #20: ZSJKZAD VSJBA
Decryption using Key #21: YRIJYZC URIAZ
Decryption using Key #22: XQHIXYB TQHZY
Decryption using Key #23: WPGHWXA SPGYX
Decryption using Key #24: VOFGVWZ ROFXW
Decryption using Key #25: UNEFUVY QNEWV
"""
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for key in range(len(LETTERS)):
translated = ""
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = num - key
if num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symbol
print("Decryption using Key #%s: %s" % (key, translated))

message = message.upper()
def main():
message = input("Encrypted message: ")
message = message.upper()
decrypt(message)

for key in range(len(LETTERS)):
translated = ""
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = num - key
if num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symbol

print("Decryption using Key #%s: %s" % (key, translated))
if __name__ == '__main__':
import doctest
doctest.testmod()
main()
85 changes: 49 additions & 36 deletions ciphers/caesar_cipher.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,51 @@
# The Caesar Cipher Algorithm

message = input("Enter message: ")
key = int(input("Key [1-26]: "))
mode = input("Encrypt or Decrypt [e/d]: ")

if mode.lower().startswith('e'):
mode = "encrypt"
elif mode.lower().startswith('d'):
mode = "decrypt"

LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

translated = ""

message = message.upper()

for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
if mode == "encrypt":
num = num + key
elif mode == "decrypt":
num = num - key

if num >= len(LETTERS):
num = num - len(LETTERS)
elif num < 0:
num = num + len(LETTERS)

translated = translated + LETTERS[num]
else:
translated = translated + symbol

if mode == "encrypt":
print("Encryption:", translated)
elif mode == "decrypt":
print("Decryption:", translated)
def main():
message = input("Enter message: ")
key = int(input("Key [1-26]: "))
mode = input("Encrypt or Decrypt [e/d]: ")

if mode.lower().startswith('e'):
mode = "encrypt"
elif mode.lower().startswith('d'):
mode = "decrypt"

translated = encdec(message, key, mode)
if mode == "encrypt":
print("Encryption:", translated)
elif mode == "decrypt":
print("Decryption:", translated)

def encdec(message, key, mode):
"""
>>> encdec('Harshil Darji', 12, 'encrypt')
'TMDETUX PMDVU'
>>> encdec('TMDETUX PMDVU', 12, 'decrypt')
'HARSHIL DARJI'
"""
message = message.upper()
translated = ""
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
if mode == "encrypt":
num = num + key
elif mode == "decrypt":
num = num - key

if num >= len(LETTERS):
num = num - len(LETTERS)
elif num < 0:
num = num + len(LETTERS)

translated = translated + LETTERS[num]
else:
translated = translated + symbol
return translated

if __name__ == '__main__':
import doctest
doctest.testmod()
main()
8 changes: 8 additions & 0 deletions ciphers/simple_substitution_cipher.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,17 @@ def checkValidKey(key):
sys.exit('Error in the key or symbol set.')

def encryptMessage(key, message):
"""
>>> encryptMessage('LFWOAYUISVKMNXPBDCRJTQEGHZ', 'Harshil Darji')
'Ilcrism Olcvs'
"""
return translateMessage(key, message, 'encrypt')

def decryptMessage(key, message):
"""
>>> decryptMessage('LFWOAYUISVKMNXPBDCRJTQEGHZ', 'Ilcrism Olcvs')
'Harshil Darji'
"""
return translateMessage(key, message, 'decrypt')

def translateMessage(key, message, mode):
Expand Down
10 changes: 10 additions & 0 deletions ciphers/transposition_cipher.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ def main():
print('Output:\n%s' %(text + '|'))

def encryptMessage(key, message):
"""
>>> encryptMessage(6, 'Harshil Darji')
'Hlia rDsahrij'
"""
cipherText = [''] * key
for col in range(key):
pointer = col
Expand All @@ -23,6 +27,10 @@ def encryptMessage(key, message):
return ''.join(cipherText)

def decryptMessage(key, message):
"""
>>> decryptMessage(6, 'Hlia rDsahrij')
'Harshil Darji'
"""
numCols = math.ceil(len(message) / key)
numRows = key
numShadedBoxes = (numCols * numRows) - len(message)
Expand All @@ -40,4 +48,6 @@ def decryptMessage(key, message):
return "".join(plainText)

if __name__ == '__main__':
import doctest
doctest.testmod()
main()
16 changes: 15 additions & 1 deletion detect english/detecting_english_programmatically.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import os

UPPERLETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
LETTERS_AND_SPACE = UPPERLETTERS + UPPERLETTERS.lower() + ' \t\n'

def loadDictionary():
dictionaryFile = open('Dictionary.txt')
path = os.path.split(os.path.realpath(__file__))
dictionaryFile = open(path[0] + '\Dictionary.txt')
englishWords = {}
for word in dictionaryFile.read().split('\n'):
englishWords[word] = None
Expand Down Expand Up @@ -34,8 +37,19 @@ def removeNonLetters(message):
return ''.join(lettersOnly)

def isEnglish(message, wordPercentage = 20, letterPercentage = 85):
"""
>>> isEnglish('Hello World')
True
>>> isEnglish('llold HorWd')
False
"""
wordsMatch = getEnglishCount(message) * 100 >= wordPercentage
numLetters = len(removeNonLetters(message))
messageLettersPercentage = (float(numLetters) / len(message)) * 100
lettersMatch = messageLettersPercentage >= letterPercentage
return wordsMatch and lettersMatch


import doctest
doctest.testmod()

0 comments on commit f68690f

Please sign in to comment.