This one was pretty straight forward. The hardest part was calculating fibbonacci numbers quickly, but luckily, there's a formula for that! It's called [Binet's formula](https://artofproblemsolving.com/wiki/index.php/Binet%27s_Formula). With this, we can create a simple script that reads from the terminal, does the shift, and sends it back to the terminal. The program eventually crashes once it recieves an invalid input from receiving the flag, but hey, at least it gives you the flag ¯\\\_(ツ)_/¯
```import structimport socketimport mathfrom caesarcipher import CaesarCipher
s = socket.socket()s.connect(("misc.2020.chall.actf.co", 20300))
def Fib(n): #binet's formula	return int((1/math.sqrt(5))*((((1+math.sqrt(5))/2)**n) - (((1-math.sqrt(5))/2)**n)))
while True:	r = s.recv(1024).decode().strip()	print(r)	string = r[r.find("Shift") +6: r.find("by")-1 ].strip()	shift = Fib(int(r[r.find("n=") +2:r.find("\\n:")].rstrip()))
	result = CaesarCipher(string, offset=shift)	s.send(result.encoded.encode() + b"\n")```