efrei/maths-pour-info/base2modulo7.py

39 lines
914 B
Python

#!/usr/bin/env python
"""Automate fini reconnaissant les entiers en base 2 divisibles par 7."""
def main() -> None:
"""Exécution de l'automate."""
print("Fournissez un nombre : ")
nombre = input()
nb_base10 = int(nombre, 2)
if automate_modulo_7(nombre):
print(f"{nb_base10} est multiple de 7")
else:
print(f"{nb_base10} n'est pas multiple de 7")
def automate_modulo_7(nombre: str) -> bool:
"""Automate de modulo 7 en base 2."""
etats = [
(0, 1), # état 0
(2, 3), # état 1
(4, 5), # état 2
(6, 0), # état 3
(1, 2), # état 4
(3, 4), # état 5
(5, 6), # état 6
]
etat_courant = 0 # état initial
for chiffre in nombre:
etat_courant = etats[etat_courant][int(chiffre)]
if etat_courant == 0:
return True
return False
if __name__ == "__main__":
main()