Loading...
More JavaScript Posts
questions = Array.from(document.querySelectorAll(".multiple-choice-question"));async function hackRadio(question){if(question.querySelector(".question-chevron").getAttribute("aria-label") == "Question completed") return;let answerChoices = question.querySelectorAll(".zb-radio-button");async function guess(answerChoice){answerChoice.querySelector("label").click();}let pause = 0;for(let answerChoice of answerChoices){setTimeout(()=>{guess(answerChoice)},pause); //No need to check given that it will record the correct answer anyways.pause += 1000;}}for(let question of questions){hackRadio(question);}questions = Array.from(document.querySelectorAll(".short-answer-question"));async function hackShortAnswer(question){if(question.querySelector(".question-chevron").getAttribute("aria-label") == "Question completed") return;question.querySelector("textarea").value = question.querySelector(".forfeit-answer").textContent;//question.querySelector(".check-button").click(); They are smart bastards}for(let question of questions){const showAnswerButton = question.querySelector(".show-answer-button");showAnswerButton.click();showAnswerButton.click();hackShortAnswer(question);}
class Graph {constructor(directed = true) {this.directed = directed;this.nodes = [];this.edges = new Map();}addNode(key, value = key) {this.nodes.push({ key, value });}addEdge(a, b, weight) {this.edges.set(JSON.stringify([a, b]), { a, b, weight });if (!this.directed)this.edges.set(JSON.stringify([b, a]), { a: b, b: a, weight });}removeNode(key) {this.nodes = this.nodes.filter(n => n.key !== key);[...this.edges.values()].forEach(({ a, b }) => {if (a === key || b === key) this.edges.delete(JSON.stringify([a, b]));});}removeEdge(a, b) {this.edges.delete(JSON.stringify([a, b]));if (!this.directed) this.edges.delete(JSON.stringify([b, a]));}findNode(key) {return this.nodes.find(x => x.key === key);}hasEdge(a, b) {return this.edges.has(JSON.stringify([a, b]));}setEdgeWeight(a, b, weight) {this.edges.set(JSON.stringify([a, b]), { a, b, weight });if (!this.directed)this.edges.set(JSON.stringify([b, a]), { a: b, b: a, weight });}getEdgeWeight(a, b) {return this.edges.get(JSON.stringify([a, b])).weight;}adjacent(key) {return [...this.edges.values()].reduce((acc, { a, b }) => {if (a === key) acc.push(b);return acc;}, []);}indegree(key) {return [...this.edges.values()].reduce((acc, { a, b }) => {if (b === key) acc++;return acc;}, 0);}outdegree(key) {return [...this.edges.values()].reduce((acc, { a, b }) => {if (a === key) acc++;return acc;}, 0);}}const g = new Graph();g.addNode('a');g.addNode('b');g.addNode('c');g.addNode('d');g.addEdge('a', 'c');g.addEdge('b', 'c');g.addEdge('c', 'b');g.addEdge('d', 'a');g.nodes.map(x => x.value); // ['a', 'b', 'c', 'd'][...g.edges.values()].map(({ a, b }) => `${a} => ${b}`);// ['a => c', 'b => c', 'c => b', 'd => a']g.adjacent('c'); // ['b']g.indegree('c'); // 2g.outdegree('c'); // 1g.hasEdge('d', 'a'); // trueg.hasEdge('a', 'd'); // falseg.removeEdge('c', 'b');[...g.edges.values()].map(({ a, b }) => `${a} => ${b}`);// ['a => c', 'b => c', 'd => a']g.removeNode('c');g.nodes.map(x => x.value); // ['a', 'b', 'd'][...g.edges.values()].map(({ a, b }) => `${a} => ${b}`);// ['d => a']g.setEdgeWeight('d', 'a', 5);g.getEdgeWeight('d', 'a'); // 5
//Disclaimer: I do not condone mass web scraping of ESPN websites, and this is just theoretical code that hasn't been used.//Scrape player stats off of https://www.espn.com/nfl/team/roster/_/name/phi/philadelphia-eagles//Example player JS object/*{"shortName": "S. Opeta","name": "Sua Opeta","href": "http://www.espn.com/nfl/player/_/id/3121009/sua-opeta","uid": "s:20~l:28~a:3121009","guid": "dec19157-e984-f981-3724-498281328c97","id": "3121009","height": "6' 4\"","weight": "305 lbs","age": 27,"position": "G","jersey": "78","birthDate": "08/15/96","headshot": "https://a.espncdn.com/i/headshots/nfl/players/full/3121009.png","lastName": "Sua Opeta","experience": 4,"college": "Weber State"}*///The page needs to be focused, so you have to put this code in a bookmarklet and click the page before clicking it. Allegedly.navigator.clipboard.writeText(JSON.stringify(window["__espnfitt__"].page.content.roster.groups.flatMap((group)=>{return group.athletes.map((athlete)=>{//We can assume all football players are above 100 lbs and below 1000 lbs.athlete.weight = parseInt(athlete.weight.substring(0,3));if(athlete.experience == "R") athlete.experience = 0;else athlete.experience = parseInt(athlete.experience);//We can assume players are at least 1 foot, or under 10 feet tall.athlete.inches = 12 * parseInt(athlete.height.substring(0, 1)); //Add feet in inchesathlete.inches += parseInt(athlete.height.substring(2).replaceAll("\"", "").trim()); //Add remaining inchesconst monthDayYear = athlete.birthDate.split("/");athlete.birthMonth = parseInt(monthDayYear[0]);athlete.birthDay = parseInt(monthDayYear[1]);athlete.birthYear = parseInt(monthDayYear[2]);//The only really useful stuff we get from this is Height, weight, left handedness, age, position, and birthdayreturn athlete;});}), null, "\t")).then(null, ()=>{alert("That failed.")});//Changes all the team links on this page https://www.espn.com/nfl/stats/team to the team's roster for easier scraping$$("table > tbody > tr > td > div > div > a").forEach((elm)=>{elm.setAttribute("href", elm.getAttribute("href").replace("team/", "team/roster/"));});
const hammingDistance = (num1, num2) =>((num1 ^ num2).toString(2).match(/1/g) || '').length;hammingDistance(2, 3); // 1
router.post("/", async (req, res) => {const { email, password } = req.body;try {if (!email) return res.status(400).json({ msg: "An email is required" });if (!password)return res.status(400).json({ msg: "A password is required" });const user = await User.findOne({ email }).select("_id password");if (!user) return res.status(400).json({ msg: "Invalid credentials" });const match = await bcrypt.compare(password, user.password);if (!match) return res.status(400).json({ msg: "Invalid credentials" });const accessToken = genAccessToken({ id: user._id });const refreshToken = genRefreshToken({ id: user._id });res.cookie("token", refreshToken, {expires: new Date(Date.now() + 604800),httpOnly: true,});res.json({ accessToken });} catch (err) {console.log(err.message);res.status(500).json({ msg: "Error logging in user" });}});
const union = (...arr) => [...new Set(arr.flat())];// Exampleunion([1, 2], [2, 3], [3]); // [1, 2, 3]