{"id":301,"date":"2012-09-03T12:20:03","date_gmt":"2012-09-03T17:20:03","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=301"},"modified":"2016-12-05T13:52:27","modified_gmt":"2016-12-05T18:52:27","slug":"game-of-life-part-1-the-rule","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/03\/game-of-life-part-1-the-rule\/","title":{"rendered":"Game of Life, Part 1, The Rule"},"content":{"rendered":"&nbsp;\r\n<div class=\"content\"><!--introduction-->This is part one of a series of posts about John Conway's Game of Life. One deceptively simple rule leads to an incredible variety of patterns, puzzles, and unsolved mathematical problems, and a beautiful use of MATLAB sparse matrices.\r\n\r\n<!--\/introduction-->\r\n<h3>Contents<\/h3>\r\n<div>\r\n<ul>\r\n \t<li><a href=\"#0d6a532c-ba27-4a3f-82c9-5cddb504426e\">The Rule<\/a><\/li>\r\n \t<li><a href=\"#b6560716-9550-4d82-ae08-25faa571b44b\">Block<\/a><\/li>\r\n \t<li><a href=\"#285ad4d1-ec49-4911-8fba-b81602a61a29\">Blinker<\/a><\/li>\r\n \t<li><a href=\"#57bd4c26-9ab3-4152-9669-52eaff22a730\">Glider<\/a><\/li>\r\n \t<li><a href=\"#05c82b76-dca9-4aea-a4e8-019fe75e74ba\">Infinite Universe<\/a><\/li>\r\n \t<li><a href=\"#d7e0a611-d2e5-47c1-befc-cc813f604896\">Full Screen Video Playback<\/a><\/li>\r\n \t<li><a href=\"#6c508bf8-6c1d-490e-a9a0-e5c63690c20d\">Glider Gun<\/a><\/li>\r\n \t<li><a href=\"#a7423764-6d61-4918-b126-c9a4aa720a91\">Noah's Ark<\/a><\/li>\r\n<\/ul>\r\n<\/div>\r\n<h4>The Rule<a name=\"0d6a532c-ba27-4a3f-82c9-5cddb504426e\"><\/a><\/h4>\r\nThe \"Game of Life\" was invented by John Horton Conway, a British-born mathematician who is now a professor at Princeton. The game made its public debut in the October 1970 issue of <i>Scientific American<\/i>, in the <i>Mathematical Games<\/i> column written by Martin Gardner. At the time, Gardner wrote\r\n<p style=\"margin-left: 3ex;\">This month we consider Conway's latest brainchild, a fantastic solitaire\r\npastime he calls \"life\". Because of its analogies with the rise, fall\r\nand alternations of a society of living organisms, it belongs to a growing\r\nclass of what are called \"simulation games\"--games that resemble real-life\r\nprocesses. To play life you must have a fairly large checkerboard and a\r\nplentiful supply of flat counters of two colors.<\/p>\r\nToday Conway's creation is known as a <i>cellular automaton<\/i> and we can run the simulations on our computers instead of checkerboards.\r\n\r\nThe <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:\r\n<div>\r\n<ul>\r\n \t<li>A live cell with two live neighbors, or any cell with three live neighbors, is alive at the next step.<\/li>\r\n<\/ul>\r\n<\/div>\r\nThe fascination of Conway's Game of Life is that this deceptively simple rule leads to an incredible variety of patterns, puzzles, and unsolved mathematical problems -- just like real life.\r\n<h4>Block<a name=\"b6560716-9550-4d82-ae08-25faa571b44b\"><\/a><\/h4>\r\nIf the initial population consists of three live cells then, because of rotational and reflexive symmetries, there are only two different possibilities; the population is either L-shaped or I-shaped.\r\n\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/cleve\/block_movie.gif\" alt=\"\" hspace=\"5\" vspace=\"5\" \/>\r\n\r\nOur first population starts with live cells in an L-shape. All three cells have two live neighbors, so they survive. The dead cell that they all touch has three live neighbors, so it springs to life. None of the other dead cells have enough live neighbors to come to life. So the result, after one step, is the stationary four-cell population known as the <i>block<\/i>. Each of the live cells has three live neighbors and so lives on. None of the other cells can come to life. The four-cell block lives forever.\r\n<h4>Blinker<a name=\"285ad4d1-ec49-4911-8fba-b81602a61a29\"><\/a><\/h4>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/cleve\/blinker_movie.gif\" alt=\"\" hspace=\"5\" vspace=\"5\" \/>\r\n\r\nThe other three-cell initial population is I-shaped. The two possible orientations are shown in the two steps of the blinker. At each step, two end cells die, the middle cell stays alive, and two new cells are born to give the orientation shown in the other step. If nothing disturbs it, this three-cell <i>blinker<\/i> keeps blinking forever. It repeats itself in two steps; this is known as its <i>period<\/i>.\r\n<h4>Glider<a name=\"57bd4c26-9ab3-4152-9669-52eaff22a730\"><\/a><\/h4>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/cleve\/glider_movie.gif\" alt=\"\" hspace=\"5\" vspace=\"5\" \/>\r\n\r\nFour steps in the evolution of one of the most interesting five-cell initial populations, the <i>glider<\/i>, are shown here. At each step two cells die and two new ones are born. After four steps the original population reappears, but it has moved diagonally down and across the grid. It moves in this direction forever, continuing to exist in the infinite universe.\r\n<h4>Infinite Universe<a name=\"05c82b76-dca9-4aea-a4e8-019fe75e74ba\"><\/a><\/h4>\r\nSo how, exactly, does an infinite universe work? The same question is being asked by astrophysicists and cosmologists about our own universe. Over the years, I have offered three different MATLAB Game of Life programs that have tackled this question three different ways.\r\n\r\nThe MATLAB <tt>\/toolbox\/matlab\/demos\/<\/tt> directory contains a program <tt>life<\/tt> that Ned Gulley and I wrote 20 years ago. This program uses toroidal boundary conditions and random starting populations. These are easy to implement, but I have to say now that they do not provide particularly satisfactory Game of Life simulations. With toroidal boundary conditions cells that reach an edge on one side reenter the universe on the opposite side. So the universe isn't really infinite. And the random starting populations are unlikely to generate the rich configurations that make Life so interesting.\r\n\r\nA few years ago, I published the book <a href=\"https:\/\/www.mathworks.com\/moler\/exm\"><i>Experiments with MATLAB<\/i><\/a> that includes a chapter on Game of Life and a program <a href=\"https:\/\/www.mathworks.com\/content\/dam\/mathworks\/mathworks-dot-com\/moler\/exm\/exm\/lifex.m\"> <tt>lifex<\/tt><\/a>. The program reallocates storage in the sparse data structure as necessary to accommodate expanding populations and thereby simulates an infinite universe. The viewing window remains finite, so the outer portions of the expanding populating leave the field of view.\r\n\r\nThe starting populations for <tt>lifex<\/tt> are obtained from the Life Lexicon, a valuable resource cataloging several hundred terms related to the Game of Life. Life Lexicon includes over four hundred interesting starting populations. You can also visit a <a href=\"http:\/\/www.bitstorm.org\/gameoflife\/lexicon\/\">graphic version<\/a> of the Lexicon.\r\n\r\nMy latest program, which I am describing in this and later posts of this blog, uses the same dynamic storage allocation as <tt>lifex<\/tt>. But it features an expanding viewing window, so the entire population is always in sight. The individual cells get smaller as the view point recedes. The program also accesses Life Lexicon, so I've named it <tt>life_lex<\/tt>. It is now available from the MATLAB Central File Exchange; see the submission <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/37959-game-of-life\">Game of Life<\/a>.\r\n\r\nThe static screen shot and the movies in this post are from <tt>life_lex<\/tt>.\r\n<h4>Full Screen Video Playback<a name=\"d7e0a611-d2e5-47c1-befc-cc813f604896\"><\/a><\/h4>\r\nI had hoped to capture the output from <tt>life_lex<\/tt> in such a way that you could play it back at a reasonable resolution and frame rate. But that involves video codecs and YouTube intellectual property agreements and all kinds of other stuff that I did not want to get involved in for this week's blog. Maybe later.\r\n\r\nIt is easy to insert half a dozen lines of code into a MATLAB program to produce animated GIF files -- an ancient technology that is good enough for our purposes today. But it is not practical to capture every step. The resulting .gif files are too large and the playback is too slow. However the following two examples show it is possible to produce acceptable movies by not recording every frame.\r\n<h4>Glider Gun<a name=\"6c508bf8-6c1d-490e-a9a0-e5c63690c20d\"><\/a><\/h4>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/cleve\/glider_gun_2.png\" alt=\"\" hspace=\"5\" vspace=\"5\" \/>\r\n\r\nBill Gosper developed his <i>Glider Gun<\/i> at MIT in 1970. The portion of the population between the two static blocks oscillates back and forth. Every 30 steps, a glider emerges. The result is an infinite stream of gliders that fly off into the expanding universe. This was the first example discovered of a finite starting population whose growth is unbounded.\r\n\r\nHere is a movie, <a href=\"https:\/\/blogs.mathworks.com\/images\/cleve\/gosper_movie.gif\">Gosper Glider Gun Movie<\/a>, that captures every fifth step for 140 steps. The first glider just reaches the edge of the frame and <tt>life_lex<\/tt> is about the resize its view when I stop the recording. You will have to download the code and run it yourself to see how the resizing works.\r\n<h4>Noah's Ark<a name=\"a7423764-6d61-4918-b126-c9a4aa720a91\"><\/a><\/h4>\r\nI think this is an amazing evolution. The Lexicon says\r\n<p style=\"margin-left: 3ex;\">The name comes from the variety of objects it leaves behind: blocks,\r\nblinkers, beehives, loaves, gliders, ships, boats, long boats,\r\nbeacons and block on tables.<\/p>\r\nWe've learned about a few of these things -- blocks, blinkers, and gliders. But what are the others? Welcome to the world of the Game of Life.\r\n\r\nFor this movie I've captured every 50th step of 2000 steps. You can see why the expanding universe and the <tt>life_lex<\/tt> resizing are necessary, <a href=\"https:\/\/blogs.mathworks.com\/images\/cleve\/noahs_ark_movie.gif\">Noah's Ark Movie<\/a>.\r\n\r\n<script>\/\/ <![CDATA[\r\nfunction grabCode_d9ba564d2c184dc581e9192c3a13b551() {\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='d9ba564d2c184dc581e9192c3a13b551 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' d9ba564d2c184dc581e9192c3a13b551';\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 2012 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('\r\n\r\n<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>\r\n\r\n\r\n\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }\r\n\/\/ ]]><\/script>\r\n<p style=\"text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;\">\r\n<a><span style=\"font-size: x-small; font-style: italic;\">Get\r\nthe MATLAB code<noscript>(requires JavaScript)<\/noscript><\/span><\/a>\r\n\r\nPublished with MATLAB\u00ae 7.14<\/p>\r\n<p class=\"footer\">\r\nPublished with MATLAB\u00ae 7.14<\/p>\r\n\r\n<\/div>\r\n<!--\r\nd9ba564d2c184dc581e9192c3a13b551 ##### SOURCE BEGIN #####\r\n%% Game of Life, Part 1, The Rule\r\n% This is part one of a series of posts about John Conway's Game of Life.\r\n% One deceptively simple rule leads to an incredible variety of patterns,\r\n% puzzles, and unsolved mathematical problems, and a beautiful use of\r\n% MATLAB sparse matrices.\r\n\r\n%% The Rule\r\n% The \"Game of Life\" was invented by John Horton Conway, a British-born\r\n% mathematician who is now a professor at Princeton.\r\n% The game made its public debut in the October 1970 issue of\r\n% _Scientific American_, in the _Mathematical Games_ column\r\n% written by Martin Gardner.  At the time, Gardner wrote\r\n%\r\n% <html>\r\n%\r\n<p style=\"margin-left:3ex;\">\r\n% This month we consider Conway's latest brainchild, a fantastic solitaire\r\n% pastime he calls \"life\".  Because of its analogies with the rise, fall\r\n% and alternations of a society of living organisms, it belongs to a growing\r\n% class of what are called \"simulation games\"REPLACE_WITH_DASH_DASHgames that resemble real-life\r\n% processes.  To play life you must have a fairly large checkerboard and a\r\n% plentiful supply of flat counters of two colors.\r\n%\r\n\r\n% <\/html>\r\n%\r\n% Today Conway's creation is known as a _cellular automaton_ and we can\r\n% run the simulations on our computers instead of checkerboards.\r\n%\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 Conway's Game of Life is that this deceptively simple\r\n% rule leads to an incredible variety of patterns, puzzles, and unsolved\r\n% mathematical problems REPLACE_WITH_DASH_DASH just like real life.\r\n%\r\n\r\n%% Block\r\n% If the initial population consists of three live cells then,\r\n% because of rotational and reflexive symmetries, there are only two different\r\n% possibilities; the population is either L-shaped or I-shaped.\r\n%\r\n%%\r\n%\r\n% <<block_movie.gif>>\r\n%\r\n% Our first population starts with live cells in an L-shape.\r\n% All three cells have two live neighbors, so they survive.\r\n% The dead cell that they all touch has three live neighbors,\r\n% so it springs to life.\r\n% None of the other dead cells have enough live neighbors to come to life.\r\n% So the result, after one step, is the stationary four-cell population\r\n% known as the _block_.\r\n% Each of the live cells has three live neighbors and so lives on.\r\n% None of the other cells can come to life.\r\n% The four-cell block lives forever.\r\n\r\n%% Blinker\r\n%\r\n% <<blinker_movie.gif>>\r\n%\r\n% The other three-cell initial population is I-shaped.\r\n% The two possible orientations are shown in the two steps of the blinker.\r\n% At each step, two end cells die, the middle cell stays alive,\r\n% and two new cells are born to give the orientation shown in the other step.\r\n% If nothing disturbs it, this three-cell _blinker_ keeps blinking\r\n% forever.  It repeats itself in two steps; this is known as its _period_.\r\n\r\n%% Glider\r\n%\r\n% <<glider_movie.gif>>\r\n%\r\n% Four steps in the evolution of one of the most interesting five-cell\r\n% initial populations, the _glider_, are shown here.\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 down and across the grid.  It moves in this direction\r\n% forever, continuing to exist in the infinite universe.\r\n\r\n%% Infinite Universe\r\n% So how, exactly, does an infinite universe work?\r\n% The same question is being asked by astrophysicists and cosmologists about\r\n% our own universe.\r\n% Over the years, I have offered three different MATLAB Game of Life programs\r\n% that have tackled this question three different ways.\r\n\r\n%%\r\n% The MATLAB |\/toolbox\/matlab\/demos\/| directory contains a program |life|\r\n% that Ned Gulley and I wrote 20 years ago.  This program uses\r\n% toroidal boundary conditions and random starting populations.\r\n% These are easy to implement, but I have to say now that they do not\r\n% provide particularly satisfactory Game of Life simulations.\r\n% With toroidal boundary conditions cells that reach an edge on\r\n% one side reenter the universe on the opposite side.  So the universe\r\n% isn't really infinite.\r\n% And the random starting populations are unlikely to generate the rich\r\n% configurations that make Life so interesting.\r\n\r\n%%\r\n% A few years ago, I published the book\r\n% <https:\/\/www.mathworks.com\/moler\/exm _Experiments with MATLAB_>\r\n% that includes a chapter on Game of Life and a program\r\n% <https:\/\/www.mathworks.com\/moler\/exm\/exm\/lifex.m |lifex|>.\r\n% The program reallocates storage in the sparse data structure as necessary\r\n% to accommodate expanding populations and thereby simulates an\r\n% infinite universe.  The viewing window remains finite, so the\r\n% outer portions of the expanding populating leave the field of view.\r\n\r\n%%\r\n% The starting populations for |lifex| are obtained from the\r\n% <http:\/\/www.argentum.freeserve.co.uk\/lex_home.htm Life Lexicon>,\r\n% a valuable Web resource cataloging several hundred terms related to\r\n% the Game of Life.  Life Lexicon includes over four hundred interesting\r\n% starting populations.  You can also visit a\r\n% <http:\/\/www.bitstorm.org\/gameoflife\/lexicon\/ graphic version>\r\n% of the Lexicon.\r\n\r\n%%\r\n% My latest program, which I am describing in this and later posts of\r\n% this blog, uses the same dynamic storage allocation as |lifex|.\r\n% But it features an expanding viewing window, so the entire population\r\n% is always in sight.  The individual cells get smaller as the view point\r\n% recedes.  The program also accesses Life Lexicon, so I've named it\r\n% |life_lex|.\r\n% It is now available from the MATLAB Central File Exchange; see the submission\r\n% <https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/37959-game-of-life % Game of Life>.\r\n\r\n%%\r\n% The static screen shot and the movies in this post are from |life_lex|.\r\n\r\n%% Full Screen Video Playback\r\n% I had hoped to capture the output from |life_lex| in such a way that you\r\n% could play it back at a reasonable resolution and frame rate.\r\n% But that involves video codecs and YouTube intellectual property agreements\r\n% and all kinds of other stuff that I did not want to get involved in for\r\n% this week's blog.  Maybe later.\r\n\r\n%%\r\n% It is easy to insert half a dozen lines of code into a MATLAB program\r\n% to produce animated GIF files REPLACE_WITH_DASH_DASH an ancient technology that is good\r\n% enough for our purposes today.  But it is not practical to capture every\r\n% step. The resulting .gif files are too large and the playback is too slow.\r\n% However the following two examples show it is possible to produce\r\n% acceptable movies by not recording every frame.\r\n\r\n%% Glider Gun\r\n%\r\n% <<glider_gun_2.png>>\r\n%\r\n% Bill Gosper developed his _Glider Gun_ at MIT in 1970.\r\n% The portion of the population between the two static blocks oscillates\r\n% back and forth.  Every 30 steps, a glider emerges.\r\n% The result is an infinite stream of gliders that fly off into the\r\n% expanding universe.\r\n% This was the first example discovered of a finite starting population\r\n% whose growth is unbounded.\r\n%\r\n%%\r\n% Here is a movie,\r\n% <https:\/\/blogs.mathworks.com\/images\/cleve\/gosper_movie.gif % Gosper Glider Gun Movie>,\r\n% that captures every fifth step for 140 steps.  The first glider just\r\n% reaches the edge of the frame and |life_lex| is about the resize its view\r\n% when I stop the recording.  You will have to download the code and run it\r\n% yourself to see how the resizing works.\r\n\r\n%% Noah's Ark\r\n% I think this is an amazing evolution.  The Lexicon says\r\n%\r\n% <html>\r\n%\r\n<p style=\"margin-left:3ex;\">\r\n% The name comes from the variety of objects it leaves behind: blocks,\r\n% blinkers, beehives, loaves, gliders, ships, boats, long boats,\r\n% beacons and block on tables.\r\n%\r\n\r\n% <\/html>\r\n%\r\n% We've learned about a few of these things REPLACE_WITH_DASH_DASH blocks, blinkers, and gliders.\r\n% But what are the others?  Welcome to the world of the Game of Life.\r\n\r\n%%\r\n% For this movie I've captured every 50th step of 2000 steps.  You can see\r\n% why the expanding universe and the |life_lex| resizing are necessary,\r\n% <https:\/\/blogs.mathworks.com\/images\/cleve\/noahs_ark_movie.gif % Noah's Ark Movie>.\r\n\r\n##### SOURCE END ##### d9ba564d2c184dc581e9192c3a13b551\r\n-->","protected":false},"excerpt":{"rendered":"<!--introduction-->This is part one of a series of posts about John Conway's Game of Life. One deceptively simple rule leads to an incredible variety of patterns, puzzles, and unsolved mathematical problems, and a beautiful use of MATLAB sparse matrices.\r\n\r\n<!--\/introduction-->... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2012\/09\/03\/game-of-life-part-1-the-rule\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/301"}],"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=301"}],"version-history":[{"count":9,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/301\/revisions"}],"predecessor-version":[{"id":2175,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/301\/revisions\/2175"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}