Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
45
Task/Fractran/JavaScript/fractran-1.js
Normal file
45
Task/Fractran/JavaScript/fractran-1.js
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// Parses the input string for the numerators and denominators
|
||||
function compile(prog, numArr, denArr) {
|
||||
let regex = /\s*(\d*)\s*\/\s*(\d*)\s*(.*)/m;
|
||||
let result;
|
||||
while (result = regex.exec(prog)) {
|
||||
numArr.push(result[1]);
|
||||
denArr.push(result[2]);
|
||||
prog = result[3];
|
||||
}
|
||||
return [numArr, denArr];
|
||||
}
|
||||
|
||||
// Outputs the result of the compile stage
|
||||
function dump(numArr, denArr) {
|
||||
let output = "";
|
||||
for (let i in numArr) {
|
||||
output += `${numArr[i]}/${denArr[i]} `;
|
||||
}
|
||||
return `${output}<br>`;
|
||||
}
|
||||
|
||||
// Step
|
||||
function step(val, numArr, denArr) {
|
||||
let i = 0;
|
||||
while (i < denArr.length && val % denArr[i] != 0) i++;
|
||||
return numArr[i] * val / denArr[i];
|
||||
}
|
||||
|
||||
// Executes Fractran
|
||||
function exec(val, i, limit, numArr, denArr) {
|
||||
let output = "";
|
||||
while (val && i < limit) {
|
||||
output += `${i}: ${val}<br>`;
|
||||
val = step(val, numArr, denArr);
|
||||
i++;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
// Main
|
||||
// Outputs to DOM (clears and writes at the body tag)
|
||||
let body = document.body;
|
||||
let [num, den] = compile("17/91 78/85 19/51 23/38 29/33 77/29 95/23 77/19 1/17 11/13 13/11 15/14 15/2 55/1", [], []);
|
||||
body.innerHTML = dump(num, den);
|
||||
body.innerHTML += exec(2, 0, 15, num, den);
|
||||
Loading…
Add table
Add a link
Reference in a new issue