4-rings or 4-squares puzzle: Difference between revisions
Content added Content deleted
(Added Action!) |
|||
Line 538: | Line 538: | ||
Number of solutions : 2860 |
Number of solutions : 2860 |
||
</pre> |
|||
=={{header|Action!}}== |
|||
{{Trans|ALGOL 68}} |
|||
<syntaxhighlight lang="action!"> |
|||
;;; solve the 4 rings or 4 squares puzzle |
|||
DEFINE TRUE = "1", FALSE = "0" |
|||
;;; finds solutions to the equations: |
|||
;;; a + b = b + c + d = d + e + f = f + g |
|||
;;; where a, b, c, d, e, f, g in lo : hi ( not necessarily unique ) |
|||
;;; depending on show, the solutions will be printed or not |
|||
PROC fourRings( INT lo, hi BYTE allowDuplicates, show ) |
|||
INT solutions, t, a, b, c, d, e, f, g, uniqueOrNot |
|||
solutions = 0 |
|||
FOR a = lo TO hi DO |
|||
FOR b = lo TO hi DO |
|||
IF allowDuplicates OR a <> b THEN |
|||
t = a + b |
|||
FOR c = lo TO hi DO |
|||
IF allowDuplicates OR ( a <> c AND b <> c ) THEN |
|||
d = t - ( b + c ) |
|||
IF d >= lo AND d <= hi |
|||
AND ( allowDuplicates OR ( a <> d AND b <> d AND c <> d ) ) |
|||
THEN |
|||
FOR e = lo TO hi DO |
|||
IF allowDuplicates |
|||
OR ( a <> e AND b <> e AND c <> e AND d <> e ) |
|||
THEN |
|||
g = d + e |
|||
f = t - g |
|||
IF f >= lo AND f <= hi |
|||
AND g >= lo AND g <= hi |
|||
AND ( allowDuplicates |
|||
OR ( a <> f AND b <> f AND c <> f |
|||
AND d <> f AND e <> f |
|||
AND a <> g AND b <> g AND c <> g |
|||
AND d <> g AND e <> g AND f <> g |
|||
) |
|||
) |
|||
THEN |
|||
solutions ==+ 1 |
|||
IF show THEN |
|||
PrintF( " %U %U %U %U", a, b, c, d ) |
|||
PrintF( " %U %U %U%E", e, f, g ) |
|||
FI |
|||
FI |
|||
FI |
|||
OD |
|||
FI |
|||
FI |
|||
OD |
|||
FI |
|||
OD |
|||
OD |
|||
IF allowDuplicates |
|||
THEN uniqueOrNot = "non-unique" |
|||
ELSE uniqueOrNot = "unique" |
|||
FI |
|||
PrintF( "%U %S solutions in %U to %U%E%E", solutions, uniqueOrNot, lo, hi ) |
|||
RETURN |
|||
;;; find the solutions as required for the task |
|||
PROC Main() |
|||
fourRings( 1, 7, FALSE, TRUE ) |
|||
fourRings( 3, 9, FALSE, TRUE ) |
|||
fourRings( 0, 9, TRUE, FALSE ) |
|||
RETURN |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
3 7 2 1 5 4 6 |
|||
4 5 3 1 6 2 7 |
|||
4 7 1 3 2 6 5 |
|||
5 6 2 3 1 7 4 |
|||
6 4 1 5 2 3 7 |
|||
6 4 5 1 2 7 3 |
|||
7 2 6 1 3 5 4 |
|||
7 3 2 5 1 4 6 |
|||
8 unique solutions in 1 to 7 |
|||
7 8 3 4 5 6 9 |
|||
8 7 3 5 4 6 9 |
|||
9 6 4 5 3 7 8 |
|||
9 6 5 4 3 8 7 |
|||
4 unique solutions in 3 to 9 |
|||
2860 non-unique solutions in 0 to 9 |
|||
</pre> |
</pre> |
||