CSES - Robotin reitti

Robotti liikkuu ruudukossa pysty- ja vaakasuuntaisesti. Robotin suunta alussa on ylöspäin ja robotti kääntyy oikealle aina, kun sen edessä on este.

Jos robotti liikkuu joskus ruudukon reunan yli, se pääsee pois ruudukosta. Muuten robotti jatkaa ruudukossa liikkumista ikuisesti syklissä.

Tehtäväsi on selvittää, monessako eri ruudukon ruudussa robotti käy yhteensä ja pääseekö se pois ruudukosta vai jääkö se sykliin.

Toteuta tiedostoon roboroute.py funktio analyze_route, jolle annetaan parametrina ruudukon kuvaus listana merkkijonoja. Merkki . on lattiaruutu, merkki # on esteruutu ja merkki R ilmaisee robotin alkuruudun. Voit olettaa, että ruudukossa on tasan yksi merkki R.

Funktiosi tulee palauttaa tuple, jossa ensimmäinen alkio on eri ruutujen määrä robotin reitillä ja toinen alkio on True (robotti pääsee ulos ruudukosta) tai False (robotti jää sykliin ikuisesti).

Funktiota testataan eri tilanteissa, joissa ruudukon koko on enintään 20 \times 20 ruutua. Funktion tulee toimia tehokkaasti kaikissa tällaisissa tapauksissa.

def analyze_route(grid):
    # TODO

if __name__ == "__main__":
    grid1 = [".#......",
             "..#.....",
             ".......#",
             "#.R.....",
             "......#."]
    print(analyze_route(grid1)) # (14, True)

    grid2 = ["........",
             ".##.....",
             ".......#",
             "#.R.....",
             "......#."]
    print(analyze_route(grid2)) # (12, False)

Ensimmäisessä testissä reitti on seuraava:

Toisessa testissä reitti on seuraava: