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
Example #2
0
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):
    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
Example #5
0
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