CodeReportSolutions
Code Report Solutions
Following are some simple solutions to videos found on YouTube. Idea is to make it easier for comparing and learning z^3 and other beautiful languages.
Number of Different Integers in a String
Video: https://www.youtube.com/watch?v=59vAjBS3yZM [APL Wins (vs C++, Java & Python)]
z^3 Solution
s="ad3343sadfsd343434df343443sff"; (s#/[^\d]+/)∪
Result: 3343 343434 343443
# splits string using the postfix regexp pattern. ∪ extracts unique from the results 12 Character z^3 Solution vs. 14 Character APL Solution s="ad3343sadfsd343434df343443sff";
(/\d+/g!)(s)#;
Answer: 3. Uses RegExp, and ! is used to create a predicate function to match the RegExp. String is given to the predicate function, and # counts the number of pieces extracted.
Final Value of Variable After Performing Operations
Video: https://www.youtube.com/watch?v=8Njxgy4itts [4 APL Solutions in 10 Minutes!]
z^3 Solution
m=["--x","x++","x++"].print(); [0]@(m!)
Gives answer:
x [--x,x++,x++] 0 -1 -1 0
m! makes this to a function which is evaluated using [0]@. 0 forms a single input combinatorial argument. [0..10]@(m!) can be used to loop through a set of initial values
Interesting that this solution has far less characters than APL solution, and can be made even shorter.
Count Negative Numbers in a Sorted Matrix
Video: https://www.youtube.com/watch?v=pDbDtGn1PXk [LeetCode 176 Problem 1 - Count Negative Numbers in a Sorted Matrix]
z^3 Solution
x=[-2,-1,0;-1,1,3;-1,2,4]; (x⍌).findv(NEGATIVE)#
Gives answer 4
⍌ Flatten Array .findv Gives result of function call NEGATIVE # Counts the result Also note simpler z^3 Array Notation used to create the variable x (with , and ;). Usual Javascript array notations also work.
Check if a matrix is an X-Matrix (X like diagonals are filled)
Video: https://www.youtube.com/watch?v=8ynsN4nJxzU [APL vs BQN vs J vs Q vs NumPy vs Julia vs R - A comparison of seven different programming languages across a few different language criteria.]
z^3 Solution
m=[2 0 0 1; 0 3 1 0; 0 5 2 0; 4 0 0 2]; n=(m#)[0]; xm=|n| |+| |n|.reverse(); xm|==|(m.$("x!=0?1:0"!))
Gives answer true
m# gives length of array m. |n| gives n dimensional Identity Matrix, which is added using |+| to the .reverse() of same array. |==| is used to compare this to the m, .$ is used to apply the function "x!=0?1:0"! to every element. "x!=0?1:0"! shows how a function can be created from a string with the ! operator. Also note simpler z^3 Array Notation used to create the variable x (with , (when positive numbers alone are used, the comma is also optional) and ;). Usual Javascript array notations also work.
Sign of Product of an Array
Video: https://www.youtube.com/watch?v=a7CSK7HNEWQ&t=297s [I ❤ APL and Haskell #2 ]
z^3 Solution
a=[-1,-2,-3,4,3,2,1]; ∏±a
Gives answer -1
∏ is Product, ± is SIGN function. APL has 3 characters it its solution (selected as the best solution in the video because of its brevity). Interesting that the solution with z^3 has even less characters, just 2.
Powerful Solution to Indexing Problem (1 character in z^3 vs 3 in APL)
Video: https://www.youtube.com/watch?v=ctbGMuakpHk [Python vs 3 Character APL Solution ]
z^3 Solution
a=[0,2,1,5,3,4]; a#a
Gives answer 0 1 2 4 5 3
Actual logic is just # [Hash], which is an index access operator, if operated on any array. For this problem, the answer is just one character (3 to be generous). # operator is far more powerful and is polymorphic depending on the types of arguments it operators on.
Partitioning Odd and Even Numbers in an Array
Video: https://www.youtube.com/watch?v=A16w7qTfT68 [Implementing C++'s std::partition in BQN ]
z^3 Solution
a=[3,1,2,4]; (a ⑂ [ISEVEN,ISODD]) ⍌
Gives answer 2 4 3 1
Fork (⑂) with an array of functions, and flatten the result. Function Array can have any number of predicates/functions.
Rearrange Array to Maximize Prefix Score
Video: https://www.youtube.com/watch?v=mRT-yK2RTdg [Why I Love BQN So Much! (vs Python)]
z^3 Solution
a=[2,-1,0,1,-3,3,-3]; ((a⋱) ≡⧺ ∑) ↥;
Gives answer 6
Sort by Descending Order (⋱), followed by cumulative row SUM (≡⧺ SUM), followed by MAX (↥)
Hypotenuse
Video: https://www.youtube.com/watch?v=Wah-uQ9ou80 [Python vs Uiua vs BQN]
z^3 Solution
h:=√∑([a,b]^2); h(3,4)
Gives answer 5
Filter Is Odd From List
Video: https://www.youtube.com/watch?v=XJ3QWOSZ8Nk [Lightning Talk: C++ vs Haskell vs BQN by Conor Hoekstra | Lambda Days 2023]
z^3 Solution
(1..5) ⑂ ISODD
Gives answer 1 3 5
Greatest Common Divisor/Lowest Common Multiple
Video: https://www.youtube.com/watch?v=UVUjnzpQKUo [1 Problem, 16 Programming Languages (C++ vs Rust vs Haskell vs Python vs APL...)]
z^3 Solution
LCM(20,15) Gives: 60 GCD(20,15) Gives: 5 GCD(5..20..5,15) Gives: - GCD 5 15 5 10 15 5 15 15 15 20 15 5
Maximum Count of Positive Integer and Negative Integer
Video: https://www.youtube.com/watch?v=U6I-Kwj-AvY&list=PLVFrD1dmDdvf8REa4SkI-IppFGvkRq83O [1 Problem, 24 Programming Languages]
z^3 Solution
Examples: a=[-2,-1,-1,1,2,3]; b=[-3,-2,-1,0,0,1,2]; c=[5,20,66,1314]; a=[-2,-1,-1,1,2,3]; b=[-3,-2,-1,0,0,1,2]; c=[5,20,66,1314]; [ (a ⑂) ≡ ⧻, (b ⑂) ≡ ⧻, (c ⑂) ≡ ⧻ ] Answer: 3 0 3 3 2 2 0 0 4 ⑂ - SPLIT INTO NEGATIVE,ZERO,POSITIVE (by default, or any array of boolean functions) ≡ - BYROW ⧻ - COUNT