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."); } }); } }); }