Day 13
This commit is contained in:
parent
73b50a2727
commit
9236891cf1
@ -26,7 +26,7 @@ a = y * c
|
||||
a += abs(a // p) * p
|
||||
solution = hex(a).replace("-", "")[2:]
|
||||
|
||||
while len(solution) != 2*29:
|
||||
while True:
|
||||
a += p
|
||||
solution = hex(a).replace("-", "")[2:]
|
||||
if not test_solution(a):
|
||||
|
117
Day 13/decode.py
Normal file
117
Day 13/decode.py
Normal file
@ -0,0 +1,117 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
import time
|
||||
import socket
|
||||
import _thread
|
||||
import errno
|
||||
import select
|
||||
|
||||
|
||||
HOST = "whale.hacking-lab.com"
|
||||
PORT = 4242
|
||||
|
||||
def getWallPos(text):
|
||||
if len(text) > 22:
|
||||
pos = text[21:]
|
||||
index = pos.find(" ")
|
||||
return index + 5 if index > 0 else -1
|
||||
|
||||
return -1
|
||||
|
||||
def getCursorPos(text):
|
||||
pos = text.replace(" ", "")[27:29]
|
||||
if len(pos) > 1 and not pos[1].isdigit():
|
||||
pos = pos[0]
|
||||
if pos.isdigit():
|
||||
return int(pos)
|
||||
return -1
|
||||
|
||||
wallPositions = [59, 34, 61, 42, 21, 20, 31, 38, 55, 40, 37, 50, 37, 42, 35, 52, 49, 40, 29, 54, 51, 56, 37, 30, 55, 34, 31, 20]
|
||||
def play():
|
||||
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
server_address = (HOST, PORT)
|
||||
sock.connect(server_address)
|
||||
sock.settimeout(2)
|
||||
|
||||
vel = 0
|
||||
cursorPos = -1
|
||||
wallPos = -1
|
||||
wallAt = -1
|
||||
key = ""
|
||||
wallNum = -1
|
||||
|
||||
num = 0
|
||||
while True:
|
||||
data = sock.recv(128)
|
||||
if len(data) > 0:
|
||||
num += 1
|
||||
if data[0] != 0xFF:
|
||||
text = data.decode("utf-8").strip()
|
||||
index = text.find("#")
|
||||
if index >= 0 and index + 1 < len(text):
|
||||
char = text[index+1]
|
||||
if char.isalnum() or char == "-":
|
||||
key += char
|
||||
|
||||
sys.stdout.write(text)
|
||||
sys.stdout.flush()
|
||||
|
||||
newCurPos = getCursorPos(text)
|
||||
newWallPos = getWallPos(text)
|
||||
|
||||
if newCurPos != -1:
|
||||
vel = newCurPos - cursorPos
|
||||
cursorPos = newCurPos
|
||||
|
||||
if newWallPos != -1:
|
||||
wallPos = newWallPos
|
||||
wallAt = num
|
||||
wallNum += 1
|
||||
|
||||
if wallNum >= len(wallPositions):
|
||||
wallPositions.append(wallPos)
|
||||
|
||||
if wallAt > -1 and num - wallAt >= 20:
|
||||
wallPos = -1
|
||||
wallAt = -1
|
||||
|
||||
if cursorPos != -1:
|
||||
|
||||
curWallKnown = wallPos != -1
|
||||
nextWallKnown = wallPos == -1 and len(wallPositions) > wallNum + 1
|
||||
|
||||
if nextWallKnown:
|
||||
nextWallPos = wallPositions[wallNum + 1]
|
||||
else:
|
||||
nextWallPos = wallPos
|
||||
|
||||
# We know the next wall:
|
||||
if nextWallPos != -1:
|
||||
leftBound = nextWallPos - 5
|
||||
rightBound = nextWallPos + 5
|
||||
|
||||
if cursorPos >= leftBound and cursorPos <= rightBound and vel < 0:
|
||||
sock.send(" ".encode("utf-8"))
|
||||
elif cursorPos < leftBound:
|
||||
sock.send(" ".encode("utf-8"))
|
||||
|
||||
# stay in the mid if we don't know the next wall
|
||||
elif (not curWallKnown and not nextWallKnown and cursorPos < 50):
|
||||
sock.send(" ".encode("utf-8"))
|
||||
|
||||
if num == 1:
|
||||
sock.send(bytes.fromhex("fffd03fffb22fffa220301000003620304020f05000007621c08020409421a0a027f0b02150c02170d02120e02160f0211100213110000120000fff0fffd01"))
|
||||
elif num == 2:
|
||||
sock.send(bytes.fromhex("1b5b32343b3152"))
|
||||
else:
|
||||
return key
|
||||
|
||||
# HV18-9hYf-LSY1-hWdZ-496n-Mbda
|
||||
key = ""
|
||||
while len(key) < 29:
|
||||
print("Known Walls:", wallPositions, "Key:", key)
|
||||
time.sleep(5)
|
||||
key = play()
|
||||
print(key)
|
Loading…
Reference in New Issue
Block a user