CSES - Tähdet

Annettuna on ruudukko, jossa jokainen ruutu on taivasruutu tai tähtiruutu. Merkki . tarkoittaa taivasruutua ja merkki * tarkoittaa tähtiruutua.

Tehtäväsi on laskea, montako erilaista tähtikuviota ruudukossa esiintyy. Kaksi tähtiruutua kuuluvat samaan tähtikuvioon, jos ne ovat vierekkäin vaaka-, pysty- tai vinosuunnassa.

Kaksi tähtikuviota tulkitaan erilaisiksi myös silloin, kun olisi mahdollista saada ne samanlaisiksi pyöritysten ja peilausten avulla. Tehtäväpohjan esimerkit selventävät asiaa.

Toteuta tiedostoon stars.py funktio count_patterns, jolle annetaan ruudukko listana merkkijonoja. Funktion tulee palauttaa erilaisten tähtikuvioiden määrä.

def count_patterns(grid):
    # TODO

if __name__ == "__main__":
    grid = ["..*..*..",
            "**.....*",
            ".....**.",
            "...*....",
            ".**....*"]
    print(count_patterns(grid)) # 2

    grid = ["....*..*",
            "*.......",
            "......*.",
            "..*.....",
            "......*."]
    print(count_patterns(grid)) # 1

    grid = ["***.*.**",
            ".*..*..*",
            ".*.***..",
            ".......*",
            "......**"]
    print(count_patterns(grid)) # 4

    grid = ["***.***.",
            "..*...*.",
            "**..**..",
            "..*...*.",
            "**..**.."]
    print(count_patterns(grid)) # 1