Rating:
# ugractf-battleship
Задание:
Сайт:
Если мы начнем игру и выстрелим, то увидим:
При выстреле запрос выглядит так:
(Я удалил куки, т.к они большие и бесполезные, не обращайте внимания)
Пришло в голову несколько раз быстро выстрелить. Заметил, что при выстрелах в течение одной секунды в одну и ту же точку дистанция до корабля не меняется
Следовательно, корабль меняет свою положение раз в секунду (строго говоря, одно из другого не следуюет, но предположить стоило)
Тогда сделаем так:
1)выстрелим 2 раза в 2 разных места
2)проведем две окружности с центрами в этих точках и радиусами, равными дистанции, которую мы из них получаем, найдем их пересечения
3)выстрелим в получившиеся две точки, одна из них будет кораблем
4)сделать все это в течение секунды
5)????
6)PROFIT
```python
import requests as rq
import math
def get_intercetions(x0, y0, r0, x1, y1, r1):
d=math.sqrt((x1-x0)**2 + (y1-y0)**2)
if d > r0 + r1 :
return None
if d < abs(r0-r1):
return None
if d == 0 and r0 == r1:
return None
else:
#Получаем точки
a=(r0**2-r1**2+d**2)/(2*d)
h=math.sqrt(r0**2-a**2)
x2=x0+a*(x1-x0)/d
y2=y0+a*(y1-y0)/d
x3=x2+h*(y1-y0)/d
y3=y2-h*(x1-x0)/d
x4=x2-h*(y1-y0)/d
y4=y2+h*(x1-x0)/d
#Мне было проще выстрелить по точкам тут
d = rq.post("https://battleship.q.2021.ugractf.ru/b6afef3a9019c9a3/fire", data={'x': str(x3), 'y': str(y3)},
cookies=r.cookies)
print(d.text)
d = rq.post("https://battleship.q.2021.ugractf.ru/b6afef3a9019c9a3/fire", data={'x': str(x4), 'y': str(y4)},
cookies=r.cookies)
print(d.text)
return (x3, y3, x4, y4)
#Делаем старт игры
r = rq.post("https://battleship.q.2021.ugractf.ru/b6afef3a9019c9a3/reset")
print(r.text)
#Стреляем два раза
r = rq.post("https://battleship.q.2021.ugractf.ru/b6afef3a9019c9a3/fire", data={'x': 0, 'y': 0}, cookies=r.cookies)
print(r.text)
jsonResponse = r.json() # Берем ответ нам
r1 = float(jsonResponse["distance"]) # Переводим во float для радиуса
r = rq.post("https://battleship.q.2021.ugractf.ru/b6afef3a9019c9a3/fire", data={'x': 400, 'y': 0}, cookies=r.cookies)
jsonResponse = r.json()
r2 = float(jsonResponse["distance"])
print(r.text)
print(get_intercetions(0, 0, r1, 400, 0, r2))
```
Получаем ответ:
Флаг: ugra_gotta_hit_fast_...