def saSolve(cText, numCol): message1 = "Starting Simulated Anneaing Run" print("{0:-^70}".format(message1)) message2 = "Number of columns: {0}".format(numCol) print("{0:-^70}".format(message2)) random.seed() key = genRandKey(numCol) pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) bestScore = newScore bestKey = key temp = 100.0 steps = 30000 stepsize = temp/steps step = 0 noMove = 0 while temp > 0: if step % (steps / 10) == 0: print("Current temperature: {0: .1f}".format(temp)) oldKey = key key = newKey(cText, key, temp, newScore) if oldKey == key: noMove += 1 temp -= stepsize step += 1 continue pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key temp -= stepsize step += 1 temp = 0 # Only necessary if increment doesn't divide demp print('Beginning hill climbing stage') hillCount = 0 while hillCount < 3000: key = newKey(cText, key, temp, newScore) pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key hillCount = 0 hillCount += 1 print("During regular stage, didn't move {0} times".format(noMove)) print(bestKey) print(bestScore) return pText
def saSolve(cText, numCol): message1 = "Starting Simulated Anneaing Run" print("{0:-^70}".format(message1)) message2 = "Number of columns: {0}".format(numCol) print("{0:-^70}".format(message2)) random.seed() key = genRandKey(numCol) pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) bestScore = newScore bestKey = key temp = 100.0 steps = 30000 stepsize = temp / steps step = 0 noMove = 0 while temp > 0: if step % (steps / 10) == 0: print("Current temperature: {0: .1f}".format(temp)) oldKey = key key = newKey(cText, key, temp, newScore) if oldKey == key: noMove += 1 temp -= stepsize step += 1 continue pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key temp -= stepsize step += 1 temp = 0 # Only necessary if increment doesn't divide demp print('Beginning hill climbing stage') hillCount = 0 while hillCount < 3000: key = newKey(cText, key, temp, newScore) pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key hillCount = 0 hillCount += 1 print("During regular stage, didn't move {0} times".format(noMove)) print(bestKey) print(bestScore) return pText
def newKey(cText, key, temp, oldScore): newKey = copy(key) randSwap(newKey) newPText = decPlayfair(cText, newKey) newScore = score(countNGrams(newPText, 4)) dif = newScore - oldScore if dif > 0: return newKey else: if shouldJump(dif, temp): return newKey else: return key
def newKey(cText, key, temp, oldScore): randintN = random.randrange(1, len(key) / 2) randint1 = random.randrange(0, len(key)) randint2 = random.randrange(0, len(key)) newKey = copy(key) shiftN([newKey], randintN, randint1, randint2) newPText = decColumn(cText, newKey) newScore = score(countNGrams(newPText, 4)) dif = newScore - oldScore if dif > 0: return newKey else: if shouldJump(dif, temp): return newKey else: return key
def newKey(cText, key, temp, oldScore): randintN = random.randrange(1, len(key)/2) randint1 = random.randrange(0, len(key)) randint2 = random.randrange(0, len(key)) newKey = copy(key) shiftN([newKey], randintN, randint1, randint2) newPText = decColumn(cText, newKey) newScore = score(countNGrams(newPText, 4)) dif = newScore - oldScore if dif > 0: return newKey else: if shouldJump(dif, temp): return newKey else: return key
from arrTools import sortThings, numMatches, modArray, swap, swapArr def getAllKeys(): nums = [] keys = [] for i in range(0, 26): nums.append(i) for a in nums: for b in nums: for c in nums: for d in nums: if inverse(a * d - b * c, False): mat = [[a, b], [c, d]] keys.append(mat) print("Finished getting all {0} keys".format(len(keys))) return keys keys = getAllKeys() cText = matchFrequencies.getString(sys.argv[1]) for i in range(0, len(keys)): if i % 1000 == 0: print(i) pText = decHill(cText, keys[i]) if (score(countNGrams(pText, 4))) > -6000: print(pText) print(keys[i])
step += 1 temp = 0 # Only necessary if increment doesn't divide demp print('Beginning hill climbing stage') hillCount = 0 while hillCount < 3000: key = newKey(cText, key, temp, newScore) pText = decPlayfair(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key hillCount = 0 hillCount += 1 print("During regular stage, didn't move {0} times".format(noMove)) print(bestKey) print(bestScore) return pText test = 'THEREISNOROYALROADTOLEARNINGNOSHORTCUTTOTHEACQUIREMENTOFANYARTYOUCANNOTMAKEAMANBYSTANDINGASHEEPONITSHINDLEGSBUTBYSTANDINGAFLOCKOFSHEEPINTHATPOSITIONYOUCANMAKEACROWDOFMENITSMATTERWASNOTNEWTOMEBUTWASPRESENTEDINANEWASPECTITSHOOKMEINMYHABITTHEHABITOFNINETENTHSOFTHEWORLDOFBELIEVINGTHATALLWASRIGHTABOUTMEBECAUSEIWASUSEDTOITTISMISFORTUNETHATAWAKENSINGENUITYORFORTITUDEORENDURANCEINHEARTSWHERETHESEQUALITIESHADNEVERCOMETOLIFEBUTFORTHECIRCUMSTANCEWHICHGAVETHEMABEINGMISFORTUNESONECANENDURETHEYCOMEFROMOUTSIDETHEYAREACCIDENTSBUTTOSUFFERFORONESOWNFAULTSAHTHEREISTHESTINGOFLIFEALLAMANCANBETRAYISHISCONSCIENCE' print(score(countDigramsPF(test))) cText = matchFrequencies.getString(sys.argv[1]) pText = cText while score(countNGrams(pText, 4)) < -3800: pText = saSolve(cText) print(pText) print(score(countNGrams(pText, 4))) print(pText)
temp = 0 # Only necessary if increment doesn't divide demp print('Beginning hill climbing stage') hillCount = 0 while hillCount < 3000: key = newKey(cText, key, temp, newScore) pText = decPlayfair(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key hillCount = 0 hillCount += 1 print("During regular stage, didn't move {0} times".format(noMove)) print(bestKey) print(bestScore) return pText test = 'THEREISNOROYALROADTOLEARNINGNOSHORTCUTTOTHEACQUIREMENTOFANYARTYOUCANNOTMAKEAMANBYSTANDINGASHEEPONITSHINDLEGSBUTBYSTANDINGAFLOCKOFSHEEPINTHATPOSITIONYOUCANMAKEACROWDOFMENITSMATTERWASNOTNEWTOMEBUTWASPRESENTEDINANEWASPECTITSHOOKMEINMYHABITTHEHABITOFNINETENTHSOFTHEWORLDOFBELIEVINGTHATALLWASRIGHTABOUTMEBECAUSEIWASUSEDTOITTISMISFORTUNETHATAWAKENSINGENUITYORFORTITUDEORENDURANCEINHEARTSWHERETHESEQUALITIESHADNEVERCOMETOLIFEBUTFORTHECIRCUMSTANCEWHICHGAVETHEMABEINGMISFORTUNESONECANENDURETHEYCOMEFROMOUTSIDETHEYAREACCIDENTSBUTTOSUFFERFORONESOWNFAULTSAHTHEREISTHESTINGOFLIFEALLAMANCANBETRAYISHISCONSCIENCE' print(score(countDigramsPF(test))) cText = matchFrequencies.getString(sys.argv[1]) pText = cText while score(countNGrams(pText, 4)) < -3800: pText = saSolve(cText) print(pText) print(score(countNGrams(pText, 4))) print(pText)
hillCount = 0 while hillCount < 3000: key = newKey(cText, key, temp, newScore) pText = decColumn(cText, key) newScore = score(countNGrams(pText, 4)) if newScore > bestScore: print(newScore) bestScore = newScore bestKey = key hillCount = 0 hillCount += 1 print("During regular stage, didn't move {0} times".format(noMove)) print(bestKey) print(bestScore) return pText cText = matchFrequencies.getString(sys.argv[1]) test = 'ITSINVAINTROTTORECALLTHEPASTUNLESSITWORKSSOMEINFLUENCEUPONTHEPRESENTWEMUSTMEETREVERSESBOLDLYANDNOTSUFFERTHEMTOFRIGHTENUSMYDEARWEMUSTLEARNTOACTTHEPLAYOUTWEMUSTLIVEMISFORTUNEDOWNTROTTHEMINDISITSOWNPLACEANDINITSELFCANMAKEAHEAVENOFHELLAHELLOFHEAVENWESHOULDREGRETOURMISTAKESANDLEARNFROMTHEMBUTNEVERCARRYTHEMFORWARDINTOTHEFUTUREWITHUSOHFRIENDJOHNITISASTRANGEWORLDASADWORLDAWORLDFULLOFMISERIESANDWOESANDTROUBLESANDYETWHENKINGLAUGHCOMEHEMAKETHEMALLDANCETOTHETUNEHEPLAYSCIENCEMYLADISMADEUPOFMISTAKESBUTTHEYAREMISTAKESWHICHITISUSEFULTOMAKEBECAUSETHEYLEADLITTLEBYLITTLETOTHETRUTHUNWELCOMETRUTHSARENOTPOPULAR' key = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19] testctext = encColumn(test, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) assert(test == decColumn(testctext, key)) answer = "" testpText = saSolve(cText, 11) if (score(countNGrams(testpText, 4))) > -6000: print(testpText) answer = testpText