Idioms - kevinlawler/kona GitHub Wiki
Anyone may add idioms to the list. See also K by example.
Swap Variable Values |
x[2 5]:x[5 2] p:2 5; x[p]:x@|p |
Coerce Array | (),x |
Fill (right) to length | fr: {@[y#z;!#x;:;x]} |
Fill (left) to length | fl: {(#x)!@[y#z;!#x;:;x]} |
Factorial | */1+!: |
|||
Fibonacci | {(x(|+\)\1 1)[;1]} |
|||
Fibonacci | {x{x,+/-2#x}/!2} |
|||
Recursive Fibonacci | {:[x<2;1;_f[x-1]+_f[x-2]]} |
|||
Recursive Fibonacci (memoized) | {c::.();{v:c[a:`$$x];:[x<3;1;:[_n~v;c[a]:_f[x-1]+_f[x-2];v]]}x} |
|||
Maximum subsequence sum | |/0(0|+)\ |
|||
Positive divisors of n, inclusive | {&~x!'!1+x} |
|||
Positive divisors of n, inclusive (faster) | {d:&~x!'!1+_sqrt x;d,_ x%|d} |
|||
Reduced digit sum | +/0$'$: |
|||
Collatz sequence | (1<){:[x!2;1+3*x;_ x%2]}\ |
|||
Collatz sequence (shorter) | (1<){(_ x%2;1+3*x)x!2}\ |
|||
Identity matrix |
|
|||
GCD |
gcd:{:[~x;y;_f[y;x!y]]}
gcd:{*{0<x 1}{{(y;x!y)}.(x)}/(x;y)}
|
|||
LCM | {_ x*y%gcd[x;y]} |
|||
Magnitude | {_sqrt+/_sqr x} |
|||
Log base n | logn: {(_log x)%_log y} |
|||
Vector Dot Product |
|
|||
3×3 matrix determinant | dt33:{-/{+/(*)/(!).'+(y*!3;x)}[x]'1 -1} |
|||
3-Vector Cross Product |
cross: {{-/{(*)/(!).'+(y*1+!2;x)}[x]'1 -1}2 3#x,y}
|
|||
Unit Vector | unit: {x%\:_sqrt x _dot x} |
Primes to n, exclusive | 2_&{&/x!'2_!x}'!: |
Primes to n, sieve | {2_&{:[x@y;x&@[1,-1_ z#(1_ y#1),0;y;:;1];x]}/[x#1;2_!__ceil_sqrt x;x]} |
Primes to n, sieve (Arthur 1) | {:[x<4;,2;r,1_&~|/x#'~!:'r: _f[_ _ceil _sqrt x]]} |
Is n a prime? |
|
Next prime | {~isp x}{x+1}/ |
First n primes | prsn: {(x-1){:[isp n:x+1;n;_f n]}\2} |
N’th prime | prn: {*|prsn x} |
Prime factors |
pfac:{ n:2,3+2*!.5*_sqrt x d:n@&~x!'n m:d@&~1<+/~d!\:/:d p:,/{n:+/0=x!'y^1+!_ logn[x;y];n#y}[x;]'m :[_n~p;x;_dv[p,_ x%*/p;1]]} |
Pascal’s triangle with n+1 rows | pasc: {x{+':0,x,0}\1} |
|||
Binomial |
{[n;k]pasc[n][n;k]} {[n;k]i:!k-1;_*/(n-i)%i+1}
|
|||
Is x a permutation vector? | x~<<x |
|||
Random permutation of 0,…,n-1 | n _draw -n |
|||
Nth permutation | nperm: {y@{{<:<:y,x}/|x}'+({a-!a:#x}y)_vs(@x),:/x} |
|||
Permutation index | {(a-!a:#x)_sv{+/x<*x}'(!#x)_\:x} |
|||
Permutations on n elements |
|
|||
Permutation cycles | {{={x[y]@<x[y]}[x]'!#x}(x\'!#x)} |
|||
All permutations of x with the length y
|
permlen:{x@v@&((y;1)~^=:)'v:!y##x} |
|||
Combinations, k out of n elements | {{x@<x}@&:'k(?,/(1!)\'r,')/,(r:k=y)=&x-k:y&x-y} |
|||
Combinations, k out of n elements, unsorted, unoptimized | {&:'y(?,/(1!)\'1,')/,&x-y} |
|||
Enumerate all values of length x in base y |
{(x#y)_vs!_ y^x} {!x#y}
|
|||
Bitstrings of length x |
{(x#2)_vs!_ 2^x} {!x#2} !2+&:
|
|||
Power set |
{x@/:&:'2_vs!_2^#x} {x[&:'!2+&#x]}
|
|||
Are all values in the array different? | {(#x)=#?x} |
|||
Sliding window | {(!1+y-x)+\:!x} |
Arithmetic mean | am: {(+/x)%#x} |
Harmonic mean | %am@%: |
Geometric mean | {(*/x)^%#x} |
Median | {(x@<x)@_(#x)%2} |
Sample variance | sv: {+/(_sqr x-am x)%#x} |
Standard deviation | {_sqrt sv x} |
Histogram | {c:w@*:'=w:x;@[(1+|/c)#0;c;:;(#:'=w)]} |
Is x a leap year? | {(+/~x!'4 100 400)!2} |
Day of the Week | `Mon`Tue`Wed`Thu`Fri`Sat`Sun@(_ _t%86400)!7 |
Sort list | x@<x |
Sort list | x[<x] |
Sort list function | {x@<x} |
Sort list descending | x@>x |
Unique |
{x[*:'=x]} |
Non-unique elements |
{x@&1<#:'=x} |
Quicksort | {f:*x@1?#x;:[0=#x;x;,/(_f x@&x<f;x@&x=f;_f x@&x>f)]} |
Overlapping infixes | {:[y>#x;,x;x@(!y)+/:!(1-y)+#x]} |
Non-overlapping infixes | {(y*!_ceil(#x)%y)_ x} |
Main diagonal | {x ./:n,'n:!#x} |
Secondary diagonals | {x ./:/:f@-1_1_=+/'f:,/n,/:\:n:!#x} |
Delete leading blanks | dlb: {x@&|\~x=" "} |
Delete trailing blanks | {|dlb@|x} |
Delete multiple blanks | {x@&a|1_1!1,a:~x=" "} |
Left justify | {(+/&\x=" ")!x} |
Right justify | {(1-(x=" ")_sv 1)!x} |
Lower Case Letters | lcase: _ci 97+!26 |
Upper Case Letters | ucase: _ci 65+!26 |
To Lower Case | {@[x;p;:;lcase@n@p:&26>n:ucase?/:x]} |
To Upper Case | {@[x;p;:;ucase@n@p:&26>n:lcase?/:x]} |
Frequency table (sorted) | {b@<b:(x@*:'a),'#:'a:=x} |
|||
Anagrams | {x g@&1<#:'g:={x@<x}'x} |
|||
Rot 13 | {a:+65 97+\:2 13#!26;_ci@[!256;a;:;|a]_ic x} |
|||
8-queens | p@&{a:{(#x)=#?x};i:!#x;a[x[i]+i]&a[x[i]-i]}'(p:perm 8) Variants: p@&{&/{(#x)=#?x}'(x[i]+i;x[i]-i:!#x)}'(p:perm 8) p@&{&/{(#x)=#?x}'(+;-).\:(x[i];i:!#x)}'(p:perm 8) |
|||
Perfect shuffle | {x@<>(#x)#1 0} |
|||
Perfect shuffle (for 2*n) |
|
|||
Life (Knuth’s approach) |
|
|||
One dimensional cellular automata (rule 104) | "_X"@{2=+/(0,x,0)@(!#x)+/:!3}\0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 |