Skip to content

Instantly share code, notes, and snippets.

View ncalm's full-sized avatar
💭
hitting computer with hammer

Owen Price ncalm

💭
hitting computer with hammer
View GitHub Profile
solver=LAMBDA(grid,
LET(
numbers, SEQUENCE(9),
numgrid, SEQUENCE(9,9,0),
vgrid, TOCOL(grid*1),
pos, XMATCH(0,vgrid)-1,
IF(
ISNA(pos), grid,
LET(
i,INT(pos/9),
@ncalm
ncalm / excel-lambda-SPREAD.txt
Last active April 16, 2024 23:54
This Excel LAMBDA function mimics argument unpacking for arbitrary functions of up to 5 parameters
// Spread an array of arguments across the parameters of a function of up to five parameters
SPREAD = LAMBDA(function, LAMBDA(arg_array,
LET(
arg_vector, TOCOL(arg_array),
CHOOSE(
ROWS(arg_vector),
function(INDEX(arg_vector,1)),
function(INDEX(arg_vector,1), INDEX(arg_vector, 2)),
function(INDEX(arg_vector,1), INDEX(arg_vector, 2), INDEX(arg_vector, 3)),
@ncalm
ncalm / excel-lambda-PIPE.txt
Created April 15, 2024 23:29
Excel LAMBDA examples of function chaining
IFOMITTED = LAMBDA(arg, then, IF(ISOMITTED(arg), then, arg));
// Functions for common mathematical operators
MULTIPLY = LAMBDA(x, y, x*y);
ADD = LAMBDA(x, y, x+y);
SUBTRACT = LAMBDA(x, y, x-y);
DIVIDE = LAMBDA(x, y, x/y);
// Apply a series of functions to an array
PIPE =LAMBDA(array, functions, operator, [init],
@ncalm
ncalm / excel-lambda-stacker.txt
Last active April 14, 2024 12:51
stacker namespace for Lambda
/*
array is a column of stuff to which we want to apply element function
row_function is some function that produces an array with a fixed number of columns
the column count produced by row_function must be identical regardless of input
stack_function is one of V or H
If you're unsure how these work or why we would use them, please review these videos:
https://youtu.be/04jOeiMypXw
https://youtu.be/wEBLT9QfQRw
@ncalm
ncalm / excel-lambda-BMAPλ.txt
Created October 3, 2023 12:04
Recursive bisection LAMBDA function for Excel, by Peter Bartholemew
/*
Credit: Peter Bartholemew
https://www.linkedin.com/in/peterbartholomew/
https://techcommunity.microsoft.com/t5/user/viewprofilepage/user-id/214174#profile
---
BMAPλ
Recursively bisects an array and applies a function to the leaf nodes.
@ncalm
ncalm / excel-lambda-BINARYSEARCH.txt
Created April 4, 2024 17:09
This Excel LAMBDA function enables simulation and visualization of the binary search algorithm to find a value in a sorted array.
IFOMITTED = LAMBDA(arg, then, IF(ISOMITTED(arg), then, arg));
BINARYSEARCH = LAMBDA(search_for, array, [stop], [iter], [left_index], [right_index],
LET(
_iter, IFOMITTED(iter, 1),
_stop, IFOMITTED(stop, ROWS(array)+1),
_left_index, IFOMITTED(left_index, 1),
_right_index, IFOMITTED(right_index, ROWS(array)),
_seq, SEQUENCE(ROWS(array)),
@ncalm
ncalm / excel-lambda-DICECOEFF.txt
Created April 2, 2024 20:16
This Excel LAMBDA function calculates the Sørensen–Dice coefficient between two text strings
/*
GETBIGRAMS - Get the bigrams of a text string
Inputs: 1. str - a text string
Returns: A vertical array of the bigrams of the text string
Example:
=GETBIGRAMS("banana")
={"ba";"an";"na";"a"}
*/
@ncalm
ncalm / office-scripts-protection.ts
Last active March 22, 2024 13:32
This gist demonstrates how to set protection options in Office Scripts for Excel
function main(workbook: ExcelScript.Workbook) {
const activeSheet = workbook.getActiveWorksheet()
// Returns an object representing the worksheet's protection
const activeSheetProtection = activeSheet.getProtection()
// Protect the sheet according to preferred options (password as 2nd arg is optional)
// This line uses the ternary operator. The protect call is only used if the getProtected() call returns false
@ncalm
ncalm / create-format-chart.ts
Last active March 9, 2024 21:33
This Office Scripts function creates and formats a chart - for exploration and learning
/*
* Create and format a chart from some AdventureWorksDW2019 data
* The table has these columns: Year, Month, SalesAmount
* The worksheet must include a named cell called 'referenceLineValue'. This value is used to draw the line on the chart.
*/
function main(workbook: ExcelScript.Workbook) {
let selectedSheet = workbook.getActiveWorksheet();
@ncalm
ncalm / excel-lambda-GROUPAGGREGATE.txt
Last active February 17, 2024 12:13
This Excel LAMBDA function creates summary tables similar to SQL GROUP BY queries
/*
GROUPAGGREGATE
Creates summary tables of data similar to SQL's GROUP BY queries
Inputs
- dat: a range or array of data with at least two columns,
one of which's control value must be "group" and one not "group"
- control: a single-row array, where COLUMNS(control)=COLUMNS(dat), of values from this list:
group - the values in this column will be output as row headers