=ArrayFormula(let(r,A1,n,20,JOIN("√",VLOOKUP(0,{mod(r,(n+1-SEQUENCE(n))^2),(n+1-SEQUENCE(n))^2,QUOTIENT(r,(n+1-SEQUENCE(n))^2)},{2,3},false)^{0.5,1})))
=LET(a,RANDBETWEEN(1,6),b,RANDBETWEEN(1,6),c,RANDBETWEEN(1,6),{IF(b+c>a,a,MIN(b+c- 1,a)),IF(a+c>b,b,MIN(a+c-1,b)),IF(a+b>c,c,MIN(a+b-1,c))})
=VALUE(TEXTSPLIT(LET(a,RANDBETWEEN(1,10),b,RANDBETWEEN(1,10),c,RANDBETWEEN(1,10),IF(b+c>a,a,MIN(b+c-1,a))&","&IF(a+c>b,b,MIN(a+c-1,b))&","&IF(a+b>c,c,MIN(a+b-1,c))),","))
=ArrayFormula(let(x,A1,n,1000,if(x=FLOOR(x),x,let(nn,SEQUENCE(n),dd,VLOOKUP(1,{BYROW(nn,LAMBDA(d,IF(x*d=FLOOR(x*d),1,0))),nn},2,false),floor(x*dd)&"/"&dd))))
=ArrayFormula(let(x,A1,n,1000,tol,1E-13,if(abs(x-FLOOR(x))<tol,x,let(nn,SEQUENCE(n),dd,VLOOKUP(1,{BYROW(nn,LAMBDA(d,IF(abs(x*d-FLOOR(x*d))<tol,1,0))),nn},2,false),floor(x*dd)&"/"&dd))))
[■(&@&)│■(&@&)]
//+++++++++++++++++++++++ Utils: Call Server function & others For JS Client side ++++++++++++++++++++++++++++++++
const Utils = {};
Utils.callGasFunction = async function(gasFunctionName, params={}) {
return new Promise((resolve, reject) => {
google.script.run
.withSuccessHandler(response => resolve(JSON.parse(response)))
.withFailureHandler(err => reject(err))
[gasFunctionName](JSON.stringify(params));
})
};
How to use:
async function goToGenQuiz(){
let retObj = await Utils.callGasFunction("ttt", params={});
console.log(retObj);//{error: 'ReferenceError: y is not defined'}
}
//******************** Test create Error for GAS ****************
https://www.w3schools.com/js/js_errors_intro.asp
function ttt() {
try {
let x = 1;
x = y + 1;
return JSON.stringify({x:"ok"});
} catch (err) {
return JSON.stringify({error: err.toString()});
}
}
//******************** Format Date to THAI **************************
new Date(Number( ...date... )).toLocaleString("th-TH", { dateStyle: 'medium', timeStyle: 'short' });
//3 ธ.ค. 2568 16:49
let x = new Date().toLocaleDateString("th-TH", {year: '2-digit', month: 'short', day: 'numeric', hour: "numeric",minute: "numeric",second: "numeric"});
let x2 = new Date().toLocaleString("th-TH", { dateStyle: 'medium', timeStyle: 'short' });