Advent of code

◂ 9 décembre 2024 ▸

  Disk Fragmenter : Déplacer des valeurs par bloc dans des endroits disponibles.
2378984580121520505930414446619015763552254 … 
Sûrement plus simple et propre en utilisant des listes chaînées plutôt que des tableaux.
J'ai créé une classe File juste pour pouvoir faire fichier.id au lieu du fichier[id] d'un dictionnaire et que c'est plus propre (mais moins rapide) que des fichier[1].
  1. code.py
  2. diff_versionBug_versionCorrigee.diffy
# Ce code buggue en partie 1 avec d'autres inputs             <
# Si on arrive dans un état '000122.....3' (. = libre)        <
#    alors on essaie de swaper le 3 avec un élément de fin    <
#    qui n'existe plus !                                      <
                                                              <
  ...                                                             ...

# Part 1: moving block by block                                 # Part 1: moving block by block, version sans le bug
def defrag_part1(system):                                       def defrag_part1(system):
    free_pos = next((k for k in range(len(system)) if system[       free_pos = next((k for k in range(len(system)) if system[
                                                              >     last_block = system.pop()
    while free_pos != NOT_FOUND:                                    while free_pos != NOT_FOUND:
                                                              >         system[free_pos] = last_block
        last_block = system.pop()                                       last_block = system.pop()
        while last_block is None:                                       while last_block is None:
            last_block = system.pop()                                       last_block = system.pop()
        system[free_pos] = last_block                         <
        free_pos = next((k for k in range(free_pos + 1, len(s           free_pos = next((k for k in range(free_pos + 1, len(s
                                                              >     system.append(last_block)
    return system                                                   return system

  ...                                                             ...