提出 #27966757


ソースコード 拡げる

import sys
import fileinput

lines = []
for l in sys.stdin:
    lines.append(l.rstrip('\r\n'))



class Mass:
    def __init__(self, i, j, wall_top = False, wall_right = False, wall_bottom = False, wall_left = False):
        self.i = i
        self.j = j
        self.wall_top = wall_top
        self.wall_right = wall_right
        self.wall_bottom = wall_bottom
        self.wall_left = wall_left
        self.is_cleared = False

    def clear(self):
        self.is_cleared = True


def init_floor_info(N, h, v, floor):
    for i in range(N):
        for j in range(N):
            mass = floor[i][j]
            if j < N-1:
                right_mass = floor[i][j+1]
            if i < N-1:
                bottom_mass = floor[i+1][j]
            # 外壁
            if i == 0:
                mass.wall_top = True
            if i == N-1:
                mass.wall_bottom = True
            if j == 0:
                mass.wall_left = True
            if i == N-1:
                mass.wall_right = True

            # その他の壁
            if j < N-1 and h[i][j] == "1":
                mass.wall_right = True
                right_mass.wall_left =True
            if i < N-1 and v[i][j] == "1":
                mass.wall_bottom = True
                bottom_mass.wall_top = True


class Robot:
    def __init__(self, i, j):
        self.i = i
        self.j = j
        # 0, 1, 2, 3 で上右下左
        self.direction = 0
        self.root = []
        self.count_turn = 0
        # self.clearned = []

    def turn_reft(self):
        d = self.direction
        if d == 0:
            d = 3
        else:
            d -= 1
        self.count_turn +=1
        self.root.append("L")

    def turn_reft_if_wall(self):
        d = self.direction
        if d == 0:
            d = 3
        else:
            d -= 1
        self.count_turn +=1
        self.root.append("l")

    def turn_right(self):
        d = self.direction
        if d == 3:
            d = 0
        else:
            d += 1
        self.count_turn +=1
        self.root.append("R")

    def turn_right_if_wall(self):
        d = self.direction
        if d == 3:
            d = 0
        else:
            d += 1
        self.count_turn +=1
        self.root.append("r")

    def go_forward(self):
        self.root.append("F")

    def move_top(self):
        self.j -= 1
        self.go_forward()

    def move_right(self):
        self.i += 1
        self.go_forward()

    def move_bottom(self):
        self.j += 1
        self.go_forward()

    def move_left(self):
        self.i -= 1
        self.go_forward()

# def FunctionName(args):
    

def main(lines):
    N = 20
    h = lines[1:N+1]
    v = lines[N+1:]
    s_i, s_j = int(lines[0].split()[0]), int(lines[0].split()[1])
    floor = [[Mass(i, j) for j in range(N)] for i in range(N)]
    init_floor_info(N, h, v, floor)

    rob = Robot(s_i, s_j)
    while i < 5000:
      	i += 1
        curr_mass = floor(rob.i, rob.j)
        direction = rob.direction
        constraint = True
        if rob.count_turn == 4:
            rob.count_turn = 0
            constraint = False
        if constraint:
            if direction == 0:
                top_mass = floor[rob.i-1][rob.j]
                if not curr_mass.wall_top and not top_mass.is_cleared:
                    rob.move_top()
                    top_mass.clear()
                else:
                    rob.turn_right_if_wall()
                continue

            if direction == 1:
                right_mass = floor[rob.i][rob.j+1]
                if not curr_mass.wall_right and not right_mass.is_cleared:
                    rob.move_right()
                else:
                    rob.turn_right_if_wall()
                continue

            if direction == 2:
                bottom_mass = floor[rob.i+1][rob.j]
                if not curr_mass.wall_bottom and not bottom_mass.is_cleared:
                    rob.move_bottom()
                else:
                    rob.turn_right_if_wall()
                continue

            if direction == 3:
                left_mass = floor[rob.i][rob.j-1]
                if not curr_mass.wall_left and not left_mass.is_cleared:
                    rob.move_left()
                else:
                    rob.turn_right_if_wall()
                continue
        else:
            if direction == 0:
                top_mass = floor[rob.i-1][rob.j]
                if not curr_mass.wall_top:
                    rob.move_top()
                    top_mass.clear()
                else:
                    rob.turn_right_if_wall()
                continue

            if direction == 1:
                right_mass = floor[rob.i][rob.j+1]
                if not curr_mass.wall_right:
                    rob.move_right()
                else:
                    rob.turn_right_if_wall()
                continue

            if direction == 2:
                bottom_mass = floor[rob.i+1][rob.j]
                if not curr_mass.wall_bottom:
                    rob.move_bottom()
                else:
                    rob.turn_right_if_wall()
                continue

            if direction == 3:
                left_mass = floor[rob.i][rob.j-1]
                if not curr_mass.wall_left:
                    rob.move_left()
                else:
                    rob.turn_right_if_wall()
                continue


    print("".join(rob.root))

main(lines)

提出情報

提出日時
問題 A - Code Golf for Robot Vacuums
ユーザ 88888888_kota
言語 Python (3.8.2)
得点 0
コード長 5651 Byte
結果 RE
実行時間 27 ms
メモリ 8980 KiB

ジャッジ結果

セット名 test_ALL
得点 / 配点 0 / 100000000
結果
RE × 100
セット名 テストケース
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt
ケース名 結果 実行時間 メモリ
test_0000.txt RE 19 ms 8748 KiB
test_0001.txt RE 22 ms 8964 KiB
test_0002.txt RE 25 ms 8784 KiB
test_0003.txt RE 17 ms 8852 KiB
test_0004.txt RE 17 ms 8768 KiB
test_0005.txt RE 19 ms 8748 KiB
test_0006.txt RE 16 ms 8716 KiB
test_0007.txt RE 17 ms 8760 KiB
test_0008.txt RE 20 ms 8756 KiB
test_0009.txt RE 17 ms 8764 KiB
test_0010.txt RE 21 ms 8768 KiB
test_0011.txt RE 22 ms 8928 KiB
test_0012.txt RE 23 ms 8852 KiB
test_0013.txt RE 18 ms 8964 KiB
test_0014.txt RE 18 ms 8752 KiB
test_0015.txt RE 19 ms 8788 KiB
test_0016.txt RE 17 ms 8768 KiB
test_0017.txt RE 17 ms 8752 KiB
test_0018.txt RE 19 ms 8736 KiB
test_0019.txt RE 17 ms 8748 KiB
test_0020.txt RE 17 ms 8756 KiB
test_0021.txt RE 18 ms 8784 KiB
test_0022.txt RE 19 ms 8980 KiB
test_0023.txt RE 19 ms 8744 KiB
test_0024.txt RE 17 ms 8760 KiB
test_0025.txt RE 18 ms 8760 KiB
test_0026.txt RE 18 ms 8964 KiB
test_0027.txt RE 17 ms 8760 KiB
test_0028.txt RE 19 ms 8832 KiB
test_0029.txt RE 20 ms 8760 KiB
test_0030.txt RE 22 ms 8744 KiB
test_0031.txt RE 18 ms 8876 KiB
test_0032.txt RE 17 ms 8968 KiB
test_0033.txt RE 21 ms 8756 KiB
test_0034.txt RE 22 ms 8756 KiB
test_0035.txt RE 17 ms 8756 KiB
test_0036.txt RE 20 ms 8756 KiB
test_0037.txt RE 17 ms 8764 KiB
test_0038.txt RE 18 ms 8868 KiB
test_0039.txt RE 20 ms 8884 KiB
test_0040.txt RE 17 ms 8880 KiB
test_0041.txt RE 18 ms 8968 KiB
test_0042.txt RE 27 ms 8756 KiB
test_0043.txt RE 25 ms 8760 KiB
test_0044.txt RE 18 ms 8876 KiB
test_0045.txt RE 17 ms 8928 KiB
test_0046.txt RE 22 ms 8760 KiB
test_0047.txt RE 20 ms 8740 KiB
test_0048.txt RE 17 ms 8876 KiB
test_0049.txt RE 17 ms 8880 KiB
test_0050.txt RE 19 ms 8732 KiB
test_0051.txt RE 17 ms 8752 KiB
test_0052.txt RE 18 ms 8792 KiB
test_0053.txt RE 22 ms 8880 KiB
test_0054.txt RE 23 ms 8744 KiB
test_0055.txt RE 18 ms 8876 KiB
test_0056.txt RE 17 ms 8736 KiB
test_0057.txt RE 20 ms 8760 KiB
test_0058.txt RE 19 ms 8736 KiB
test_0059.txt RE 19 ms 8928 KiB
test_0060.txt RE 23 ms 8892 KiB
test_0061.txt RE 21 ms 8792 KiB
test_0062.txt RE 18 ms 8876 KiB
test_0063.txt RE 17 ms 8800 KiB
test_0064.txt RE 20 ms 8756 KiB
test_0065.txt RE 17 ms 8740 KiB
test_0066.txt RE 17 ms 8736 KiB
test_0067.txt RE 23 ms 8868 KiB
test_0068.txt RE 24 ms 8868 KiB
test_0069.txt RE 20 ms 8840 KiB
test_0070.txt RE 18 ms 8732 KiB
test_0071.txt RE 18 ms 8884 KiB
test_0072.txt RE 19 ms 8760 KiB
test_0073.txt RE 18 ms 8760 KiB
test_0074.txt RE 17 ms 8732 KiB
test_0075.txt RE 20 ms 8968 KiB
test_0076.txt RE 17 ms 8740 KiB
test_0077.txt RE 17 ms 8876 KiB
test_0078.txt RE 19 ms 8968 KiB
test_0079.txt RE 17 ms 8868 KiB
test_0080.txt RE 25 ms 8732 KiB
test_0081.txt RE 21 ms 8876 KiB
test_0082.txt RE 23 ms 8852 KiB
test_0083.txt RE 18 ms 8928 KiB
test_0084.txt RE 20 ms 8752 KiB
test_0085.txt RE 18 ms 8960 KiB
test_0086.txt RE 23 ms 8876 KiB
test_0087.txt RE 23 ms 8764 KiB
test_0088.txt RE 24 ms 8752 KiB
test_0089.txt RE 19 ms 8844 KiB
test_0090.txt RE 17 ms 8884 KiB
test_0091.txt RE 17 ms 8964 KiB
test_0092.txt RE 19 ms 8868 KiB
test_0093.txt RE 23 ms 8788 KiB
test_0094.txt RE 17 ms 8756 KiB
test_0095.txt RE 17 ms 8732 KiB
test_0096.txt RE 19 ms 8768 KiB
test_0097.txt RE 21 ms 8748 KiB
test_0098.txt RE 18 ms 8756 KiB
test_0099.txt RE 18 ms 8788 KiB