+ "execution_count": 34,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "import uuid"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def is_subseq_recursive_dot(s1, s2):\n",
+ " node_id = uuid.uuid4().hex\n",
+ " node_string = 'n{} [label=\"{}\\\\n{}\"];'.format(node_id, s1, s2)\n",
+ "# print(s1, s2, node_string)\n",
+ " if not s1:\n",
+ " return node_id, ['n{} [label=\"-\\\\n{}\\\\nTrue\"];'.format(node_id, s2)]\n",
+ " elif len(s1) > len(s2):\n",
+ " return node_id, ['n{} [label=\"{}\\\\n{}\\\\nFalse\"];'.format(node_id, s1, s2)]\n",
+ " else:\n",
+ " if s1[-1] == s2[-1]:\n",
+ " node1_id, node1_graph = is_subseq_recursive_dot(s1[:-1], s2[:-1])\n",
+ " node2_id, node2_graph = is_subseq_recursive_dot(s1, s2[:-1])\n",
+ " return node_id, ([node_string, \n",
+ " 'n{} -> n{};'.format(node_id, node1_id), \n",
+ " 'n{} -> n{};'.format(node_id, node2_id)] + \n",
+ " node1_graph + node2_graph)\n",
+ " else:\n",
+ " node1_id, node1_graph = is_subseq_recursive_dot(s1, s2[:-1])\n",
+ " return node_id, ([node_string, \n",
+ " 'n{} -> n{};'.format(node_id, node1_id)] + \n",
+ " node1_graph)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def is_interleave_recursive_dot(s1, s2, s3):\n",
+ " \n",
+ "# print(s1, s2, s3)\n",
+ " node_id = uuid.uuid4().hex\n",
+ " node_string = 'n{} [label=\"{}\\\\n{}\\\\n{}\"];'.format(node_id, s1, s2, s3)\n",
+ "\n",
+ " if not s1:\n",
+ " if s2 == s3:\n",
+ " return node_id, ['n{} [label=\"-\\\\n{}\\\\n{}\\\\nTrue\"];'.format(node_id, s2, s3)]\n",
+ " else:\n",
+ " return node_id, ['n{} [label=\"-\\\\n{}\\\\n{}\\\\nFalse\"];'.format(node_id, s2, s3)]\n",
+ " elif not s2:\n",
+ " if s1 == s3:\n",
+ " return node_id, ['n{} [label=\"{}\\\\n-\\\\n{}\\\\nTrue\"];'.format(node_id, s1, s3)]\n",
+ " else:\n",
+ " return node_id, ['n{} [label=\"{}\\\\n-\\\\n{}\\\\nFalse\"];'.format(node_id, s1, s3)]\n",
+ " else:\n",
+ " if s1[-1] == s2[-1] and s1[-1] == s3[-1]:\n",
+ " node1_id, node1_graph = is_interleave_recursive_dot(s1[:-1], s2, s3[:-1])\n",
+ " node2_id, node2_graph = is_interleave_recursive_dot(s1, s2[:-1], s3[:-1])\n",
+ " return node_id, ([node_string, \n",
+ " 'n{} -> n{};'.format(node_id, node1_id), \n",
+ " 'n{} -> n{};'.format(node_id, node2_id)] + \n",
+ " node1_graph + node2_graph)\n",
+ " elif s1[-1] == s3[-1]:\n",
+ " node1_id, node1_graph = is_interleave_recursive_dot(s1[:-1], s2, s3[:-1])\n",
+ " return node_id, ([node_string, \n",
+ " 'n{} -> n{};'.format(node_id, node1_id)] + \n",
+ " node1_graph)\n",
+ " elif s2[-1] == s3[-1]:\n",
+ " node1_id, node1_graph = is_interleave_recursive_dot(s1, s2[:-1], s3[:-1])\n",
+ " return node_id, ([node_string, \n",
+ " 'n{} -> n{};'.format(node_id, node1_id)] + \n",
+ " node1_graph)\n",
+ " else:\n",
+ " return node_id, ['n{} [label=\"{}\\\\n{}\\\\n{}\\\\nFalse\"];'.format(node_id, s1, s2, s3)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "s1 = \"aabcc\"\n",
+ "s2 = \"dbbca\"\n",
+ "\n",
+ "s3t = \"aadbbcbcac\"\n",
+ "s3f = \"aadbbbaccc\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "T . . . . .\n",
+ "T . . . . .\n",
+ "T T T T T .\n",
+ ". T T . T .\n",
+ ". . T T T T\n",
+ ". . . T . T\n",
+ "AAdbbcBCaC\n"
+ ]
+ }
+ ],
+ "source": [
+ "v, bp, t = is_interleave(s1, s2, s3t, return_backpointers=True, return_table=True)\n",
+ "print(show_table(t))\n",
+ "print(show_backtrace(bp))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def show_table_md(table, s1, s2, s3):\n",
+ " header = '| |' + '|'.join('{}<br />{}'.format('<br />'.join(str(s2[:i])), i) for i in range(len(s2) + 1)) + '|'\n",
+ " separator = '|:---:' * (len(s2) + 2) + '|'\n",
+ " rows = []\n",
+ " columns = sorted(set(k[1] for k in table))\n",
+ " for r in range(len(s1) + 1):\n",
+ " row = '|**{}<br />{}**|'.format(r, s1[:r])\n",
+ " row += '|'.join('{}<br />T'.format(s3[:(r+c)]) if table[r, c] else '{}<br />.'.format(s3[:(r+c)]) for c in columns)\n",
+ " row += '|'\n",
+ " rows += [row]\n",
+ " return '\\n'.join([header] + [separator] + rows)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "| |<br />0|d<br />1|d<br />b<br />2|d<br />b<br />b<br />3|d<br />b<br />b<br />c<br />4|d<br />b<br />b<br />c<br />a<br />5|\n",
+ "|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n",
+ "|**0<br />**|<br />T|a<br />.|aa<br />.|aad<br />.|aadb<br />.|aadbb<br />.|\n",
+ "|**1<br />a**|a<br />T|aa<br />.|aad<br />.|aadb<br />.|aadbb<br />.|aadbbc<br />.|\n",
+ "|**2<br />aa**|aa<br />T|aad<br />T|aadb<br />T|aadbb<br />T|aadbbc<br />T|aadbbcb<br />.|\n",
+ "|**3<br />aab**|aad<br />.|aadb<br />T|aadbb<br />T|aadbbc<br />.|aadbbcb<br />T|aadbbcbc<br />.|\n",
+ "|**4<br />aabc**|aadb<br />.|aadbb<br />.|aadbbc<br />T|aadbbcb<br />T|aadbbcbc<br />T|aadbbcbca<br />T|\n",
+ "|**5<br />aabcc**|aadbb<br />.|aadbbc<br />.|aadbbcb<br />.|aadbbcbc<br />T|aadbbcbca<br />.|aadbbcbcac<br />T|\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(show_table_md(t, s1, s2, s3t))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "| |<br />0|d<br />1|d<br />b<br />2|d<br />b<br />b<br />3|d<br />b<br />b<br />c<br />4|d<br />b<br />b<br />c<br />a<br />5|\n",
+ "|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n",
+ "|**0<br />**|<br />T|a<br />.|aa<br />.|aad<br />.|aadb<br />.|aadbb<br />.|\n",
+ "|**1<br />a**|a<br />T|aa<br />.|aad<br />.|aadb<br />.|aadbb<br />.|aadbbc<br />.|\n",
+ "|**2<br />aa**|aa<br />T|aad<br />T|aadb<br />T|aadbb<br />T|aadbbc<br />T|aadbbcb<br />.|\n",
+ "|**3<br />aab**|aad<br />.|aadb<br />T|aadbb<br />T|aadbbc<br />.|aadbbcb<br />T|aadbbcbc<br />.|\n",
+ "|**4<br />aabc**|aadb<br />.|aadbb<br />.|aadbbc<br />T|aadbbcb<br />T|aadbbcbc<br />T|aadbbcbca<br />T|\n",
+ "|**5<br />aabcc**|aadbb<br />.|aadbbc<br />.|aadbbcb<br />.|aadbbcbc<br />T|aadbbcbca<br />.|aadbbcbcac<br />T|"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "T T T T\n",
+ "T . T .\n",
+ ". . T T\n",
+ ". . . T\n",
+ "abACaB\n"
+ ]
+ }
+ ],
+ "source": [
+ "e1 = 'acb'\n",
+ "e2 = 'aba'\n",
+ "e3 = 'abacab'\n",
+ "v, bp, et = is_interleave(e1, e2, e3, return_backpointers=True, return_table=True)\n",
+ "print(show_table(et))\n",
+ "print(show_backtrace(bp))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "| |<br />0|a<br />1|a<br />b<br />2|a<br />b<br />a<br />3|\n",
+ "|:---:|:---:|:---:|:---:|:---:|\n",
+ "|**0<br />**|<br />T|a<br />T|ab<br />T|aba<br />T|\n",
+ "|**1<br />a**|a<br />T|ab<br />.|aba<br />T|abac<br />.|\n",
+ "|**2<br />ac**|ab<br />.|aba<br />.|abac<br />T|abaca<br />T|\n",
+ "|**3<br />acb**|aba<br />.|abac<br />.|abaca<br />.|abacab<br />T|\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(show_table_md(et, e1, e2, e3))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "| |<br />0|a<br />1|a<br />b<br />2|a<br />b<br />a<br />3|\n",
+ "|:---:|:---:|:---:|:---:|:---:|\n",
+ "|**0<br />**|<br />T|a<br />T|ab<br />T|aba<br />T|\n",
+ "|**1<br />a**|a<br />T|ab<br />.|aba<br />T|abac<br />.|\n",
+ "|**2<br />ac**|ab<br />.|aba<br />.|abac<br />T|abaca<br />T|\n",
+ "|**3<br />acb**|aba<br />.|abac<br />.|abaca<br />.|abacab<br />T|"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n825af3fb1bf441a3b97d8fbfcdce6f3d [label=\"aabcc\\ndbbca\\naadbbcbcac\"];\n",
+ "n825af3fb1bf441a3b97d8fbfcdce6f3d -> n944a00ca9b134f3c98aeef34526ff17d;\n",
+ "n944a00ca9b134f3c98aeef34526ff17d [label=\"aabc\\ndbbca\\naadbbcbca\"];\n",
+ "n944a00ca9b134f3c98aeef34526ff17d -> n1586862dcfb74b1a9e9f964b7de102ef;\n",
+ "n1586862dcfb74b1a9e9f964b7de102ef [label=\"aabc\\ndbbc\\naadbbcbc\"];\n",
+ "n1586862dcfb74b1a9e9f964b7de102ef -> nf59278631d8047e7b0cca670e412297b;\n",
+ "n1586862dcfb74b1a9e9f964b7de102ef -> nd83e9c32d1fa43bab45dc21d46830924;\n",
+ "nf59278631d8047e7b0cca670e412297b [label=\"aab\\ndbbc\\naadbbcb\"];\n",
+ "nf59278631d8047e7b0cca670e412297b -> nb0424588e9354d2aa61b587a7edfb7f6;\n",
+ "nb0424588e9354d2aa61b587a7edfb7f6 [label=\"aa\\ndbbc\\naadbbc\"];\n",
+ "nb0424588e9354d2aa61b587a7edfb7f6 -> nb73d85cfb09e43d692de22a49de48b35;\n",
+ "nb73d85cfb09e43d692de22a49de48b35 [label=\"aa\\ndbb\\naadbb\"];\n",
+ "nb73d85cfb09e43d692de22a49de48b35 -> n9e34f866ae1746d797cebd4e1fc73af9;\n",
+ "n9e34f866ae1746d797cebd4e1fc73af9 [label=\"aa\\ndb\\naadb\"];\n",
+ "n9e34f866ae1746d797cebd4e1fc73af9 -> n5c7027bfea9f494894cea01fd5e25387;\n",
+ "n5c7027bfea9f494894cea01fd5e25387 [label=\"aa\\nd\\naad\"];\n",
+ "n5c7027bfea9f494894cea01fd5e25387 -> n650da0feb2624011a20e209bada2445c;\n",
+ "n650da0feb2624011a20e209bada2445c [label=\"aa\\n-\\naa\\nTrue\"];\n",
+ "nd83e9c32d1fa43bab45dc21d46830924 [label=\"aabc\\ndbb\\naadbbcb\"];\n",
+ "nd83e9c32d1fa43bab45dc21d46830924 -> n1c4772b660f24d6da9194d16be602b3a;\n",
+ "n1c4772b660f24d6da9194d16be602b3a [label=\"aabc\\ndb\\naadbbc\"];\n",
+ "n1c4772b660f24d6da9194d16be602b3a -> n0393745322e447c79515cffb4afc4d5b;\n",
+ "n0393745322e447c79515cffb4afc4d5b [label=\"aab\\ndb\\naadbb\"];\n",
+ "n0393745322e447c79515cffb4afc4d5b -> na9ae42f3b7dd415886e78bb960b94184;\n",
+ "n0393745322e447c79515cffb4afc4d5b -> nccaf23a4e311415cbe42bedd8a3727c2;\n",
+ "na9ae42f3b7dd415886e78bb960b94184 [label=\"aa\\ndb\\naadb\"];\n",
+ "na9ae42f3b7dd415886e78bb960b94184 -> nab2d4f76a75c4c6686166212cad4b4a3;\n",
+ "nab2d4f76a75c4c6686166212cad4b4a3 [label=\"aa\\nd\\naad\"];\n",
+ "nab2d4f76a75c4c6686166212cad4b4a3 -> nee8a56cc920943e0a2593a8ee863c53c;\n",
+ "nee8a56cc920943e0a2593a8ee863c53c [label=\"aa\\n-\\naa\\nTrue\"];\n",
+ "nccaf23a4e311415cbe42bedd8a3727c2 [label=\"aab\\nd\\naadb\"];\n",
+ "nccaf23a4e311415cbe42bedd8a3727c2 -> ne1d3cf2b04074c10986fdefb464e5da8;\n",
+ "ne1d3cf2b04074c10986fdefb464e5da8 [label=\"aa\\nd\\naad\"];\n",
+ "ne1d3cf2b04074c10986fdefb464e5da8 -> n9091b74bc8a64b91a9e75aef6b016a64;\n",
+ "n9091b74bc8a64b91a9e75aef6b016a64 [label=\"aa\\n-\\naa\\nTrue\"];\n"
+ ]
+ }
+ ],
+ "source": [
+ "root, graph = is_interleave_recursive_dot(s1, s2, s3t)\n",
+ "print('\\n'.join(graph))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n894a2781e978478699af2875308ec4ad [label=\"aaa\\naaa\\naaaaaa\"];\n",
+ "n894a2781e978478699af2875308ec4ad -> n863e03f8030547bf9f4e7a4815c4e027;\n",
+ "n894a2781e978478699af2875308ec4ad -> n4c492e6eb94741d2b11567b1b4c729fa;\n",
+ "n863e03f8030547bf9f4e7a4815c4e027 [label=\"aa\\naaa\\naaaaa\"];\n",
+ "n863e03f8030547bf9f4e7a4815c4e027 -> n8f044087a7324ef69d5cf2ae120c0902;\n",
+ "n863e03f8030547bf9f4e7a4815c4e027 -> n5510c6a96018480ba0fc2315d34a69e6;\n",
+ "n8f044087a7324ef69d5cf2ae120c0902 [label=\"a\\naaa\\naaaa\"];\n",
+ "n8f044087a7324ef69d5cf2ae120c0902 -> n6f3153ef68384ebbbe5860a48c774d55;\n",
+ "n8f044087a7324ef69d5cf2ae120c0902 -> n4d068ce52cf248adb3b537805a233dda;\n",
+ "n6f3153ef68384ebbbe5860a48c774d55 [label=\"-\\naaa\\naaa\\nTrue\"];\n",
+ "n4d068ce52cf248adb3b537805a233dda [label=\"a\\naa\\naaa\"];\n",
+ "n4d068ce52cf248adb3b537805a233dda -> nb85aee31625f4998b596d9b6ea3b77fd;\n",
+ "n4d068ce52cf248adb3b537805a233dda -> nec2837ce384246ffb06e3d4090adfb37;\n",
+ "nb85aee31625f4998b596d9b6ea3b77fd [label=\"-\\naa\\naa\\nTrue\"];\n",
+ "nec2837ce384246ffb06e3d4090adfb37 [label=\"a\\na\\naa\"];\n",
+ "nec2837ce384246ffb06e3d4090adfb37 -> n9c395901af2d4e67a7e5a370f759bce6;\n",
+ "nec2837ce384246ffb06e3d4090adfb37 -> nff84b0c784744901afb3ac8a5aef3c23;\n",
+ "n9c395901af2d4e67a7e5a370f759bce6 [label=\"-\\na\\na\\nTrue\"];\n",
+ "nff84b0c784744901afb3ac8a5aef3c23 [label=\"a\\n-\\na\\nTrue\"];\n",
+ "n5510c6a96018480ba0fc2315d34a69e6 [label=\"aa\\naa\\naaaa\"];\n",
+ "n5510c6a96018480ba0fc2315d34a69e6 -> n5eaaabd1caef4c3f8f6607a8bb254906;\n",
+ "n5510c6a96018480ba0fc2315d34a69e6 -> n6041081af67d4f57968572aa2051d1bc;\n",
+ "n5eaaabd1caef4c3f8f6607a8bb254906 [label=\"a\\naa\\naaa\"];\n",
+ "n5eaaabd1caef4c3f8f6607a8bb254906 -> n6dd23a9ed026429fb57cbf94e6283364;\n",
+ "n5eaaabd1caef4c3f8f6607a8bb254906 -> n3042bda75e7c4d8f8a9ccc464f0ba724;\n",
+ "n6dd23a9ed026429fb57cbf94e6283364 [label=\"-\\naa\\naa\\nTrue\"];\n",
+ "n3042bda75e7c4d8f8a9ccc464f0ba724 [label=\"a\\na\\naa\"];\n",
+ "n3042bda75e7c4d8f8a9ccc464f0ba724 -> n5e702eeee87042deb3157b6663b1f07a;\n",
+ "n3042bda75e7c4d8f8a9ccc464f0ba724 -> n37928d6516f942008c5e89b5c37098ee;\n",
+ "n5e702eeee87042deb3157b6663b1f07a [label=\"-\\na\\na\\nTrue\"];\n",
+ "n37928d6516f942008c5e89b5c37098ee [label=\"a\\n-\\na\\nTrue\"];\n",
+ "n6041081af67d4f57968572aa2051d1bc [label=\"aa\\na\\naaa\"];\n",
+ "n6041081af67d4f57968572aa2051d1bc -> nbb96e07d3c89450cb92ad725f6fc4845;\n",
+ "n6041081af67d4f57968572aa2051d1bc -> n0dbe764d7e4a429298f2d3583e8c84b1;\n",
+ "nbb96e07d3c89450cb92ad725f6fc4845 [label=\"a\\na\\naa\"];\n",
+ "nbb96e07d3c89450cb92ad725f6fc4845 -> nbe5a7be2ec824370a293e7aa8f3a5467;\n",
+ "nbb96e07d3c89450cb92ad725f6fc4845 -> ndc15a7d84b734bb793055e4712a82d5c;\n",
+ "nbe5a7be2ec824370a293e7aa8f3a5467 [label=\"-\\na\\na\\nTrue\"];\n",
+ "ndc15a7d84b734bb793055e4712a82d5c [label=\"a\\n-\\na\\nTrue\"];\n",
+ "n0dbe764d7e4a429298f2d3583e8c84b1 [label=\"aa\\n-\\naa\\nTrue\"];\n",
+ "n4c492e6eb94741d2b11567b1b4c729fa [label=\"aaa\\naa\\naaaaa\"];\n",
+ "n4c492e6eb94741d2b11567b1b4c729fa -> n0e78dd2900a34a7297cc0ea2bb27e30c;\n",
+ "n4c492e6eb94741d2b11567b1b4c729fa -> nc18fe2c53e9e4209a9af9c0678465b1f;\n",
+ "n0e78dd2900a34a7297cc0ea2bb27e30c [label=\"aa\\naa\\naaaa\"];\n",
+ "n0e78dd2900a34a7297cc0ea2bb27e30c -> n1b98c16a65994faaa980d9c530383c77;\n",
+ "n0e78dd2900a34a7297cc0ea2bb27e30c -> n33dbe313802045f8895d0e904d588881;\n",
+ "n1b98c16a65994faaa980d9c530383c77 [label=\"a\\naa\\naaa\"];\n",
+ "n1b98c16a65994faaa980d9c530383c77 -> n5e7c6dff46ff49f7903eb543c02fa22b;\n",
+ "n1b98c16a65994faaa980d9c530383c77 -> n33391a1fab3849cf9823ccc7396aa7d4;\n",
+ "n5e7c6dff46ff49f7903eb543c02fa22b [label=\"-\\naa\\naa\\nTrue\"];\n",
+ "n33391a1fab3849cf9823ccc7396aa7d4 [label=\"a\\na\\naa\"];\n",
+ "n33391a1fab3849cf9823ccc7396aa7d4 -> n13b4732016804c3986853f6d2fe4a28b;\n",
+ "n33391a1fab3849cf9823ccc7396aa7d4 -> n767be985e5a5469da7cfeea0272705b3;\n",
+ "n13b4732016804c3986853f6d2fe4a28b [label=\"-\\na\\na\\nTrue\"];\n",
+ "n767be985e5a5469da7cfeea0272705b3 [label=\"a\\n-\\na\\nTrue\"];\n",
+ "n33dbe313802045f8895d0e904d588881 [label=\"aa\\na\\naaa\"];\n",
+ "n33dbe313802045f8895d0e904d588881 -> nf59143762fc643f0bd58507b5097b837;\n",
+ "n33dbe313802045f8895d0e904d588881 -> n30d968450bf147b68a8d7df49177722c;\n",
+ "nf59143762fc643f0bd58507b5097b837 [label=\"a\\na\\naa\"];\n",
+ "nf59143762fc643f0bd58507b5097b837 -> ncd2168bdc52c459d821427219fb885d1;\n",
+ "nf59143762fc643f0bd58507b5097b837 -> nc6011f3f746f425ab01fd89e1f17cbb4;\n",
+ "ncd2168bdc52c459d821427219fb885d1 [label=\"-\\na\\na\\nTrue\"];\n",
+ "nc6011f3f746f425ab01fd89e1f17cbb4 [label=\"a\\n-\\na\\nTrue\"];\n",
+ "n30d968450bf147b68a8d7df49177722c [label=\"aa\\n-\\naa\\nTrue\"];\n",
+ "nc18fe2c53e9e4209a9af9c0678465b1f [label=\"aaa\\na\\naaaa\"];\n",
+ "nc18fe2c53e9e4209a9af9c0678465b1f -> n38a7aa8aab21444d8b9d50ca71871b7e;\n",
+ "nc18fe2c53e9e4209a9af9c0678465b1f -> n1ec1cf69ce3c4798b305338648a6e46b;\n",
+ "n38a7aa8aab21444d8b9d50ca71871b7e [label=\"aa\\na\\naaa\"];\n",
+ "n38a7aa8aab21444d8b9d50ca71871b7e -> nad5433a86522484e85d560ac7d202b3d;\n",
+ "n38a7aa8aab21444d8b9d50ca71871b7e -> n6bfb83c32f9e46a19e9408fc087e74ae;\n",
+ "nad5433a86522484e85d560ac7d202b3d [label=\"a\\na\\naa\"];\n",
+ "nad5433a86522484e85d560ac7d202b3d -> n292f0206736a40ac8f6045ac0d8a0a07;\n",
+ "nad5433a86522484e85d560ac7d202b3d -> n07c65e03d3bd473f97579a2c63f922c7;\n",
+ "n292f0206736a40ac8f6045ac0d8a0a07 [label=\"-\\na\\na\\nTrue\"];\n",
+ "n07c65e03d3bd473f97579a2c63f922c7 [label=\"a\\n-\\na\\nTrue\"];\n",
+ "n6bfb83c32f9e46a19e9408fc087e74ae [label=\"aa\\n-\\naa\\nTrue\"];\n",
+ "n1ec1cf69ce3c4798b305338648a6e46b [label=\"aaa\\n-\\naaa\\nTrue\"];\n"
+ ]
+ }
+ ],
+ "source": [
+ "root, graph = is_interleave_recursive_dot('aaa', 'aaa', 'aaaaaa')\n",
+ "print('\\n'.join(graph))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "nd6df1effdb85482db276ea5fea364b79 [label=\"acb\\naba\\nabacab\"];\n",
+ "nd6df1effdb85482db276ea5fea364b79 -> necd79ad17e9d435c9f49c1c1ae26b524;\n",
+ "necd79ad17e9d435c9f49c1c1ae26b524 [label=\"ac\\naba\\nabaca\"];\n",
+ "necd79ad17e9d435c9f49c1c1ae26b524 -> n369b759fead243e0b35621ac1dbc09de;\n",
+ "n369b759fead243e0b35621ac1dbc09de [label=\"ac\\nab\\nabac\"];\n",
+ "n369b759fead243e0b35621ac1dbc09de -> nc4a2401f9791408ba2bb7b4052c27f11;\n",
+ "nc4a2401f9791408ba2bb7b4052c27f11 [label=\"a\\nab\\naba\"];\n",
+ "nc4a2401f9791408ba2bb7b4052c27f11 -> n71b5737da5e54fcb9dfdee6085091a01;\n",
+ "n71b5737da5e54fcb9dfdee6085091a01 [label=\"-\\nab\\nab\\nTrue\"];\n"
+ ]
+ }
+ ],
+ "source": [
+ "root, graph = is_interleave_recursive_dot(e1, e2, e3)\n",
+ "print('\\n'.join(graph))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,