Forum Discussion
Braille Translator Challenge
I'm using a modular approach to solve both parts. You'll find all Lambdas in the AFE module of the workbook. The one I cannot share at present is Proto2Dλ, which is a generalized 2D lookup (Lookup values can be found in 2D array). I haven't finalized the function but it will be a part of my library in the future.
/*
Part 1
=LET(
// Re-tile 2D arrays, make phrase concise
remap, BlockMapλ(Alphabet, 4, 2),
ph, BYROW(BlockMapλ(Phrase, 3, 2), ARRAYTOTEXT),
// Letters/characters from Braille alphabet
letter, TAKE(remap, , 1),
// Braille dots
braille, BYROW(DROP(remap, , 2), ARRAYTOTEXT),
// Lookup phrase, return letters, make consise
result, CONCAT(XLOOKUP(ph, braille, letter)),
ph
)
Part 2
=LET(
// Expansion kernels
kernel, {0, 0; 1, 1; 2, 2},
kernel_b, {0, 1; 0, 1; 0, 1},
// Phrase ~ array
ex, Explodeλ(phrase2),
// Mesh grid
i, MGridλ(Alphabet),
j, MGridλ(Alphabet, 1),
// 2D lookup: letter ~ alphabet ~ i/j
x, 1 + Proto2Dλ(ex, Alphabet, i),
y, Proto2Dλ(ex, Alphabet, j),
// Expand indices using kernels
r, Zoomλ(x, kernel),
c, Zoomλ(y, kernel_b),
// Get results
final, TEXT(INDEX(Alphabet, r, c), ";;;@"),
final
)
*/
- djclementsAug 13, 2026Silver Contributor
I was hoping to see you here! Wonderful demonstration of your extended function library. I haven't had a chance to review them all in detail yet, but plan to soon. Looks amazing!
I think we followed the same basic logic for Part 1, with trivial variances in methods. Part 2 is very interesting... I'll have to take a closer look at the function definitions to see what's going on and keep an eye out for Proto2Dλ when it's ready.
Great work! :)