Задачи этого листочка не проверяются автоматически. Это одна большая задача-исследование, разбитая на подзадачи, чтобы её удобней было решать. Подзадачи нужно тестировать самостоятнльно, а результат (решения задач Е и F)
прислать в виде файла с программой с расширением .py на адрес achehlova@179.ru или в telegram на адрес @achehlova.
A: Визуализация строки
Пусть имеется список из 0 и 1. Напишите функцию, которая получает на вход такой список и печатает строку, где на месте 0 будут пробелы, а на месте 1 какие-нибудь символы (например, # или @ или ещё что-нибудь).
B: Из двоичной системы — в десятичную
Напишите функцию bin_to_dec(a),
которая получает на вход список из 0 и 1, интерпретирует его элементы как цифры двоичного числа и даёт на выходе соответствующее десятичное число.
C: Из десятичной системы — в двоичную
Напишите функцию dec_to_bin8(n), получающую на вход целое неотрицательное число и возвращающую список из 8 элементов — разрядов соответствующего двоичного числа, индекс элемента — это номер разряда.
(Если число больше 255, то старшие биты отбрасываются).
D: Вычисляем новую строку
Напишите функцию, которая получает на вход старый список из нулей и единиц и двоичный код правила (список из 8 элементов, вычисленный функцией из задачи С), а вычисляет новый список из 0 и 1, получающийся из старого с использованием заданного правила.
Как по текущему состоянию «клетки» и её соседей вычислить её новое состояние — подробно описано в статье в разделе «Что означают коды Вольфрама» (можно использовать функцию из задачи В). Для первой «клетки» соседними будут вторая и последняя, для последней — предпоследняя и первая. Используйте функцию из задачи А для визуализации исходного и нового списков.
Исходный список можно сделать случайным с помощью функции randint из модуля random.
E: Жизнь простейщего клеточного автомата — текстовый вариант
Напишите программу, которая получает на вход номер правила и печатает заданное количество строк — последовательных состояний одномерного клеточного автомата. В качестве начального состояния можно взять единственную 1 в середине массива или случайную последовательность 0 и 1.
F: Жизнь простейщего клеточного автомата — графический вариант
Напишите программу, которая рисует последовательные состояния одномерного клеточного автомата в графическом режиме.
Можно использовать модуль drawzero или модуль tkinter. Каждое состояние 0 или 1 показывайте с помощью прямоугольника соответствующего цвета. Напишите новую функцию для визуализации текущего состояния системы вместо текстовой функции из пункта A.
Программа, рисующая один прямоугольник с использованием tkinter:
from tkinter import Tk, Canvas, mainloop
SIZE = 10 # размер прямоугольника
N = 100 # число клеток
XMAX = N * SIZE # ширина холста
YMAX = 400 # высота холста
# Создаётся графическое окно, на которое ссылается переменная root
root = Tk()
# Создаётся холст размером XMAX на YMAX, на который ссылается переменная canv
canv = Canvas(root, width=XMAX, height=YMAX, bg="lightblue")
# Холст размещается в окне
canv.pack()
# создаётся прямоугольник без обводки со стороной SIZE в точке (x, y):
x = 0
y = 0
canv.create_rectangle(x, y, x + SIZE, y + SIZE, fill="blue", width=0)
# Графическое окно выводится на экран и готово реагировать на события
root.mainloop()