-
-
Save zoffixznet/b9b7a2e1cfc811cc5d89a3ac71e6be14 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Grid { | |
my constant X_MAX = 20; | |
my constant Y_MAX = 20; | |
subset XIndex of Int where 0 ≤ * < X_MAX; | |
subset YIndex of Int where 0 ≤ * < Y_MAX; | |
has @.cells[X_MAX;Y_MAX]; | |
method sums-at (XIndex \x, YIndex \y --> Map:D) { | |
Map.new: gather { | |
:left( [*] map {@!cells[$_; y]}, (x…x-3)).take if x ≥ 3; | |
:right([*] map {@!cells[$_; y]}, (x…x+3)).take if x ≤ X_MAX - 4; | |
:up( [*] map {@!cells[x; $_]}, (y…y-3)).take if y ≥ 3; | |
:down( [*] map {@!cells[x; $_]}, (y…y+3)).take if y ≤ Y_MAX - 4; | |
:dlu( [*] map {@!cells[.head; .tail]}, ((x…x-3) Z (y…y-3))).take | |
if x ≥ 3 and y ≥ 3; | |
:dld( [*] map {@!cells[.head; .tail]}, ((x…x-3) Z (y…y+3))).take | |
if x ≥ 3 and y ≤ Y_MAX - 4; | |
:dru( [*] map {@!cells[.head; .tail]}, ((x…x+3) Z (y…y-3))).take | |
if x ≤ X_MAX - 4 and y ≥ 3; | |
:drd( [*] map {@!cells[.head; .tail]}, ((x…x+3) Z (y…y+3))).take | |
if x ≤ X_MAX - 4 and y ≤ Y_MAX - 4; | |
} | |
} | |
method largest-sum { | |
my %res = :0max; | |
for ^X_MAX -> \x { | |
for ^Y_MAX -> \y { | |
.value > %res<max> and %res<x y dir max> = x, y, .key, .value | |
for self.sums-at: x, y | |
} | |
} | |
%res | |
} | |
} | |
my $g := Grid.new: cells => 「 | |
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 | |
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 | |
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 | |
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 | |
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 | |
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 | |
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 | |
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 | |
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 | |
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 | |
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 | |
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 | |
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 | |
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 | |
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 | |
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 | |
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 | |
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 | |
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 | |
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 | |
」.trim.lines».words; | |
dd $g.largest-sum; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment