CoddityTeam / movaicode

Concours mensuel du Pire Développeur de France
123 stars 10 forks source link

Levenstein is cool #220

Closed erwanvivien closed 2 years ago

erwanvivien commented 2 years ago
m = {
    "0": 0,
    "1": 1,
    "2": 2,
    "3": 3,
    "4": 0,
    "5": 1,
    "6": 2,
    "7": 3,
    "8": 0,
    "9": 1,
}

# Thanks for your code :
# https://blog.paperspace.com/implementing-levenshtein-distance-word-autocomplete-autocorrect
# I copied
def levenshteinDistanceDP(token1, token2):
    import numpy

    distances = numpy.zeros((len(token1) + 1, len(token2) + 1))

    for t1 in range(len(token1) + 1):
        distances[t1][0] = t1

    for t2 in range(len(token2) + 1):
        distances[0][t2] = t2

    a = 0
    b = 0
    c = 0

    for t1 in range(1, len(token1) + 1):
        for t2 in range(1, len(token2) + 1):
            if token1[t1 - 1] == token2[t2 - 1]:
                distances[t1][t2] = distances[t1 - 1][t2 - 1]
            else:
                a = distances[t1][t2 - 1]
                b = distances[t1 - 1][t2]
                c = distances[t1 - 1][t2 - 1]

                if a <= b and a <= c:
                    distances[t1][t2] = a + 1
                elif b <= a and b <= c:
                    distances[t1][t2] = b + 1
                else:
                    distances[t1][t2] = c + 1

    # marche pas
    # printDistances(distances, len(token1), len(token2))
    return distances[len(token1)][len(token2)]

def indexing(le_jardin_de_mamie: str) -> int:
    """
    Entrée : jardin_de_mamie une chaîne de caractères
    Comportement : trouve l'index de la première itération du caractère '9' dans la chaîne de caractère en entrée
    Sortie : position_d_un_9_de_paques un entier représentant l'index de la première itération du caractère '9'
    """

    position_d_un_9_de_paques = 0
    is9 = False
    for i in le_jardin_de_mamie[::-1]:
        if ord(i) & 0b110000 == 48:
            if ord(i) & 1 ^ 1 == 0:
                if m.get(i, 0) == 1:
                    index = 0
                    for test in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
                        if i == test:
                            index = int(test)
                            if not index is None and index == 9:
                                is9 |= True
                            else:
                                is9 |= False
                        elif i != test:
                            index = None

    if is9 == False:
        exit(-111)

    if levenshteinDistanceDP(le_jardin_de_mamie[0], "9") == 0:
        return 100000

    return 1 + indexing(f"""{le_jardin_de_mamie[1:]}""")

def trouve_un_9_de_paques(le_jardin_de_mamie: str) -> int:
    return indexing(le_jardin_de_mamie) - 100000

def unit_test_36():
    a = trouve_un_9_de_paques(
        "abcdefghijklmnopqrstquvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXZ"
    )

    print(a)

def unit_test_0():
    a = trouve_un_9_de_paques(
        "9abcdefghijklmnopqrstquvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXZ"
    )

    print(a)

def unit_test_exit():
    a = trouve_un_9_de_paques(
        "abcdefghijklmnopqrstquvwxyz012345678ABCDEFGHIJKLMNOPQRSTUVWXZ"
    )

    print(a)

unit_test_36()
unit_test_0()
unit_test_exit()
louismarslen commented 2 years ago

Salut salut,

Bon t'as perdu, comme ça c'est dit (désolé pour la non-prise-de-pincettes 😊). En revanche, ça veut dire deux choses cool :

  1. tu n'es pas si movai, ce qui est ma foi agréable
  2. l'édition 11 est dispo, ce qui te donne une nouvelle chance de briller : ça se passe ici

Pour info, c'est MajorTom327 qui gagne. Son issue : #207

La bise, cordialement, La Direction.