Macr055で4クイーン

カレンダーは面倒そうな割にマクロ内で完結しなくてあまり面白くなさそうだったので、その次の http://parametron.blogspot.jp/2015/04/4.html 4クイーンから。

{m55_define|1+|`{1|2|3|4|5|6|7|8|9|10|
  {m55_define|1|$$$1}}'}{m55_dnl}
{m55_define|1-|`{-1|0|1|2|3|4|5|6|7|8|
  {m55_define|-1|$$$1}}'}{m55_dnl}
{m55_define|-|`{$2|
  {m55_define|$2|`{-|{1-|$1}|{1-|$2}}'}
  {m55_define|0|$1}}'}{m55_dnl}
{m55_define|lt|`{$1|
  {m55_define|$1|`{p|$1|$2|
    {m55_define|p|`{lt|{1-|$1}|$2}'}}'}
  {m55_define|-1|t}
  {m55_define|$2|f}}'}{m55_dnl}
{m55_define|or|`{$1|
  {m55_define|$1|t}
  {m55_define|f|$2}}'}{m55_dnl}
{m55_define|?|`{{lt|$1|$2}|
  {m55_define|t|`{{-|$2|$1}|
    {m55_define|{-|$2|$1}|f}
    {m55_define|$3|t}}'}
  {m55_define|f|`{{-|$1|$2}|
    {m55_define|{-|$1|$2}|f}
    {m55_define|$3|t}}'}}'}{m55_dnl}
{m55_define|q4|$1 $2 $3 $4
}{m55_dnl}
{m55_define|q3|`{z|0|$1|$2|$3|$4}'}{m55_dnl}
{m55_define|z|`{$1|
  {m55_define|$1|`{{or|{?|$2|$1|0}|{or|{?|$2|$1|3}|{or|{?|$3|$1|0}|{or|{?|$3|$1|2}|{or|{?|$4|$1|0}|{?|$4|$1|1}}}}}}|
    {m55_define|f|`{q4|$2|$3|$4|$1|$5}{z|{1+|$1}|$2|$3|$4|$5}'}
    {m55_define|t|`{z|{1+|$1}|$2|$3|$4|$5}'}}'}
  {m55_define|$5|}}'}{m55_dnl}
{m55_define|q2|`{y|0|$1|$2|$3}'}{m55_dnl}
{m55_define|y|`{$1|
  {m55_define|$1|`{{or|{?|$2|$1|0}|{or|{?|$2|$1|2}|{or|{?|$3|$1|0}|{?|$3|$1|1}}}}|
    {m55_define|f|`{q3|$2|$3|$1|$4}{y|{1+|$1}|$2|$3|$4}'}
    {m55_define|t|`{y|{1+|$1}|$2|$3|$4}'}}'}
  {m55_define|$4|}}'}{m55_dnl}
{m55_define|q1|`{x|0|$1|$2}'}{m55_dnl}
{m55_define|x|`{$1|
  {m55_define|$1|`{{or|{?|$2|$1|0}|{?|$2|$1|1}}|
    {m55_define|f|`{q2|$2|$1|$3}{x|{1+|$1}|$2|$3}'}
    {m55_define|t|`{x|{1+|$1}|$2|$3}'}}'}
  {m55_define|$3|}}'}{m55_dnl}
{m55_define|q0|`{w|0|$1}'}{m55_dnl}
{m55_define|w|`{$1|
  {m55_define|$1|`{q1|$1|$2}{w|{1+|$1}|$2}'}
  {m55_define|$2|}}'}{m55_dnl}
{q0|4}{m55_dnl}

例によってローカルな再帰ができないため、そのへんの書き方が違っている。