import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
def draw_pda():
fig, ax = plt.subplots(figsize=(10, 5))
# Draw states
states = {
'q0': (0, 0),
'q1': (2, 0),
'q2': (4, 0),
'q3': (6, 0)
}
for state, pos in states.items():
ax.add_patch(Rectangle(pos, 1, 1, fill=None))
ax.text(pos[0] + 0.5, pos[1] + 0.5, state, ha='center', va='center')
# Draw transitions
transitions = [
('q0', 'q0', 'a', 'A', 'A$'),
('q0', 'q0', 'a', 'A', 'AA'),
('q0', 'q1', 'b', 'A', 'B'),
('q1', 'q1', 'b', 'B', 'BB'),
('q1', 'q2', 'c', 'B', 'C'),
('q2', 'q2', 'c', 'C', 'CC'),
('q2', 'q3', '', 'C', 'C'),
('q2', 'q3', '', 'B', 'B'),
('q2', 'q3', '', 'A', 'A')
]
for t in transitions:
start = states[t[0]]
end = states[t[1]]
ax.annotate('', xy=(end[0] + 0.5, end[1] + 0.5), xytext=(start[0] + 0.5, start[1] + 0.5),
arrowprops=dict(arrowstyle='->'))
ax.text((start[0] + end[0]) / 2 + 0.25, (start[1] + end[1]) / 2 + 0.25, f'{t[2]}, {t[3]} → {t[4]}', fontsize=8)
ax.set_xlim(-1, 8)
ax.set_ylim(-1, 2)
ax.axis('off')
plt.show()
draw_pda()
aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIG1hdHBsb3RsaWIucGF0Y2hlcyBpbXBvcnQgUmVjdGFuZ2xlCgpkZWYgZHJhd19wZGEoKToKICAgIGZpZywgYXggPSBwbHQuc3VicGxvdHMoZmlnc2l6ZT0oMTAsIDUpKQoKICAgICMgRHJhdyBzdGF0ZXMKICAgIHN0YXRlcyA9IHsKICAgICAgICAncTAnOiAoMCwgMCksCiAgICAgICAgJ3ExJzogKDIsIDApLAogICAgICAgICdxMic6ICg0LCAwKSwKICAgICAgICAncTMnOiAoNiwgMCkKICAgIH0KICAgIGZvciBzdGF0ZSwgcG9zIGluIHN0YXRlcy5pdGVtcygpOgogICAgICAgIGF4LmFkZF9wYXRjaChSZWN0YW5nbGUocG9zLCAxLCAxLCBmaWxsPU5vbmUpKQogICAgICAgIGF4LnRleHQocG9zWzBdICsgMC41LCBwb3NbMV0gKyAwLjUsIHN0YXRlLCBoYT0nY2VudGVyJywgdmE9J2NlbnRlcicpCgogICAgIyBEcmF3IHRyYW5zaXRpb25zCiAgICB0cmFuc2l0aW9ucyA9IFsKICAgICAgICAoJ3EwJywgJ3EwJywgJ2EnLCAnQScsICdBJCcpLAogICAgICAgICgncTAnLCAncTAnLCAnYScsICdBJywgJ0FBJyksCiAgICAgICAgKCdxMCcsICdxMScsICdiJywgJ0EnLCAnQicpLAogICAgICAgICgncTEnLCAncTEnLCAnYicsICdCJywgJ0JCJyksCiAgICAgICAgKCdxMScsICdxMicsICdjJywgJ0InLCAnQycpLAogICAgICAgICgncTInLCAncTInLCAnYycsICdDJywgJ0NDJyksCiAgICAgICAgKCdxMicsICdxMycsICcnLCAnQycsICdDJyksCiAgICAgICAgKCdxMicsICdxMycsICcnLCAnQicsICdCJyksCiAgICAgICAgKCdxMicsICdxMycsICcnLCAnQScsICdBJykKICAgIF0KICAgIGZvciB0IGluIHRyYW5zaXRpb25zOgogICAgICAgIHN0YXJ0ID0gc3RhdGVzW3RbMF1dCiAgICAgICAgZW5kID0gc3RhdGVzW3RbMV1dCiAgICAgICAgYXguYW5ub3RhdGUoJycsIHh5PShlbmRbMF0gKyAwLjUsIGVuZFsxXSArIDAuNSksIHh5dGV4dD0oc3RhcnRbMF0gKyAwLjUsIHN0YXJ0WzFdICsgMC41KSwKICAgICAgICAgICAgICAgICAgICBhcnJvd3Byb3BzPWRpY3QoYXJyb3dzdHlsZT0nLT4nKSkKICAgICAgICBheC50ZXh0KChzdGFydFswXSArIGVuZFswXSkgLyAyICsgMC4yNSwgKHN0YXJ0WzFdICsgZW5kWzFdKSAvIDIgKyAwLjI1LCBmJ3t0WzJdfSwge3RbM119IOKGkiB7dFs0XX0nLCBmb250c2l6ZT04KQoKICAgIGF4LnNldF94bGltKC0xLCA4KQogICAgYXguc2V0X3lsaW0oLTEsIDIpCiAgICBheC5heGlzKCdvZmYnKQogICAgcGx0LnNob3coKQoKZHJhd19wZGEoKQo=