{"id":4100,"date":"2018-11-08T12:33:11","date_gmt":"2018-11-08T17:33:11","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=4100"},"modified":"2018-11-17T12:22:15","modified_gmt":"2018-11-17T17:22:15","slug":"revisiting-the-game-of-life","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2018\/11\/08\/revisiting-the-game-of-life\/","title":{"rendered":"Revisiting the Game of Life"},"content":{"rendered":"\r\n\r\n<div class=\"content\"><!--introduction--><p>I am addicted.  I keep coming back to John Conway's Game of Life. Years ago, I wrote a chapter about Life in <a href=\"https:\/\/www.mathworks.com\/content\/dam\/mathworks\/mathworks-dot-com\/moler\/exm\/chapters\/life.pdf\">Experiments with MATLAB<\/a>. I wrote a three-part series about Life shortly after I started blogging. <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/03\/game-of-life-part-1-the-rule\/\">Part 1<\/a>, <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/10\/game-of-life-part-2-sparse-matrices\/\">Part 2<\/a>, <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/17\/game-of-life-part-3-sampler\/\">Part 3<\/a>. I have recently made significant enhancements to my MATLAB program for Life.  I never seem to finish the code because I get diverted by actually using the program to explore the Universe.  I invite you to join me.  But, fair warning, you might become addicted too.<\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#fd1d7c82-ea04-4e19-a0a4-56e27e47fa98\">The Rule<\/a><\/li><li><a href=\"#c9b87ce5-823a-454f-adc4-93a0648168bb\">Code<\/a><\/li><li><a href=\"#d8ab0c1d-aeff-473e-bc9f-ec84af722518\">Infinite Universe<\/a><\/li><li><a href=\"#c35edd90-1043-4a65-8431-5a642eea5197\">Glider<\/a><\/li><li><a href=\"#3ce03f78-808e-42e8-b6bd-c369c9f9250a\">Life Lexicon<\/a><\/li><li><a href=\"#3eef67b0-a346-4e8e-ad59-9d6a3e5488f3\">Herschel<\/a><\/li><li><a href=\"#6bcbde67-b237-4fe0-a3ee-12943c082a2c\">Fx77<\/a><\/li><li><a href=\"#3d01ea55-200e-4dac-8cbe-de3a5f132a00\">Soup<\/a><\/li><li><a href=\"#f8ed4bb9-8421-4ffd-90f0-f2e1b3f7fd29\"><tt>life_lex<\/tt><\/a><\/li><\/ul><\/div><h4>The Rule<a name=\"fd1d7c82-ea04-4e19-a0a4-56e27e47fa98\"><\/a><\/h4><p>Recall how the Game of Life works. The <i>universe<\/i> is an infinite, two-dimensional rectangular grid. The <i>population<\/i> is a collection of grid cells that are marked as <i>alive<\/i>.  The population evolves at discrete time steps known as <i>generations<\/i>. At each step, the fate of each cell is determined by the vitality of its eight nearest neighbors and this rule:<\/p><div><ul><li>A live cell with two live neighbors, or any cell with three   live neighbors, is alive at the next step.<\/li><\/ul><\/div><p>The fascination of Life is that this deceptively simple rule leads to an incredible variety of patterns, puzzles, and unsolved problems.<\/p><h4>Code<a name=\"c9b87ce5-823a-454f-adc4-93a0648168bb\"><\/a><\/h4><p>Here is the core of the code.  Sparse indexing makes it look easy. The graphics is done by the sparse display program, <tt>spy<\/tt>.<\/p><pre class=\"codeinput\">   dbtype <span class=\"string\">69:85<\/span> <span class=\"string\">life_lex<\/span>\r\n<\/pre><pre class=\"codeoutput\">\r\n69              % Whether cells stay alive, die, or generate new cells depends\r\n70              % upon how many of their eight possible neighbors are alive.\r\n71              % Index vectors increase or decrease the centered index by one.\r\n72    \r\n73              n = size(X,1);\r\n74              p = [1 1:n-1];\r\n75              q = [2:n n];\r\n76    \r\n77              % Count how many of the eight neighbors are alive.\r\n78    \r\n79              Y = X(:,p) + X(:,q) + X(p,:) + X(q,:) + ...\r\n80                  X(p,p) + X(q,q) + X(p,q) + X(q,p);\r\n81    \r\n82              % A live cell with two live neighbors, or any cell with\r\n83              % three live neigbhors, is alive at the next step.\r\n84    \r\n85              X = (X &amp; (Y == 2)) | (Y == 3);\r\n<\/pre><h4>Infinite Universe<a name=\"d8ab0c1d-aeff-473e-bc9f-ec84af722518\"><\/a><\/h4><p>So how, exactly, does an infinite universe work? The same question is asked by astrophysicists and cosmologists about our own universe. Over the years, I have offered several MATLAB Game of Life programs that have tackled this question in different ways. I finally have a solution that I like.<\/p><p>In all my programs, the population is represented by a <i>sparse matrix<\/i>.  This means that the storage requirement, and the execution time, are proportional to the size of the population, not to the size of some grid.  The sparse matrix readily accommodates a growing population.  There are no boundaries and consequently no boundary conditions.<\/p><p>But how do I <i>display<\/i> an infinite universe?  In the past I've had a window that is a snapshot of the entire population.  But many interesting Life configurations throw off isolated <i>gliders<\/i>. These are five-celled objects that move forever in one direction. (Think of <a href=\"https:\/\/news.nationalgeographic.com\/news\/2013\/13\/130911-voyager-interstellar-solar-system-nasa-science-space\/\">Voyager I<\/a>.) A display window that includes all of the gliders must expand accordingly.  This means the rest of the population, which often remains bounded, is relegated to a shrinking fraction of the window. The solution is to let isolated gliders leave the display window and count them as they go.<\/p><h4>Glider<a name=\"c35edd90-1043-4a65-8431-5a642eea5197\"><\/a><\/h4><p>My first example is a single <i>glider<\/i>. At each step two cells die, and two new ones are born. After four steps the original population reappears, but it has moved diagonally up and across the grid.  It moves in this direction forever, continuing to exist in the infinite universe. This animated gif shows every step for the first eight steps, then captures every fourth step.  When the glider reaches the edge of the window, it is counted and disappears from view.  The clock continues to run, even though there is nothing to see.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/glider.gif\" alt=\"\"> <\/p><h4>Life Lexicon<a name=\"3ce03f78-808e-42e8-b6bd-c369c9f9250a\"><\/a><\/h4><p>My latest program is called <tt>life_lex<\/tt>. The starting populations for <tt>life_lex<\/tt> are obtained from the <a href=\"http:\/\/conwaylife.com\/ref\/lexicon\/lex_home.htm\">Life Lexicon<\/a>, a valuable Web resource cataloging well over a thousand terms related to the Game of Life.  The Lexicon now includes almost seven hundred starting populations.  The supporting community is very active -- many discoveries have been made in the last few years. You can see the entire collection by selecting \"slide show\" in the <tt>life_lex<\/tt> menu.  The show lasts about 11 minutes.<\/p><p>The Lexicon is available in two forms.  The text form is used by <tt>life_lex<\/tt> and is distributed with it as <tt>lexicon.txt<\/tt>. The HTML form, which is extensively cross linked, is available on the Web.  The <tt>lexicon<\/tt> toggle provides the link.<\/p><h4>Herschel<a name=\"3eef67b0-a346-4e8e-ad59-9d6a3e5488f3\"><\/a><\/h4><p>Named after the guy who discovered Uranus in 1781.  As to <i>how<\/i> it came to be named after him, you will have to read the Lexicon. It is one of the most frequent features occurring in larger populations. It starts with a <i>heptomino<\/i>, a population of size 7.  The population grows to over 100 before it reaches a steady state of size 24 at time 128.  It creates two gliders in the process.<\/p><p>Here are the first eight generations and every fourth one after that.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Herschel.gif\" alt=\"\"> <\/p><h4>Fx77<a name=\"6bcbde67-b237-4fe0-a3ee-12943c082a2c\"><\/a><\/h4><p>The story behind the name of this configuration is very technical. \"Fx\" means the signal moves forward and produces a mirror-image output. The \"77\" comes from the fact that a pair of Herschels appear at time 77. Notice that if you cut the window in half horizontally, the two halves have very similar subpopulations. The population count begins at 67 at time zero, reaches a maximum of 294 at time 179, and eventually stabilizes at 104 for time greater than 206.<\/p><p>Fx77 creates seven gliders.  I've been using it to test my glider counting code.  It is a good example of a population that remains bounded in space except for its gliders.  Here is every tenth generation.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/Fx77.gif\" alt=\"\"> <\/p><h4>Soup<a name=\"3d01ea55-200e-4dac-8cbe-de3a5f132a00\"><\/a><\/h4><p>There are many flavors of <i>soup<\/i>.  This example is a massive population that is unbounded and does not produce any gliders.   The Lexicon informs us that it is an unusual mirror-symmetric soup that produces a <i>pufferfish<\/i> and nothing else.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/soup.gif\" alt=\"\"> <\/p><h4><tt>life_lex<\/tt><a name=\"f8ed4bb9-8421-4ffd-90f0-f2e1b3f7fd29\"><\/a><\/h4><p>Here is a screen shot of my latest program, <tt>life_lex<\/tt>. The toggles let you select the display time for a generation -- single step, slow, or fast.  You can page forward or backward through the Lexicon.  You can access this blog post.  You can select from a menu of more than a dozen suggestions, populations that I have found especially interesting.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"http:\/\/blogs.mathworks.com\/cleve\/files\/maths.gif\" alt=\"\"> <\/p><p>Here is the current list in the suggestions menu.  It's subject to change as I come across other goodies.<\/p><pre>         'random'\r\n         'pre-block'\r\n         'blinker'\r\n         'glider'\r\n         'Gosper glider gun'\r\n         'Gabriel''s p138'\r\n         'Snark'\r\n         'spacefiller'\r\n         'Fx77'\r\n         'against the grain'\r\n         'soup'\r\n         'block and glider'\r\n         'lightspeed'\r\n         'volatility'\r\n         'gliders by the dozen'\r\n         'total aperiodic' ....\r\n         'Noah''s ark'\r\n         'slide show'<\/pre><p>I will include <tt>life_lex<\/tt> in a new release, 3.8, of <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/59085-cleve-laboratory\">Cleve's Laboratory<\/a>.<\/p><p>In case you want <tt>life_lex<\/tt> by itself, I will submit it separately to <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/69383-game-of-life\">https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/69383-game-of-life<\/a>. The submission includes a copy of <tt>Lexicon.txt<\/tt>.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_1d759219598c498180a1ab0fae10ad7f() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='1d759219598c498180a1ab0fae10ad7f ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 1d759219598c498180a1ab0fae10ad7f';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2018 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_1d759219598c498180a1ab0fae10ad7f()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2018a<br><\/p><\/div><!--\r\n1d759219598c498180a1ab0fae10ad7f ##### SOURCE BEGIN #####\r\n%% Revisiting the Game of Life\r\n% I am addicted.  I keep coming back to John Conway's Game of Life.\r\n% Years ago, I wrote a chapter about Life in\r\n% <https:\/\/www.mathworks.com\/content\/dam\/mathworks\/mathworks-dot-com\/moler\/exm\/chapters\/life.pdf\r\n% Experiments with MATLAB>.\r\n% I wrote a three-part series about Life shortly after I started blogging.\r\n% <https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/03\/game-of-life-part-1-the-rule\/\r\n% Part 1>, \r\n% <https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/10\/game-of-life-part-2-sparse-matrices\/\r\n% Part 2>,\r\n% <https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/17\/game-of-life-part-3-sampler\/\r\n% Part 3>. \r\n% I have recently made significant enhancements to my MATLAB program\r\n% for Life.  I never seem to finish the code\r\n% because I get diverted by actually using the program to explore the\r\n% Universe.  I invite you to join me.  But, fair warning,\r\n% you might become addicted too.\r\n\r\n%% The Rule\r\n% Recall how the Game of Life works.\r\n% The _universe_ is an infinite, two-dimensional rectangular grid.\r\n% The _population_ is a collection of grid cells that are marked as\r\n% _alive_.  The population evolves at discrete time steps known as\r\n% _generations_.\r\n% At each step, the fate of each cell is determined by the vitality\r\n% of its eight nearest neighbors and this rule:\r\n% \r\n% * A live cell with two live neighbors, or any cell with three\r\n%   live neighbors, is alive at the next step.\r\n% \r\n% The fascination of Life is that this deceptively simple rule leads\r\n% to an incredible variety of patterns, puzzles, and unsolved problems.\r\n\r\n%% Code\r\n% Here is the core of the code.  Sparse indexing makes it look easy.\r\n% The graphics is done by the sparse display program, |spy|.\r\n\r\n   dbtype 69:85 life_lex\r\n   \r\n%% Infinite Universe\r\n% So how, exactly, does an infinite universe work?\r\n% The same question is asked by astrophysicists and cosmologists\r\n% about our own universe.\r\n% Over the years, I have offered several MATLAB Game of Life\r\n% programs that have tackled this question in different ways.\r\n% I finally have a solution that I like.\r\n%\r\n% In all my programs, the population is represented by a _sparse\r\n% matrix_.  This means that the storage requirement, and the execution\r\n% time, are proportional to the size of the population, not to the size\r\n% of some grid.  The sparse matrix readily accommodates a growing\r\n% population.  There are no boundaries and consequently no boundary\r\n% conditions.\r\n%\r\n% But how do I _display_ an infinite universe?  In the past I've had\r\n% a window that is a snapshot of the entire population.  But many\r\n% interesting Life configurations throw off isolated _gliders_.\r\n% These are five-celled objects that move forever in one direction.\r\n% (Think of\r\n% <https:\/\/news.nationalgeographic.com\/news\/2013\/13\/130911-voyager-interstellar-solar-system-nasa-science-space\/\r\n% Voyager I>.)\r\n% A display window that includes all of the gliders must expand\r\n% accordingly.  This means the rest of the population, which often remains\r\n% bounded, is relegated to a shrinking fraction of the window.\r\n% The solution is to let isolated gliders leave the display window\r\n% and count them as they go.\r\n\r\n%% Glider\r\n% My first example is a single _glider_.\r\n% At each step two cells die, and two new ones are born.\r\n% After four steps the original population reappears, but it has moved\r\n% diagonally up and across the grid.  It moves in this direction\r\n% forever, continuing to exist in the infinite universe.\r\n% This animated gif shows every step for the first eight steps,\r\n% then captures every fourth step.  When the glider reaches the edge\r\n% of the window, it is counted and disappears from view.  The clock\r\n% continues to run, even though there is nothing to see.\r\n%\r\n% <<glider.gif>>\r\n%\r\n%% Life Lexicon\r\n% My latest program is called |life_lex|.\r\n% The starting populations for |life_lex| are obtained from the\r\n% <http:\/\/conwaylife.com\/ref\/lexicon\/lex_home.htm Life Lexicon>,\r\n% a valuable Web resource cataloging well over a thousand terms related\r\n% to the Game of Life.  The Lexicon now includes almost seven hundred \r\n% starting populations.  The supporting community is\r\n% very active REPLACE_WITH_DASH_DASH many discoveries have been made in the last few years.\r\n% You can see the entire collection by selecting \"slide show\" in the\r\n% |life_lex| menu.  The show lasts about 11 minutes.\r\n%\r\n% The Lexicon is available in two forms.  The text form is used by\r\n% |life_lex| and is distributed with it as |lexicon.txt|.\r\n% The HTML form, which is extensively cross linked, is available on\r\n% the Web.  The |lexicon| toggle provides the link.\r\n\r\n%% Herschel\r\n% Named after the guy who discovered Uranus in 1781.  As to _how_ it\r\n% came to be named after him, you will have to read the Lexicon.\r\n% It is one of the most frequent features occurring in larger populations.\r\n% It starts with a _heptomino_, a population of size 7.  The population\r\n% grows to over 100 before it reaches a steady state of size 24 at \r\n% time 128.  It creates two gliders in the process.\r\n%\r\n% Here are the first eight generations and every fourth one after that.\r\n%\r\n% <<Herschel.gif>>\r\n%\r\n\r\n%% Fx77\r\n% The story behind the name of this configuration is very technical.\r\n% \"Fx\" means the signal moves forward and produces a mirror-image output.\r\n% The \"77\" comes from the fact that a pair of Herschels appear at time 77.\r\n% Notice that if you cut the window in half horizontally, the two\r\n% halves have very similar subpopulations.\r\n% The population count begins at 67 at time zero, reaches a maximum of\r\n% 294 at time 179, and eventually stabilizes at 104 for time greater than\r\n% 206.  \r\n%\r\n% Fx77 creates seven gliders.  I've been using it to test my glider counting\r\n% code.  It is a good example of a population that remains bounded in\r\n% space except for its gliders.  Here is every tenth generation.\r\n%\r\n% <<Fx77.gif>>\r\n\r\n%% Soup\r\n% There are many flavors of _soup_.  This\r\n% example is a massive population that is unbounded and does not produce\r\n% any gliders.   The Lexicon informs us that it is an unusual\r\n% mirror-symmetric soup that produces a _pufferfish_ and nothing else.\r\n%\r\n% <<soup.gif>>\r\n%\r\n\r\n%% |life_lex|\r\n% Here is a screen shot of my latest program, |life_lex|.\r\n% The toggles let you select the display time for a generation REPLACE_WITH_DASH_DASH\r\n% single step, slow, or fast.  You can page forward or backward through\r\n% the Lexicon.  You can access this blog post.  You can select from a\r\n% menu of more than a dozen suggestions, populations that I have found\r\n% especially interesting.\r\n%\r\n% <<maths.gif>>\r\n%\r\n\r\n%%\r\n% Here is the current list in the suggestions menu.  It's subject to change\r\n% as I come across other goodies.\r\n%\r\n%           'random'\r\n%           'pre-block'\r\n%           'blinker'\r\n%           'glider'\r\n%           'Gosper glider gun'\r\n%           'Gabriel''s p138'\r\n%           'Snark'\r\n%           'spacefiller'\r\n%           'Fx77'\r\n%           'against the grain'\r\n%           'soup'\r\n%           'block and glider'\r\n%           'lightspeed'\r\n%           'volatility'\r\n%           'gliders by the dozen'\r\n%           'total aperiodic' ....\r\n%           'Noah''s ark'\r\n%           'slide show'\r\n        \r\n%%\r\n% I will include |life_lex| in a new release, 3.8, of\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/59085-cleve-laboratory\r\n% Cleve's Laboratory>.\r\n%\r\n% In case you want |life_lex| by itself,\r\n% I will submit it separately to\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/69383-game-of-life>.\r\n% The submission includes a copy of\r\n% |Lexicon.txt|.  \r\n##### SOURCE END ##### 1d759219598c498180a1ab0fae10ad7f\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/icon.gif\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--introduction--><p>I am addicted.  I keep coming back to John Conway's Game of Life. Years ago, I wrote a chapter about Life in <a href=\"https:\/\/www.mathworks.com\/content\/dam\/mathworks\/mathworks-dot-com\/moler\/exm\/chapters\/life.pdf\">Experiments with MATLAB<\/a>. I wrote a three-part series about Life shortly after I started blogging. <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/03\/game-of-life-part-1-the-rule\/\">Part 1<\/a>, <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/10\/game-of-life-part-2-sparse-matrices\/\">Part 2<\/a>, <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/17\/game-of-life-part-3-sampler\/\">Part 3<\/a>. I have recently made significant enhancements to my MATLAB program for Life.  I never seem to finish the code because I get diverted by actually using the program to explore the Universe.  I invite you to join me.  But, fair warning, you might become addicted too.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2018\/11\/08\/revisiting-the-game-of-life\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":4122,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,4],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/4100"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=4100"}],"version-history":[{"count":6,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/4100\/revisions"}],"predecessor-version":[{"id":4124,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/4100\/revisions\/4124"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/4122"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=4100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=4100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=4100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}