• # En Python

    Posté par (site web personnel) . En réponse au message Avent du Code, jour 6. Évalué à 4.

    from typing import Iterable
    def solve1(lines: Iterable[str]) -> int:
     """Solve part 1 of today's puzzle"""
     for line in lines:
     # There is actually only one line :-)
     for i in range(4, len(line) - 1): # ignore final '\n'
     if len(set(line[i-4:i])) >= 4:
     return i
     return 0
    def solve2(lines: Iterable[str]) -> int:
     """Solve part 2 of today's puzzle"""
     for line in lines:
     # There is actually only one line :-)
     for i in range(14, len(line) - 1): # ignore final '\n'
     if len(set(line[i-14:i])) >= 14:
     return i
     return 0

    Le fait que mes fonctions mangent un itérable de chaînes vient des fonctions utilitaires que j'ai codées pour intégrer ça facilement. Ici, ça donne quelque chose d'un peu artificiel puisqu'il n'y a qu'une ligne à lire.

    Je ne suis pas du tout satisfait par le fait de transformer à chaque fois un bout glissant de la chaîne d'entrée en un ensemble. J'aimerais bien faire quelque chose d'un peu mieux optimisé, mais je n'ai rien de probant en tête.