NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Broodle
// @namespace https://github.com/relaxxpls/Broodle
// @version 1.0.0
// @description Brute Force Moodle Questions!
// @author relaxxpls
// @copyright 2021, relaxxpls (https://github.com/relaxxpls)
// @license MIT; https://raw.githubusercontent.com/relaxxpls/Broodle/main/LICENSE
// @icon https://raw.githubusercontent.com/relaxxpls/broodle/main/docs/icon.png
// @homepageURL https://github.com/relaxxpls/Broodle
// @supportURL https://github.com/relaxxpls/Broodle/issues
// @match https://*/mod/quiz/attempt.php*
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
// Features:
// 1. Can do about 1,000 attempts in 10 mins!
// 2. Tries values from [1e-5, 1e5] with 2 significant fig accuracy
// 3. Customisable to use other ranges
;(function () {
'use strict'
let answerInput = document.querySelector('input[type=text].formulas_numeric')
let checkButton = document.querySelector('input[type=submit][value=Check]')
// Decimal range 1e-5 to 1e5
var i = GM_getValue('broodle_i', -5)
var j = GM_getValue('broodle_j', 0.1)
answerInput.value = j.toPrecision(3) + 'e' + i
j += 0.1
if (j < 10) {
GM_setValue('broodle_j', j)
} else {
j = 0.1
i++
GM_setValue('broodle_j', j)
GM_setValue('broodle_i', i)
}
// Check current status
let statusNode = document.querySelector('.grade')
const status = statusNode.innerText[5] - '0'
if (status) {
// Reset
GM_setValue('broodle_j', 0.1)
GM_setValue('broodle_i', -5)
alert('Answer = ' + j.toPrecision(3) + 'e' + i)
} else if (i <= 5) {
checkButton.click()
}
})()