Tarferi icon

OPT Solution

Tarferi | PRO | 12/27/19 04:56:15 PM UTC | 0 ⭐ | 818 👁️ | Never ⏰ | []
Python |

1.82 KB

|

None

|

0 👍

/

0 👎

with open ("input.txt", "r") as myfile:
    data = myfile.readlines()
data = map(lambda line: map(lambda num: int(num, 16), line.replace('\n', '').split("|")), data)
 
head = data[0]
data = data[1:]
 
def getSeq(data, firstDataIndex, sequenceIndex, expectedValue, nextExpectedValues):
    last = len(nextExpectedValues) == 0
    
    for index in range(firstDataIndex, len(data)):
        seq = data[index]
        if seq[sequenceIndex] == expectedValue:
            if last:
                yield [index]
            else:
                for nextItem in getSeq(data, index + 1, sequenceIndex, nextExpectedValues[0], nextExpectedValues[1:]):
                    yield [index] + nextItem
 
maxL = lambda mx, item: mx if mx > item else item
longestSequence = 0
for seq in data:
    longestSequence = maxL(reduce(maxL, seq, 0), longestSequence)
    
with open("output.txt","w") as file:
    for valueIndex in range(0, longestSequence):  # For each index
        
        # Collect sequences of such length
        seqs = []
        rev = []
        
        for i in range(len(data)):
            seq = data[i]
            if len(seq) > valueIndex:
                seqs.append(seq)
                rev.append(i)
                
        print("Seeking at index {0}/{1} in {2} total sequences".format(valueIndex + 1, longestSequence, len(seqs)))
        
        # Take every sequence as if it could be the first
        for sequenceIndex in range(len(seqs)):
            val = seqs[sequenceIndex][valueIndex]
            for sequences in getSeq(seqs, sequenceIndex, valueIndex, val + head[0], map(lambda var: var + val, head[1:])):
                result = ", ".join(map(lambda val: "sequences[{0}][{1}] == {2}".format(rev[val], valueIndex, seqs[val][valueIndex]), sequences))
                file.write(result);
 
pass

Comments