CSES - Avainkoodi

Avainkoodissa on neljä numeroa väliltä 191 \dots 9. Koodissa ei esiinny kahta kertaa samaa numeroa.

Annettuna on koodin kuvaava merkkijono. Jokainen merkki on joko koodissa esiintyvä numero tai merkki ?, joka tarkoittaa tuntematonta numeroa. Tehtäväsi on muodostaa lista mahdollisista koodeista.

Esimerkiksi kun merkkijono on 24?5, mahdolliset koodit ovat 2415, 2435, 2465, 2475, 2485 ja 2495.

Toteuta tiedostoon keycode.py funktio find_codes, jolle annetaan parametrina koodin kuvaus merkkijonona. Funktion tulee palauttaa lista, jossa on pienimmästä suurimpaan kaikki koodit merkkijonoina.

Funktion tulee toimia tehokkaasti kaikissa tapauksissa.

def find_codes(pattern):
    # TODO

if __name__ == "__main__":
    codes = find_codes("24?5")
    print(codes) # ['2415', '2435', '2465', '2475', '2485', '2495']

    codes = find_codes("1?2?")
    print(codes[:5]) # ['1324', '1325', '1326', '1327', '1328']
    print(len(codes)) # 42

    codes = find_codes("????")
    print(codes[:5]) # ['1234', '1235', '1236', '1237', '1238']
    print(len(codes)) # 3024