aboutsummaryrefslogtreecommitdiff
path: root/challenge-030/mark-senn/perl6/ch-2.p6
blob: 3815875863b787e47ddd0ad79b43dd2fb9e4faae (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#
# Perl Weekly Challenge - 030
# Task #2
#
# Mark Senn, http://engineering.purdue.edu/~mark
# October 19, 2019
#
# From
# https://perlweeklychallenge.org/blog/perl-weekly-challenge-030#task-2
#     Write a script to print all possible series of 3 positive numbers,
#     where in each series at least one of the number is even and sum of
#     the three numbers is always 12. For example, 3,4,5.
#
# The sum of any three odd positive numbers will always be odd.  So,
# any three positive numbers that add to 12 must have at least one
# even number.  The task can be restated as
#     Write a script to print all possible series of 3 positive numbers
#     where the sum of the numbers is 12.  For example, 3,4,5.
#
# THIS WOLFRAM LANGUAGE (FORMERLY KNOWN AS MATHEMATICA) PROGRAM CAN BE USED
# TO SOLVE THIS PROGRAM:
#     s   =   Solve[i+j+k == 12 && i>0 && j>0 && k>0,  {i,j,k},  Integers];
#
#     For [t=1, t<=Length[s], t++,
#         Print[i/.s[[t,1]], ",", j/.s[[t,2]], ",", k/.s[[t,3]]];
#     ];
#
# Perl 6 is in the process of being renamed Raku.
# Run using Raku v6.d;
use v6.d;

sub MAIN()
{
    for (1..10) -> $i  {
        for (1..10) -> $j  {
            for (1..10) -> $k  {
                ($i + $j + $k == 12)  and  say "$i,$j,$k";
            }
        }
    }

    # Optimize so we don't need to examine as many numbers.
    for (1..10) -> $i  {
        for (1..12-$i-1) -> $j  {
            for (12-$i-$j..10) -> $k  {
                ($i + $j + $k == 12)  and  say "$i,$j,$k";
            }
        }
    }
}

# For each example, the program printed:
#     1,1,10
#     1,2,9
#     1,3,8
#     1,4,7
#     1,5,6
#     1,6,5
#     1,7,4
#     1,8,3
#     1,9,2
#     1,10,1
#     2,1,9
#     2,2,8
#     2,3,7
#     2,4,6
#     2,5,5
#     2,6,4
#     2,7,3
#     2,8,2
#     2,9,1
#     3,1,8
#     3,2,7
#     3,3,6
#     3,4,5
#     3,5,4
#     3,6,3
#     3,7,2
#     3,8,1
#     4,1,7
#     4,2,6
#     4,3,5
#     4,4,4
#     4,5,3
#     4,6,2
#     4,7,1
#     5,1,6
#     5,2,5
#     5,3,4
#     5,4,3
#     5,5,2
#     5,6,1
#     6,1,5
#     6,2,4
#     6,3,3
#     6,4,2
#     6,5,1
#     7,1,4
#     7,2,3
#     7,3,2
#     7,4,1
#     8,1,3
#     8,2,2
#     8,3,1
#     9,1,2
#     9,2,1
#     10,1,1