The question was:
Question: This is semi-real. 🙁
140.197.217.85:10435

When you would connect using netcat you would see a 9 numbers and a user PIN. This would repeat thrice and then you would have to choose the right pin for the fourth pair 6×6 matrix of numbers. My first reaction was either the PINS were constant or they were following a pattern. So I wrote up this quick python script to solve this puzzle which helped me understand the problem also.

```#!/usr/bin/python

lookupdict = []

def process_array_pin(fs,s):
i = 6
temp = ''
pin = ''
while i > 0:
#print line
#re.match(".{11}(.).{12}(.).{12}(.)", line).group(1)
test = re.split(' ',line)
#print test,' ',test,' ',test,' ',test,' ',test,' ',test
i = i - 1
try:
temp += test+test+test+test+test+test
except IndexError:
pass
#i = 15
#while i > 0:
#	i = i - 1
#s.send('2\n')
#i = 15
#while i > 0:
#	i = i - 1
try:
pin = re.match("..........User entered: (.*)", line).group(1)
except:
pass
#print 'Line: '+line
#print 'Pin is : '+pin
strpin = re.sub(' ','',pin)
#strpin = re.split(' ',pin)
#lookupdict[temp] = strpin
print 'Pin for : ' + temp+' is '+strpin+'\n'
return temp,strpin
def play():
global fs, s
s = socket.create_connection(('140.197.217.85', 10435))
fs = s.makefile()
s.send('5fd78efc6620f6\n')
numTimes = 0
while numTimes < 5:
j = 3
while j > 0:
test = process_array_pin(fs,s)
lookupdict.append(test)
lookupdict.append(test)
j = j - 1
if j > 0:
numlines = 3
while numlines > 0:
numlines = numlines - 1
pindigits = list(lookupdict)
#print pindigits
pinpos = 0
for num in pindigits:
i = 0
start = 0
end = len(lookupdict)
while i < lookupdict.count(num):
indofinterest = lookupdict.find(num,start,end)
#print 'index of interest '+str(indofinterest)
if lookupdict[indofinterest] == lookupdict[pinpos]:
if lookupdict[indofinterest] == lookupdict[pinpos]:
break
i = i + 1
start = indofinterest+1
pinpos = pinpos + 1
# Get question
i = 6
temp1 = ""
while i > 0:
#print line
#re.match(".{11}(.).{12}(.).{12}(.)", line).group(1)
test = re.split(' ',line)
#print test,' ',test,' ',test,' ',test,' ',test,' ',test
temp1 += test+test+test+test+test+test
i = i - 1
#fs.flush()
print "Question : " +temp1+'\n'
count = 0
#print temp1[i],
count = count + 1
if count < 4:
else:
print output
if output.find('Sun') > -1:
else:
a = 10
while a > 0:
a = a - 1
#print 'Inside else\n'
#if output.find('NOVA') > -1:
#	print 'NOVAFOUND!!!!!\n'
s.send('2\n')
print 'Sent last\n'
a = 100
while a > 0:
s.send('%d%n\n')
a = a - 1
break
del lookupdict[:]
del pindigits[:]
numTimes += 1

s.close()
#for i in range(2000):
play()```

The above file reads the numbers, filters out the formatting that adds color to the digits and picks out the indices that would be chosen as the key.

So to solve this, each pattern of digits had fixed matrix positions that would be chosen as the pin. Once you successfully solve the puzzle four time you are presented with an ATM screen as follows:

``` ***NOVABANK ATM menu***

Balance: \$9238740982570237012935.32

1) withdraw
2) deposit
3) transfer
4) exit

<disconnected>```

The real part is the balance i.e., 9238740982570237012935.32 is the answer. It took me various attempts to solve this one because the answer was for some reason not being accepted by the scoreboard until my teammate submitted it at which time it worked.

This was a really cool problem. Thanks DDTEK.