diff --git a/DIRECTORY.md b/DIRECTORY.md index 81d6f4c70864..a61577c0033f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -77,6 +77,7 @@ * [Langtons Ant](cellular_automata/langtons_ant.py) * [Nagel Schrekenberg](cellular_automata/nagel_schrekenberg.py) * [One Dimensional](cellular_automata/one_dimensional.py) + * [Von Neumann](cellular_automata/von_neumann.py) * [Wa Tor](cellular_automata/wa_tor.py) ## Ciphers diff --git a/cellular_automata/von_neumann.py b/cellular_automata/von_neumann.py index c277195e8c34..499f9e21ff7c 100644 --- a/cellular_automata/von_neumann.py +++ b/cellular_automata/von_neumann.py @@ -309,7 +309,25 @@ def simulate_von_neumann_cellular_automaton( return generation_history +def visualise_simulation_history(generation_history: list[np.ndarray]) -> None: + # Imports within the function as not required for the simulation algorithm. + from matplotlib import pyplot as plt + from matplotlib.animation import FuncAnimation + + fig, ax = plt.subplots() + + def animate_func(i): + ax.imshow(generation_history[i]) + + anim = FuncAnimation(fig, animate_func, frames=len(generation_history)) # noqa: F841 + + plt.show() + + if __name__ == "__main__": import doctest doctest.testmod(verbose=True) + + history = simulate_von_neumann_cellular_automaton() + visualise_simulation_history(history)