aboutsummaryrefslogtreecommitdiff
path: root/challenge-089/paulo-custodio/forth/ch-2.fs
blob: 79277b491e501f034d436936f7ee5d8c9b020635 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#! /usr/bin/env gforth

\ Challenge 089
\
\ TASK #2 � Magical Matrix
\ Submitted by: Mohammad S Anwar
\ Write a script to display matrix as below with numbers 1 - 9.
\ Please make sure numbers are used once.
\
\ [ a b c ]
\ [ d e f ]
\ [ g h i ]
\ So that it satisfies the following:
\
\ a + b + c = 15
\ d + e + f = 15
\ g + h + i = 15
\ a + d + g = 15
\ b + e + h = 15
\ c + f + i = 15
\ a + e + i = 15
\ c + e + g = 15

\ Test a brute-force method; for a better algorithm see my perl solution.

: solve
  1 2 3 4 5 6 7 8 9 { a b c d e f g h i }   \ create 9 local variables
  0 TO a BEGIN a 1+ TO a  a 10 < WHILE
    0 TO b BEGIN b 1+ TO b  b 10 < WHILE
      b a <> IF
        0 TO c BEGIN c 1+ TO c  c 10 < WHILE
          c a <>  c b <>  AND IF
            0 TO d BEGIN d 1+ TO d  d 10 < WHILE
              d a <>  d b <>  d c <>  AND AND IF
                0 TO e BEGIN e 1+ TO e  e 10 < WHILE
                  e a <>  a b <>  e c <>  e d <> AND AND AND IF
                    0 TO f BEGIN f 1+ TO f  f 10 < WHILE
                      f a <>  f b <>  f c <>  f d <>  f e <> AND AND AND AND IF
                        0 TO g BEGIN g 1+ TO g  g 10 < WHILE
                          g a <>  g b <>  g c <>  g d <>  g e <>  g f <>
                          AND AND AND AND AND IF
                            0 TO h BEGIN h 1+ TO h  h 10 < WHILE
                              h a <>  h b <>  h c <>  h d <>  h e <>  h f <>  h g <>
                              AND AND AND AND AND AND IF
                                0 TO i BEGIN i 1+ TO i  i 10 < WHILE
                                  i a <>  i b <>  i c <>  i d <>
                                  i e <>  i f <>  i g <>  i h <>
                                  AND AND AND AND AND AND AND IF
                                    a b c + + 15 = IF
                                      d e f + + 15 = IF
                                        g h i + + 15 = IF
                                          a d g + + 15 = IF
                                            b e h + + 15 = IF
                                              c f i + + 15 = IF
                                                a e i + + 15 = IF
                                                  c e g + + 15 = IF
                                                    ." [ " a . b . c . ." ]" CR
                                                    ." [ " d . e . f . ." ]" CR
                                                    ." [ " g . h . i . ." ]" CR
                                                    EXIT
                                                  THEN
                                                THEN
                                              THEN
                                            THEN
                                          THEN
                                        THEN
                                      THEN
                                    THEN
                                  THEN
                                REPEAT
                              THEN
                            REPEAT
                          THEN
                        REPEAT
                      THEN
                    REPEAT
                  THEN
                REPEAT
              THEN
            REPEAT
          THEN
        REPEAT
      THEN
    REPEAT
  REPEAT
;

solve BYE