using MathJax V4.0 & Prism.js
for math display and syntax highlights
also this was for fun so idc abt user-friendliness
Multinomial Solver
expanded
v JS code v
function solveMultinomial(a, n){
let exponents = solveExponents(a, n)
let result = {
coefficients: solveCoefficients(exponents, n),
exponents: exponents,
a: a,
n: n
}
return result
}
function solveExponents(a, n){
let exponents = new Array(a).fill(null).map(() => [0])
exponents[0][0] = n
let i = 1
while((exponents[a - 1][exponents[a - 1].length - 1]) != n){
for(j = 0; j <= a - 1; j++){
if((j != 0) && (exponents[j - 1][i] - exponents[j - 1][i - 1] == -1)){
exponents[j].push(n)
for(let k = 0; k <= j - 1; k++){
exponents[j][i] -= exponents[k][i]
}
}
else{
let highValue0 = n
for(let k = 0; (k <= j) && (k < a - 1); k++){
highValue0 -= exponents[k][i - 1]
}
if(exponents[a - 1][i - 1] == highValue0){
exponents[j].push(exponents[j][i - 1] - Math.sign(exponents[j][i - 1]))
let highValue1 = n
for(let k = 0; (k < j); k++){
highValue1 -= exponents[k][i]
}
if((exponents[j][i] > highValue1) && (j != 0)){
exponents[j][i] = 0
}
}
else{
exponents[j].push(exponents[j][i - 1])
}
}
}
i++
if(i > 2000){console.error("Code ran over 2000 times, what have you done."); window.alert("Code ran over 2000 times, that sucks."); break}
}
return exponents
}
function solveCoefficients(e, n){
let coefficients = []
for(let k = 0; k <= e[0].length - 1; k++){
let currentExponents = new Array(e.length)
for(i = 0; i <= e.length - 1; i++){
currentExponents[i] = factorial(e[i][k])
}
coefficients.push(factorial(n) / prod(currentExponents))
}
return coefficients
}
function factorial(n){
if (n < 0) {
return "Factorial is not defined for negative numbers."
}
if (n === 0 || n === 1) {
return 1
}
let result = 1
for (let i = 1; i <= n; i++) {
result *= i
}
return result
}
function total(l){
return l.reduce((accumulator, currentValue) => accumulator + currentValue, 0)
}
function prod(l){
let result = 1
for(let i = 0; i <= l.length - 1; i++){
result *= l[i]
}
return result
}
document.getElementById('solveButton').onclick = function(){
let result = solveMultinomial(Number(document.getElementById('input0').value), Number(document.getElementById('input1').value)) //dont touch fisjh :(
const CHAR = "abcdefghijklmnopqrstuvwxyz"
document.getElementById('inputDisplay').innerText = "$$("
for(let i = 0; i <= result.a - 1; i++){
document.getElementById('inputDisplay').innerText += CHAR.charAt(i)
+ ((i == result.a - 1) ? "" : "+")
}
document.getElementById('inputDisplay').innerText += ")^{" + String(result.n) + "}$$"
let displayFullText = ""
let dispalyVars = ""
function varsAndExponents(i){
let idkwhattonamethisimtiredandits4am = ""
for(let j = 0; j <= result.a - 1; j++){
if(result.exponents[j][i] != 0){
idkwhattonamethisimtiredandits4am += CHAR.charAt(j)
+ ((result.exponents[j][i] > 1) ? ("^{" + String(result.exponents[j][i]) + "}") : (""))
}
}
return idkwhattonamethisimtiredandits4am
}
for(let i = 0; (i <= result.coefficients.length - 1); i++){
displayFullText += ((result.coefficients[i] == 1) ? "" : String(result.coefficients[i])) + (varsAndExponents(i))
+ (((i == result.coefficients.length - 1)) ? "" : "+")
if((i % 15 == 0) && i > 0){displayFullText += "<wbr>"}
}
document.getElementById('resultDisplay').innerHTML = "$$" + displayFullText + "$$"
MathJax.typesetPromise([document.getElementById('inputDisplay')])
MathJax.typesetPromise([document.getElementById('resultDisplay')])
console.log(result)
}
function rand(){
document.getElementById("body").style.setProperty('--rand', Math.random() * 75 + 128 - (75 / 2))
}
setInterval(rand, 5000)
let h1Angle = 0;
function updateAngle(){
document.getElementById("h1").style.transform = ` rotateX(${360 * Math.cos(h1Angle / (360 / Math.PI))}deg)`
if(h1Angle < 360 - 1){
h1Angle += 1
}
else{
h1Angle = 0
}
}
setInterval(updateAngle, 1)
/****************************
--------wubleu_w.2K25--------
(⊙ˍ⊙)
****************************/