Commit before some experiments with smart argument changing
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
import subprocess
|
||||
from time import sleep
|
||||
|
||||
process = subprocess.Popen(['java', './Main.java'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||
|
||||
info = []
|
||||
for i in range(9):
|
||||
info.append([""] * 9)
|
||||
|
||||
def check(x, y):
|
||||
a = 0
|
||||
res = []
|
||||
if info[x][y] != "":
|
||||
a += 1
|
||||
res.append(info[x][y])
|
||||
for dx in range(-1, 2):
|
||||
for dy in range(-1, 2):
|
||||
if (0 <= x+dx <= 8 and 0 <= y+dy <= 8 and (dy != 0 or dx != 0) and info[x+dx][y+dy] == 'A'):
|
||||
a += 1
|
||||
res.append("P")
|
||||
return [a, res]
|
||||
if (0 <= x-1 <= 8 and info[x-1][y] == 'S' or 0 <= x+1 <= 8 and info[x+1][y] == 'S' or 0 <= y-1 <= 8 and info[x][y-1] == 'S' or 0 <= y+1 <= 8 and info[x][y+1] == 'S'):
|
||||
a += 1
|
||||
res.append("P")
|
||||
return [a, res]
|
||||
|
||||
return [a, res]
|
||||
|
||||
|
||||
def show(neo_x, neo_y):
|
||||
with open('close.txt', encoding='utf-8', mode='w') as f1:
|
||||
a = list(map)
|
||||
a[map.find('𖨆')] = ' '
|
||||
a[map.find(str(neo_x) + " |") + 4 + neo_y * 4] = '𖨆'
|
||||
f1.write(''.join(a))
|
||||
|
||||
map = ''
|
||||
keymaker_x = 0
|
||||
keymaker_y = 0
|
||||
key_x = 99
|
||||
key_y = 99
|
||||
with open('field.txt', encoding='utf-8') as initial:
|
||||
i = 1
|
||||
for line in initial:
|
||||
map += line
|
||||
if (3 <= i and i <= 19 and i % 2 == 1):
|
||||
line = line.split('|')[1:-1]
|
||||
for j in range(len(line)):
|
||||
if (line[j] == ' ■ '):
|
||||
info[i // 2 - 1][j] = 'A'
|
||||
elif (line[j] == ' □ '):
|
||||
info[i // 2 - 1][j] = 'S'
|
||||
elif (line[j] == ' ⚷ '):
|
||||
info[i // 2 - 1][j] = 'B'
|
||||
key_x = i // 2 - 1
|
||||
key_y = j
|
||||
elif (line[j] == ' K '):
|
||||
info[i // 2 - 1][j] = 'K'
|
||||
keymaker_x = i // 2 - 1
|
||||
keymaker_y = j
|
||||
i += 1
|
||||
|
||||
# show(0, 0)
|
||||
mode = 1
|
||||
process.stdin.write((str(mode) + "\n" +
|
||||
str(keymaker_x) + " " +
|
||||
str(keymaker_y) + "\n"))
|
||||
process.stdin.flush()
|
||||
print(str(mode) + "\n" + str(keymaker_x) + " " + str(keymaker_y))
|
||||
|
||||
now_x = 0
|
||||
now_y = 0
|
||||
|
||||
while True:
|
||||
move = process.stdout.readline().replace('\n', '')
|
||||
print(move)
|
||||
if 'e' in move:
|
||||
break
|
||||
|
||||
move = move.split()
|
||||
temp_x = int(move[1])
|
||||
temp_y = int(move[2])
|
||||
# show(temp_x, temp_y)
|
||||
if not(temp_x + 1 == now_x and temp_y == now_y or temp_x - 1 == now_x and temp_y == now_y or temp_x == now_x and temp_y + 1 == now_y or temp_x == now_x and temp_y - 1 == now_y or temp_x == now_x and temp_y == now_y):
|
||||
print("Error: Teleport")
|
||||
break
|
||||
now_x = int(move[1])
|
||||
now_y = int(move[2])
|
||||
# sleep(0.5)
|
||||
|
||||
res = ''
|
||||
num = 0
|
||||
|
||||
if mode == 1:
|
||||
left = -1
|
||||
right = 2
|
||||
else:
|
||||
left = -2
|
||||
right = 3
|
||||
|
||||
for dx in range(left, right):
|
||||
for dy in range(left, right):
|
||||
new_x = now_x + dx
|
||||
new_y = now_y + dy
|
||||
if 0 <= new_x <= 8 and 0 <= new_y <= 8:
|
||||
a = check(new_x, new_y)
|
||||
num += a[0]
|
||||
for elem in a[1]:
|
||||
res += str(new_x) + " " + str(new_y) + " " + elem + "\n"
|
||||
|
||||
# Кодируем результат перед записью
|
||||
send = str(num) + '\n' + res
|
||||
process.stdin.write(send)
|
||||
print(send[:-1])
|
||||
process.stdin.flush()
|
||||
Reference in New Issue
Block a user