Files
2025-02-22 03:37:47 -07:00

68 lines
2.6 KiB
JavaScript

import { getNodes } from "getNodes.js";
// Contract Solution Imports
import { caesarEncrypt } from "contracts/CaesarEncryption.js";
import { lzDecompress } from "contracts/LZ-Decompress.js";
import { generateIPAddresses } from "contracts/GenerateIPAddresses.js";
/** @param {NS} ns */
export async function main(ns) {
const nodes = await getNodes(ns);
var listAllContracts = false;
if(nodes == null || nodes.length == 0) {
ns.tprint("Error retrieving nodes!");
return;
}
if(ns.args.length != 0) {
if((ns.args[0] == "--all" || ns.args[0] == "-a") && ns.args.length == 1) {
listAllContracts = true;
} else {
ns.tprint("Invalid usage!");
return;
}
}
// scan(host)
nodes.forEach(function(n) {
if(n != "" || n != "\n") {
var contracts = [];
var files = ns.ls(n);
files.forEach(function(f) {
if(f.endsWith(".cct")) {
if(listAllContracts) {
ns.tprint(n + ":" + ns.codingcontract.getContractType(f, n));
}
contracts.push(f);
}
});
contracts.forEach(function(c) {
var contractType = ns.codingcontract.getContractType(c, n);
var data = ns.codingcontract.getData(c, n);
if(contractType == "Encryption I: Caesar Cipher") {
var answer = caesarEncrypt(data[0], data[1])
var attempt = ns.codingcontract.attempt(answer, c, n);
if(attempt)
ns.tprint(attempt);
else
ns.tprint("Attempt failed! Manual intervention is required.");
} else if(contractType == "Compression II: LZ Decompression") {
var answer = lzDecompress(ns, data);
var attempt = ns.codingcontract.attempt(answer, c, n);
if(attempt)
ns.tprint(attempt);
else
ns.tprint("Attempt failed! Manual intervention is required.");
} else if(contractType == "Generate IP Addresses") {
var answer = generateIPAddresses(data[0]);
var attempt = ns.codingcontract.attempt(answer, c, n);
if(attempt)
ns.tprint(attempt);
else
ns.tprint("Attempt failed! Manual intervention is required.");
}
});
}
});
}