Skip to content

Instantly share code, notes, and snippets.

@solanto
Last active December 4, 2021 05:33
Show Gist options
  • Save solanto/42b58947e73b0532013bec67e6246213 to your computer and use it in GitHub Desktop.
Save solanto/42b58947e73b0532013bec67e6246213 to your computer and use it in GitHub Desktop.
// 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