algol<
begin
   comment

   https://projecteuler.net/problem=61

   Answer:  28684
   Time:    8030.38s = 2h 13m 50.38s
   Time:        Classic:        7893.65s
   Time:        Turbo:          6974.42s

   No buffer, no index check:

   Time classic:        7938.42
   Time turbo:          7036.65 11.4pct

   Buffer, no index check:

   Time classic:        6655.42
   Time turbo:          6091.44 8.5pct

   No buffer, index check:

   Time classic:        7893.65
   Time turbo:          7045.71 10.7pct

   Buffer, index check:

   Time classic:        8032.21
   Time turbo:          7153.58 10.9pct

   PERM code taken from APL/360 ADVANCEDEX PERM function.

   ;
   real clock;
   real procedure clock count;
   code clock count;
   1, 37;
     zl        , grf p−1   ; RF ≔ clock count; stack[p−1] ≔ RF;
   e;
   integer procedure triangle(n);
   value n;
   integer n;
   begin
      integer n2;
      n2 ≔ −0.5+sqrt(0.25+2×n);
      triangle ≔ if (n2×(n2+1)÷2)=n then n2 else 0
   end;
   integer procedure square(n);
   value n;
   integer n;
   begin
      integer n2;
      n2 ≔ sqrt(n);
      square ≔  if n2×n2=n then n2 else 0
   end square;
   integer procedure pentagonal(n);
   value n;
   integer n;
   begin
      integer n2;
      n2 ≔ (0.5+sqrt(0.25+6×n))/3;
      pentagonal ≔ if (n2×(3×n2−1)÷2)=n then n2 else 0
   end;
   integer procedure hexagonal(n);
   value n;
   integer n;
   begin
      integer n2;
      n2 ≔  (1+sqrt(1+8×n))/4;
      hexagonal ≔  if n2×(2×n2−1)=n then n2 else 0
   end hexagonal;
   integer procedure heptagonal(n);
   value n;
   integer n;
   begin
      integer n2;
      n2 ≔  (1.5+sqrt(2.25+10×n))/5;
      heptagonal ≔  if n2×(5×n2−3)÷2=n then n2 else 0
   end heptagonal;
   integer procedure octagonal(n);
   value n;
   integer n;
   begin
      integer n2;
      n2 ≔  (2+sqrt(4+12×n))/6;
      octagonal ≔  if n2×(3×n2−2)=n then n2 else 0
   end octagonal;
   procedure PERM(Z,a,b);
   value a,b;
   integer a,b;
   integer array Z;
   begin
      integer i,j,rem;
      rem ≔ b−1;
      for i ≔ 1 step 1 until a do
      begin
         Z[a−i+1] ≔ 1+rem mod i;
         rem ≔ rem÷i
      end;
      for i ≔ a−1 step −1 until 1 do
      for j ≔ i+1 step 1 until a do
      if Z[i]⩽Z[j] then Z[j] ≔ Z[j]+1
   end PERM;
   integer array list,Z[1:6];
   integer i,j;
   integer aa,bb,cc,dd,ee,ff,
      aabb,bbcc,ccdd,ddee,eeff,ffaa;
   clock count;
   for aa ≔ 10 step 1 until 99 do
   begin
   for bb ≔ 10 step 1 until 99 do
   begin
   if aa=bb then goto notbb;
   list[1] ≔ aabb ≔ aa×100+bb;
   if octagonal(aabb)=0 then goto notbb;
   for cc ≔ 10 step 1 until 99 do
   begin
   if aa=cc then goto notcc;
   if bb=cc then goto notcc;
   list[2] ≔ bbcc ≔ bb×100+cc;
   if heptagonal(bbcc)=0 ∧
         hexagonal(bbcc)=0 ∧
         pentagonal(bbcc)=0 ∧
         square(bbcc)=0 ∧
         triangle(bbcc)=0 then goto notcc;
   for dd ≔ 10 step 1 until 99 do
   begin
      if aa=dd then goto notdd;
      if bb=dd then goto notdd;
      if cc=dd then goto notdd;
      list[3] ≔ ccdd ≔ cc×100+dd;
   if heptagonal(ccdd)=0 ∧
         hexagonal(ccdd)=0 ∧
         pentagonal(ccdd)=0 ∧
         square(ccdd)=0 ∧
         triangle(ccdd)=0 then goto notdd;
   for ee ≔ 10 step 1 until 99 do
   begin
      if aa=ee then goto notee;
      if bb=ee then goto notee;
      if cc=ee then goto notee;
      if dd=ee then goto notee;
      list[4] ≔ ddee ≔ dd×100+ee;
   if heptagonal(ddee)=0 ∧
         hexagonal(ddee)=0 ∧
         pentagonal(ddee)=0 ∧
         square(ddee)=0 ∧
         triangle(ddee)=0 then goto notee;
   for ff ≔ 10 step 1 until 99 do
   begin
      if aa=ff then goto notff;
      if bb=ff then goto notff;
      if cc=ff then goto notff;
      if dd=ff then goto notff;
      if ee=ff then goto notff;
      list[5] ≔ eeff ≔ ee×100+ff;
   if heptagonal(eeff)=0 ∧
         hexagonal(eeff)=0 ∧
         pentagonal(eeff)=0 ∧
         square(eeff)=0 ∧
         triangle(eeff)=0 then goto notff;
      list[6] ≔ ffaa ≔ ff×100+aa;
   if heptagonal(ffaa)=0 ∧
         hexagonal(ffaa)=0 ∧
         pentagonal(ffaa)=0 ∧
         square(ffaa)=0 ∧
         triangle(ffaa)=0 then goto notff;
         for i ≔ 1 step 1 until 720 do
         begin
   PERM(Z,6,i);
         if triangle(list[Z[1]])=0 then goto notperm;
         if square(list[Z[2]])=0 then goto notperm;
         if pentagonal(list[Z[3]])=0 then goto notperm;
         if hexagonal(list[Z[4]])=0 then goto notperm;
         if heptagonal(list[Z[5]])=0 then goto notperm;
         if octagonal(list[Z[6]])=0 then goto notperm;
         writecr;
         write(«dddddd»,aabb,bbcc,ccdd,ddee,eeff,ffaa,
                          aabb+bbcc+ccdd+ddee+eeff+ffaa);
notperm: end for i;
notff: end ff;
notee: end ee;
notdd: end dd;
notcc: end cc;
notbb: end bb;
 end aa;
   clock ≔ clock count;
   writecr;
   write(«dddddddd.dd»,clock)
end;
t<