aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-12-01 17:24:13 +0000
committerGitHub <noreply@github.com>2020-12-01 17:24:13 +0000
commitb99749b9d38f2d6071b17b5ba6c6321f8d91cf5a (patch)
tree712a5e67e02bdba39cff3e19ad4a421a50ce4ead
parente402b58fb4a5205606dda4cfcd5cb85cb4bc11f6 (diff)
parent977f0f982122106d16d19ca15168345dfb5a4384 (diff)
downloadperlweeklychallenge-club-b99749b9d38f2d6071b17b5ba6c6321f8d91cf5a.tar.gz
perlweeklychallenge-club-b99749b9d38f2d6071b17b5ba6c6321f8d91cf5a.tar.bz2
perlweeklychallenge-club-b99749b9d38f2d6071b17b5ba6c6321f8d91cf5a.zip
Merge pull request #2899 from andemark/branch-for-challenge-089
ch-2.p6 simplified
-rw-r--r--challenge-089/mark-anderson/raku/ch-2.p649
1 files changed, 37 insertions, 12 deletions
diff --git a/challenge-089/mark-anderson/raku/ch-2.p6 b/challenge-089/mark-anderson/raku/ch-2.p6
index 47c7b8292b..e4c838d686 100644
--- a/challenge-089/mark-anderson/raku/ch-2.p6
+++ b/challenge-089/mark-anderson/raku/ch-2.p6
@@ -2,31 +2,56 @@
# With help from https://www.wikihow.com/Solve-a-Magic-Square
#
-use Scalar::History;
+=begin usage
+
+raku ch-2.p6
+
+[8 1 6]
+[3 5 7]
+[4 9 2]
+
+raku ch-2.p6 17
+
+[155 174 193 212 231 250 269 288 1 20 39 58 77 96 115 134 153]
+[173 192 211 230 249 268 287 17 19 38 57 76 95 114 133 152 154]
+[191 210 229 248 267 286 16 18 37 56 75 94 113 132 151 170 172]
+[209 228 247 266 285 15 34 36 55 74 93 112 131 150 169 171 190]
+[227 246 265 284 14 33 35 54 73 92 111 130 149 168 187 189 208]
+[245 264 283 13 32 51 53 72 91 110 129 148 167 186 188 207 226]
+[263 282 12 31 50 52 71 90 109 128 147 166 185 204 206 225 244]
+[281 11 30 49 68 70 89 108 127 146 165 184 203 205 224 243 262]
+[ 10 29 48 67 69 88 107 126 145 164 183 202 221 223 242 261 280]
+[ 28 47 66 85 87 106 125 144 163 182 201 220 222 241 260 279 9]
+[ 46 65 84 86 105 124 143 162 181 200 219 238 240 259 278 8 27]
+[ 64 83 102 104 123 142 161 180 199 218 237 239 258 277 7 26 45]
+[ 82 101 103 122 141 160 179 198 217 236 255 257 276 6 25 44 63]
+[100 119 121 140 159 178 197 216 235 254 256 275 5 24 43 62 81]
+[118 120 139 158 177 196 215 234 253 272 274 4 23 42 61 80 99]
+[136 138 157 176 195 214 233 252 271 273 3 22 41 60 79 98 117]
+[137 156 175 194 213 232 251 270 289 2 21 40 59 78 97 116 135]
+
+=end usage
unit sub MAIN(UInt $n where * mod 2 = 3); #= a positive odd integer
.say for odd-magic-square($n);
sub odd-magic-square($n) {
- subset Valid of UInt where 0 <= * < $n;
-
- my $r := Scalar::History.create(0, Valid);
- my $c := Scalar::History.create(($n / 2).floor, Valid);
my @matrix = [0 xx $n] xx $n;
- @matrix[$r][$c] = 1;
+ my $r = 1;
+ my $c = ($n / 2).floor - 1;
- for 2..($n**2) -> $num {
- try $r--; if $! { $r = $n - 1 }
- try $c++; if $! { $c = 0 }
+ for 1..($n**2) -> $num {
+ $r = ($r - 1) mod $n;
+ $c = ($c + 1) mod $n;
if @matrix[$r][$c] {
- $r = $r.VAR.get-history.tail + 1;
- $c = $c.VAR.get-history.tail;
+ $r = ($r + 1) mod $n + 1;
+ $c = ($c - 1) mod $n;
}
@matrix[$r][$c] = $num;
}
- @matrix.map(*.fmt("%{($n**2).chars}d").Array);
+ @matrix.map(*.fmt( "%{ ($n**2).chars }d" ).Array);
}