Home » Sum-Based Neighboring Grid Fill

Sum-Based Neighboring Grid Fill

Apologies!! Scheduling didn’t work today.. Generate 10×10 grid starting with 1 and traversing from left to right, each number is sum of already filled in surrounding cells. Ex. for C3, already filled in surrounding cells are B2+C2+D2+B3

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 532
Challenge Difficulty: ⭐️⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Sum-Based Neighboring Grid Fill with Power Query

Power Query solution 1 for Sum-Based Neighboring Grid Fill, proposed by John V.:
let
 N = Number.From,
 R = 
 List.Accumulate({0..8}, {List.Repeat({1}, 10)}, 
 (s, c) =>
 s & {List.Buffer(List.Skip(
 List.Generate(
 () => [i = 0, x = 0],
 each [x] < 11,
 each [i = [i] + List.Sum(List.Range(s{c}, [x] - N([x] > 0), 3 - N([x] = 0))), x = 1 + [x]],
 each [i]
 )
 ))}
 )
in
 Table.FromRows(R)
Blessings!
                    
                  
          
Power Query solution 2 for Sum-Based Neighboring Grid Fill, proposed by Rafael González B.:
let
 S = List.Sum, R = List.Range,
 G = List.Generate(
 () => [i = 1, LB = List.Repeat({1}, 10)],
 each [i] <= 10,
 each [
 i = [i] + 1,
 LB = List.LastN( List.Accumulate(
 {0..9},
 [LB],
 (s,c) => s & (if c = 0 then {S(R([LB], 0, 2))} 
 else {S(R([LB], c- 1, 3) & {List.Last(s)})}) 
 ), 10)
 ],
 each [LB]
 ),
 Anw = Table.FromRows(G)
in
 Anw
🧙🏻‍♂️🧙🏻‍♂️🧙🏻‍♂️
                    
                  
          

Solving the challenge of Sum-Based Neighboring Grid Fill with Excel

Excel solution 1 for Sum-Based Neighboring Grid Fill, proposed by Bo Rydobon 🇹🇭:
=LET(s,SEQUENCE(,10),REDUCE(s^0,DROP(s,,1),LAMBDA(a,r,VSTACK(a,
SCAN(0,s,LAMBDA(p,i,SUM(p,INDEX(HSTACK(0,TAKE(a,-1),0),i+{0;1;2}))))))))
Excel solution 2 for Sum-Based Neighboring Grid Fill, proposed by John V.:
=LET(s,
    COLUMN(
        A:J
    ),
    REDUCE(s^0,
    ROW(
        1:9
    ),
    LAMBDA(b,
    y,
    VSTACK(b,
    SCAN(0,
    s,
    LAMBDA(a,
    v,
    SUM(a,
    TAKE(DROP(
        b,
        ,
        v-2
    ),
    -1,
    3-(MOD(
        v,
        9
    )=1)))))))))
Excel solution 3 for Sum-Based Neighboring Grid Fill, proposed by محمد حلمي:
=REDUCE(
    SEQUENCE(
        ,
        10
    )^0,
    SEQUENCE(
        9
    ),
    LAMBDA(
        a,
        v,
        
        VSTACK(
            a,
            SCAN(
                0,
                TAKE(
                    a,
                    -1
                )+
                HSTACK(
                    0,
                    TAKE(
                        a,
                        -1,
                        9
                    )
                )+HSTACK(
                    TAKE(
                        a,
                        -1,
                        -9
                    ),
                    0
                ),
                sum
            )
        )
    )
)
Excel solution 4 for Sum-Based Neighboring Grid Fill, proposed by محمد حلمي:
=REDUCE(
    SEQUENCE(
        ,
        10
    )^0,
    SEQUENCE(
        9
    ),
    LAMBDA(
        a,
        v,
        
        VSTACK(
            a,
            SCAN(
                0,
                TAKE(
                    a,
                    -1
                )+HSTACK(
                    0,
                    TAKE(
                        a,
                        -1,
                        9
                    )
                )+
                HSTACK(
                    TAKE(
                        a,
                        -1,
                        -9
                    ),
                    0
                ),
                LAMBDA(
                    q,
                    w,
                    q+w
                )
            )
        )
    )
)
Excel solution 5 for Sum-Based Neighboring Grid Fill, proposed by محمد حلمي:
=LET(s,SEQUENCE(,10),
REDUCE(s^0,DROP(s,,1),LAMBDA(a,v,VSTACK(a,
SCAN(0,MAP(s,LAMBDA(x,SUM(IFERROR(INDEX(a,
ROWS(a),IF(x=1,{1,2},x+{-1,0,1})),0)))),LAMBDA(q,w,q+w))))))
Excel solution 6 for Sum-Based Neighboring Grid Fill, proposed by Julian Poeltl:
=WRAPROWS(
    REDUCE(
        1,
        SEQUENCE(
            99,
            ,
            2
        ),
        LAMBDA(
            A,
            B,
            LET(
                M,
                MOD(
                    B,
                    10
                ),
                VSTACK(
                    A,
                    IFS(
                        B<11,
                        1,
                        M=1,
                        INDEX(
                            A,
                            B-10
                        )+INDEX(
                            A,
                            B-9
                        ),
                        M=0,
                        INDEX(
                            A,
                            B-11
                        )+INDEX(
                            A,
                            B-10
                        )+INDEX(
                            A,
                            B-1
                        ),
                        1,
                        INDEX(
                            A,
                            B-11
                        )+INDEX(
                            A,
                            B-10
                        )+INDEX(
                            A,
                            B-9
                        )+INDEX(
                            A,
                            B-1
                        )
                    )
                )
            )
        )
    ),
    10
)
Excel solution 7 for Sum-Based Neighboring Grid Fill, proposed by Julian Poeltl:
=WRAPROWS(REDUCE(1,
    SEQUENCE(
        ,
        99,
        ,
        0
    ),
    LAMBDA(A,
    B,
    VSTACK(A,
    LET(R,
    ROWS(
        A
    )+1,
    M,
    MOD(
        R,
        10
    ),
    IFS((R>10)*(M<>1)*(M<>0),
    INDEX(
        A,
        R-11
    )+INDEX(
        A,
        R-10
    )+INDEX(
        A,
        R-9
    )+INDEX(
        A,
        R-1
    ),
    (M=1)*(R>10),
    INDEX(
        A,
        R-10
    )+INDEX(
        A,
        R-9
    ),
    (M=0)*(R>10),
    INDEX(
        A,
        R-11
    )+INDEX(
        A,
        R-10
    )+INDEX(
        A,
        R-1
    ),
    1,
    B))))),
    10)
Excel solution 8 for Sum-Based Neighboring Grid Fill, proposed by Timothée BLIOT:
=LET(
    A,
    SEQUENCE(
        ,
        10
    ),
    REDUCE(
        A/A,
        SEQUENCE(
            9
        ),
        LAMBDA(
            w,
            v,
            VSTACK(
                w,
                SCAN(
                    0,
                    A,
                    LAMBDA(
                        y,
                        x,
                        y+SUM(
                            DROP(
                                TAKE(
                                    w,
                                    -1,
                                    MIN(
                                        x+1,
                                        10
                                    )
                                ),
                                ,
                                MAX(
                                    x-2,
                                    0
                                )
                            )
                        )
                    )
                )
            )
        )
    )
)
Excel solution 9 for Sum-Based Neighboring Grid Fill, proposed by Pieter de B.:
=LET(i,SEQUENCE(,10,2)-{0;1;2},REDUCE(TAKE(i,1)^0,TAKE(i,1,9),LAMBDA(x,y,VSTACK(x,SCAN(,MMULT({1,1,1},IFERROR(INDEX(TAKE(x,-1),,i/i^0),0)),LAMBDA(a,b,a+b))))))
Excel solution 10 for Sum-Based Neighboring Grid Fill, proposed by Bilal Mahmoud kh.:
=REDUCE(SEQUENCE(,10,1,0),SEQUENCE(10),LAMBDA(x,y,IF(y=1,x,VSTACK(x,LET(a,TAKE(x,-1),b,MAP(SEQUENCE(,10),LAMBDA(n,IF(n=1,INDEX(a,1,n)+INDEX(a,1,n+1),IF(n=10,INDEX(a,1,n)+INDEX(a,1,n-1),INDEX(a,1,n)+INDEX(a,1,n-1)+INDEX(a,1,n+1))))),SCAN(,b,LAMBDA(s,r,s+r)))))))
Excel solution 11 for Sum-Based Neighboring Grid Fill, proposed by JvdV -:
=DROP(LET(s,
    SEQUENCE(
        ,
        10
    ),
    REDUCE(s^0,
    s,
    LAMBDA(x,
    y,
    VSTACK(x,
    SCAN(0,
    s,
    LAMBDA(a,
    b,
    SUM(a,
    TAKE(TAKE(
        x,
        -1,
        b+1
    ),
    ,
    (b=10)-3)))))))),
    -1)
Excel solution 12 for Sum-Based Neighboring Grid Fill, proposed by Celia Alves:
=WRAPROWS(
REDUCE({1},SEQUENCE(,99,2),
LAMBDA(current,new,
IF(new<=10,HSTACK(current,{1}),
IF(MOD(new,10)=1,HSTACK(current,SUM(INDEX(current,,new-10),INDEX(current,,new-9))),
IF(MOD(new,10)=0,HSTACK(current,SUM(INDEX(current,,new-11),INDEX(current,,new-10),INDEX(current,,new-1))),
HSTACK(current,SUM(INDEX(current,,new-11),INDEX(current,,new-10),INDEX(current,,new-9),INDEX(current,,new-1))))))))
,10)

Solving the challenge of Sum-Based Neighboring Grid Fill with Python

Python solution 1 for Sum-Based Neighboring Grid Fill, proposed by Konrad Gryczan, PhD:
import pandas as pd
import numpy as np
test = pd.read_excel(path, usecols="B:K", skiprows =1 , header=None).values
matrix_size = 10
m = np.zeros((matrix_size, matrix_size))
m[0, 0] = 1
for i in range(matrix_size):
 for j in range(matrix_size):
 if i != 0 or j != 0:
 m[i, j] = np.sum(m[max(i-1, 0):min(i+2, matrix_size),
 max(j-1, 0):min(j+2, matrix_size)])
print(np.array_equal(m, test))  # True
                    
                  

Solving the challenge of Sum-Based Neighboring Grid Fill with Python in Excel

Python in Excel solution 1 for Sum-Based Neighboring Grid Fill, proposed by Alejandro Campos:
grid = np.zeros((10, 10), dtype=int)
grid[0, 0] = 1
def sum_surrounding_cells(i, j, grid):
 sum_value = 0
 for x in range(max(0, i-1), min(i+2, 10)):
 for y in range(max(0, j-1), min(j+2, 10)):
 if x == i and y == j:
 continue
 sum_value += grid[x, y]
 return sum_value
for i in range(10):
 for j in range(10):
 if i == 0 and j == 0:
 continue
 grid[i, j] = sum_surrounding_cells(i, j, grid)
df = pd.DataFrame(grid)
df
                    
                  

Solving the challenge of Sum-Based Neighboring Grid Fill with R

R solution 1 for Sum-Based Neighboring Grid Fill, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
test = read_excel(path, range = "B2:K11", col_names = FALSE) %>% as.matrix()
matrix_size <- 10
m <- matrix(0, nrow = matrix_size, ncol = matrix_size)
m[1, 1] <- 1
for (i in 1:matrix_size) {
 for (j in 1:matrix_size) {
 if (i != 1 || j != 1) {
 m[i, j] <- sum(m[pmax(i-1, 1):pmin(i+1, matrix_size),
 pmax(j-1, 1):pmin(j+1, matrix_size)])
 }
 }
}
all.equal(m, test, check.attributes = FALSE) # TRUE
                    
                  

&&&

Leave a Reply