Last active
December 4, 2021 05:33
-
-
Save solanto/42b58947e73b0532013bec67e6246213 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// some one-liner functions i wrote and condensed as far as i could :) | |
// warning! some of these pollute the global namespace! | |
// palindrome checker - 51 chars - string => boolean | |
([...s])=>s.reduce((a,v,i)=>a*=s.reverse()[i]==v,1) | |
// roman numeral generator up to 3999 - 138 chars - integer => string | |
n=>Object.entries({M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}).map(([k,v])=>(a=n,n%=v,k.repeat(a/v))).join`` | |
// shortest vowel distance - 127 chars - lowercase string => array | |
s=>[...s].map((v,i,l)=>Math.min(...[l.slice(0,i+1).reverse(),l.slice(i)].map(w=>(j=w.findIndex(y=>"aeiou".match(y)))<0?1/0:j))) | |
// even smaller by steven torres at edabit.com/challenge/b9FBAhxaijR9fzxgo - 90 chars | |
s=>[...s].map((c,i)=>Math.min(...[...s.matchAll(/[aeiou]/g)].map(j=>Math.abs(j.index-i)))) | |
// caesar cipher - 120 chars - (string, offset) => string | |
c=(([...s],z,n=f=>b=>b>=f&&b<f+27?(b-f+z)%26+f:b)=>String.fromCharCode(...s.map(a=>a.charCodeAt()).map(n(65)).map(n(97)))) | |
// smaller, adapted from solution by user81655 at https://codegolf.stackexchange.com/a/67049 - 93 chars | |
(s,n)=>s.replace(/[a-z]/gi,C=>String.fromCharCode((x=C.charCodeAt(),a=x&96,x-a+n+129)%26-~a)) | |
// number to words for integers 0-999 - 447 chars - integer => string | |
n=>!n?"zero":(s=String,[((q=({11:"eleven",12:"twelve",13:"thirteen",14:"fourteen",15:"fifteen",16:"sixteen",17:"seventeen",18:"eighteen",19:"nineteen"})[m=s(n).match("..$")])&&(n-=m),q),...[...s(n)].reverse().map((e,i)=>!i?["",...(r="one,two,three,four,five,six,seven,eight,nine".split(","))][e]:i<2?",ten,twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety".split(",")[e]:["",...r.map(x=>x+" hundred")][e])].reverse().filter(Boolean).join(" ")) | |
// way smaller, adapted from solution by jistjoalal at edabit.com/challenge/PFH9yEZXSbAngQm7T - 297 chars | |
n=>(o="zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty".split` `,t="twenty thirty fourty fifty sixty seventy eighty ninety".split` `,n<21?o[n]:n>99?o[~~(n/100)]+" hundred "+w(n%100):t[~~(n/10)-2]+" "+o[n%10]) | |
// european spanish regular verb conjugator - 210 chars - lowercase string => string | |
(v,r=(n,R=/..$/,s=v)=>s.replace(R,n),S=r("e",/i(?=.?$)/))=>`Yo ${r`o`}, tú ${r("s",l=/.$/,S)}, él ${e=r("",l,S)}, nosotros ${r("mos",l)}, vosotros ${r(/ar$/.test(v)?"ái":/er$/.test(v)?"éi":"í")}s, ellos ${e}n.` | |
// combination function - 55 chars - (integer k, integer n) => integer | |
(k,n,f=n=>n<2?1:n*f(n-1))=>Math.round(f(n)/f(k)/f(n-k)) | |
// shorter by xAlien95 at edabit.com/challenge/Wk7ScSpAG4wLSqm8k - 25 chars | |
(k,n)=>k?n*c(k-1,n-1)/k:1 | |
// happiness number - 80 chars - string => integer | |
a=>[...a.matchAll(/(?=:\)|\(:)/g)].length-[...a.matchAll(/(?=:\(|\):)/g)].length | |
// https://edabit.com/challenge/eCmEgrKNtnfhpssQp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment