How to resolve the algorithm 4-rings or 4-squares puzzle step by step in the FutureBasic programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm 4-rings or 4-squares puzzle step by step in the FutureBasic programming language

Table of Contents

Problem Statement

Replace       a, b, c, d, e, f,   and   g       with the decimal digits   LOW   ───►   HIGH such that the sum of the letters inside of each of the four large squares add up to the same sum. Show all output here.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm 4-rings or 4-squares puzzle step by step in the FutureBasic programming language

Source code in the futurebasic programming language

local fn FourRings( low as long, high as long, unique as BOOL, show as BOOL )
  long          a, b, c, d, e, f, g
  unsigned long t, total = 0
  unsigned long l = len$( str$(high) )
  
  if l < len$( str$(low) ) then l = len$( str$( low) )
  
  if ( show == YES )
    for a = 97 to 103
      print space$(l); chr$(a);
    next
    print
    print " "; string$( ( l + 1 ) * 7, "-" );
    print
  end if
  
  for a = low to high
    for b = low to high
      if ( unique == YES )
        if b == a then continue
      end if
      t = a + b
      for c = low to high
        if unique == YES
          if c == a or c == b then continue
        end if
        for d = low to high
          if unique == YES
            if d == a or d == b or d == c then continue
          end if
          if b + c + d == t
            for e = low to high
              if unique == YES
                if e == a or e == b or e == c or e == d then continue
              end if
              for f = low to high
                if unique == YES
                  if f == a or f == b or f == c or f == d or f == e then continue
                end if
                if ( d + e + f == t )
                  for g = low to high
                    if unique == YES
                      if g == a or g == b or g == c or g == d or g == e or g == f then continue
                    end if
                    if ( f + g == t )
                      total += 1
                      if( show == YES )
                        printf @"%3d%3d%3d%3d%3d%3d%3d", a, b, c, d, e, f, g
                      end if
                    end if
                  next
                end if
              next
            next
          end if
        next
      next
    next
  next
  
  if ( unique == YES )
    print
    print total; " unique solutions for"; str$(low); " to"; str$(high)
    print string$(30, "-") : print
  else
    print total; " non-unique solutions for"; str$(low); " to"; str$(high)
    print string$(36, "-") : print
  end if
end fn

window 1, @"4 Rings", ( 0, 0, 350, 400 )

fn FourRings( 1, 7, YES, YES )
fn FourRings( 3, 9, YES, YES )
fn FourRings( 0, 9,  NO,  NO )

HandleEvents

local fn FourRings( low as long, high as long, unique as BOOL, show as BOOL )
  long a, b, c, d, e, f, g
  long t, total = 0
  long l = len(str(high))
  
  if ( l < len(str(low)) ) then l = len(str(low))
  
  if ( show )
    for a = 97 to 103
      print space(l);fn StringWithCharacters( @a, 1 );
    next
    
    print
    print @" ";fn StringByPaddingToLength( @"", ( l + 1 ) * 7, @"-", 0 )
  end if
  
  for a = low to high
    for b = low to high
      if ( unique )
        if ( b == a ) then continue
      end if
      t = a + b
      for c = low to high
        if ( unique )
          if ( c == a or c == b ) then continue
        end if
        for d = low to high
          if ( unique )
            if ( d == a or d == b or d == c ) then continue
          end if
          if ( b + c + d == t )
            for e = low to high
              if ( unique )
                if ( e == a or e == b or e == c or e == d ) then continue
              end if
              for f = low to high
                if ( unique )
                  if ( f == a or f == b or f == c or f == d or f == e ) then continue
                end if
                if ( d + e + f == t )
                  for g = low to high
                    if ( unique )
                      if ( g == a or g == b or g == c or g == d or g == e or g == f ) then continue
                    end if
                    if ( f + g == t )
                      total += 1
                      if ( show )
                        printf @"%3d%3d%3d%3d%3d%3d%3d", a, b, c, d, e, f, g
                      end if
                    end if
                  next
                end if
              next
            next
          end if
        next
      next
    next
  next
  
  if ( unique )
    print
    print total;@" unique solutions for ";low;@" to ";high
    print fn StringByPaddingToLength( @"", 30, @"-", 0 )
    print
  else
    print total;@" non-unique solutions for ";low;@" to ";high
    print fn StringByPaddingToLength( @"", 37, @"-", 0 )
    print
  end if
end fn

window 1, @"4 Rings", ( 0, 0, 350, 400 )

fn FourRings( 1, 7, YES, YES )
fn FourRings( 3, 9, YES, YES )
fn FourRings( 0, 9,  NO,  NO )

HandleEvents

  

You may also check:How to resolve the algorithm Zeckendorf number representation step by step in the Cowgol programming language
You may also check:How to resolve the algorithm Function composition step by step in the Clojure programming language
You may also check:How to resolve the algorithm Towers of Hanoi step by step in the Klingphix programming language
You may also check:How to resolve the algorithm Rhonda numbers step by step in the C++ programming language
You may also check:How to resolve the algorithm Vector products step by step in the AutoHotkey programming language