Subversion Repositories Code-Repo

Rev

Blame | Last modification | View Log | RSS feed

def perms_insert(perms, char_prev, char_next):
        prev_exist = False
        prev_index = 0
        next_exist = False
        next_index = 0

        # First check if either characters are already in a permutation
        for perm in perms:
                # Check if the prev char exists in the permutation set
                if perm.count(char_prev) != 0:
                        prev_exist = True
                        prev_index = perms.index(perm)
                # Check if the next char exists in the permutation set
                if perm.count(char_next) != 0:
                        next_exist = True
                        next_index = perms.index(perm)
                # Break out of the loop once both are found
                if prev_exist and next_exist:
                        break

        # Neither exists
        if not prev_exist and not next_exist:
                # If both chars are the same, insert the character into the permutation set by itself
                if char_prev == char_next:
                        perms.append(char_next)
                # Otherwise append the two characters together and insert into the permutation set
                else:
                        perms.append(char_prev+char_next)

        # Only the prev char exists so append the next char to the end of the permutation with the prev char
        if prev_exist and not next_exist:
                new_perm = perms[prev_index] + char_next
                perms.remove(perms[prev_index])
                perms.append(new_perm)

        # Only the next char exists so append the prev char to the start of the permutation with the next char
        if not prev_exist and next_exist:
                new_perm = char_prev + perms[next_index]
                perms.remove(perms[next_index])
                perms.append(new_perm)

        # Both chars exist
        if prev_exist and next_exist:
                # Check if they are part of the same permutation, combine permutations if they are not
                if prev_index != next_index:
                        str1 = perms[prev_index]
                        str2 = perms[next_index]
                        new_perm = str1 + str2
                        perms.remove(str1)
                        perms.remove(str2)
                        perms.append(new_perm)

        return perms

if __name__ == '__main__':
        input_text = 'GAWGST OTJPNA VBPLKM YPSYVU CZSXGU HTNINR PCLSOI WMGREH \
                                YPSYVU CZSXGU HIZIMP PCLSOI WMGREH YPSYVU CZSXGU IOQHFZ \
                                QNHDPB XPRCVD YAMYSL CQOXQQ JJHBJB QNHDPB XPRCVD YAMYSL \
                                DXYMTS KPVOVY RJXNJK XPRCVD ZSTKHE DXYMTS LHXQRK RJXNJK \
                                XPRCVD ZSTKHE DUOMAQ MVHFYB SGCADV XLICWW ZGGKDH DECMIV \
                                NTUZNJ SGCADV YEDYIC AYKTCN EVIUYW NTUZNJ TDJWZA YEDYIC \
                                BOOVFQ EVIUYW NDBZZO TDJWZA YEFYIC BOOVFQ FFEEXG OQMPQL \
                                TRAWLF YEDYIC BWFVBX FKLEUI OQMPQL UHAJRF YEDYIC BWFVBX \
                                FYPECM'
        # Split the input into an array of 6 letter strings
        input_split = input_text.split();

        # Iterate and process through D*A, E*B, F*C
        for offset in range(3):
                perms = []
                # Go through each letter set and insert into permutation list
                for entry in input_split:
                        perms = perms_insert(perms, entry[offset], entry[offset+3])
                print offset, offset+3, perms