Magic Number
Fun with Coding
Let’s use a calculator to tackle
some programming exercise.
Count Negative Numbers in a Matrix
From LeetCode
Video Commentary
The Count function (⧻) gives you the number of elements in a matrix.
What’s more, it can count the occurrence of a particular number:
here 4 only appears once in the matrix.
To find the negative numbers, we start by setting the condition
The 1s in the above conditional matrix are the locations of the negative numbers.
All we need to do is to count the 1s.
So there are 4 negative numbers.
Sign of the Product of an Array
From LeetCode
Video Commentary
Richest Customer Wealth
From LeetCode
Video Commentary
For illustration, we will use a simpler example than the one in LeetCode.
First we will need to sum up the numbers for each row.
For the first row, it will be 1 + 2 + 3, and 5 + 5 + 5 for the second row, etc.
In other words we need to inject (▷) addition (+) between each number.
By default, inject works horizontally along the x-axis, also known as axis 1. You can specify axis 1 for inject, it will appear as a subscript. You get the same result.
As an aside, to get the sum for each column, specify axis 2 for inject.
To find the richest customer, we use the maximum operator |̊
However, it has no effect.
Like inject, maximum also works horizontally. To find the maximum column wise, we specify 2 for the axis:
Prime Numbers
Finding primes between 2 to 50.
(Excluding 1 for simplicity.)
Ken Iverson’s APL solution on Wikipedia
(2 = +⌿ 0 = (⍳N) ∘.| ⍳N) / ⍳N
Using the fact that for numbers 1 to N, a prime only has 2 factors — itself and 1.
In our case, for numbers 2 to N, a prime has only one factor.
The ‘multiplication table’ APL solution.
(~ m ∊ m ∘.× m) / m ← 1↓⍳50
It’s short and sweet. Definitely not fast.
Sort by Parity
From LeetCode
Video Commentary
Maximum Count of Positive and Negative Integer
From LeetCode
Video: 1 Problem, 24 Languages
Spaces are used to separate items in the list.
Optionally we can use comma or semicolon for the sake of clarity.
Usually ⧻ counts how many elements in a list.
Here ⧻₁ counts how many elements satisfied the condition.
And you can use ⧻₀ to count what’s false.
Alternatively we can use the infix form of the maximum operator:
Rearrange Array to Maximize Prefix Score
LeetCode
Video: Why I Love BQN So Much! (vs Python)
Height Checker
From LeetCode
Video commentary
It’s easier to read in 2 lines.
Let’s use ⧻₁ to show our intention better.
We can use R instead of a normal variable.
R stands for result from a previous statement.
So if you have ‘1 + 2 ; R + 6’, you get 9 as R = 1 + 2 = 3
R allows us to break down a complex expression into smaller simpler chunks.
Max Difference Between Increasing Elements
From LeetCode
Video: Functional vs Array Programming
Using R to construct the solution:
Elimination Sort
From APL Quest
Video commentary
Multiples of 3 or 5
From Project Euler
Video commentary
Introducing ·❘·
While ÷ means division, ·❘· means divisible.
So 6 ·❘· 3 = 1 (true) and 6 ·❘· 4 = 0 (false).
Similar expression but factoring out 3 and 5.
Moment of truth — let’s find all the multiples under 1000:
Sum of Squares
Difference Between Ones and Zeros
From LeetCode
Video commentary
Left and Right Sum Differences
From LeetCode
Video commentary
Making use of the weakness that nested list is ignored, that is
[ [ 1 2 3 ] ] evaluates to [ 1 2 3 ] …
Let’s tidy up the parentheses:
‘What sums up 2020?’
From Advent of Code
Video commentary
Check if Matrix is X-Matrix
From LeetCode
Video commentary