// ==UserScript== // @name Neopets - Lottomatic // @version 0.1.2 // @description Generate lotto numbers with minimal overlap // @author msjanny // @namespace https://www.scriptneo.com/ // @match https://www.neopets.com/games/lottery.phtml* // @grant GM_setValue // @grant GM_getValue // @downloadURL https://www.scriptneo.com/scripts/download.php?id=9 // @updateURL https://www.scriptneo.com/scripts/download.php?id=9 // ==/UserScript== // originally https://www.andrew.cmu.edu/user/kmliu/neopets/lottery.html , used with permission (function() { 'use strict'; /* globals $:false */ var numbers = GM_getValue("numbers", ""); function shuffle(o) { for (var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); return o; }; function leaf(a, b) { var res = new Array(); for (var i = 0; i < a.length; i++) { res[i * 2] = a[i]; res[i * 2 + 1] = b[i]; } return res; }; function generate() { var arr = new Array(); for (var i = 0; i < 30; i++) arr[i] = i + 1; var arr1 = shuffle(arr); var arr2 = leaf(arr1.slice(0, 15), arr1.slice(15, 30)) var arr3 = leaf(arr2.slice(0, 15), arr2.slice(15, 30)) var arr4 = leaf(arr3.slice(0, 15), arr3.slice(15, 30)) var marr = arr1.concat(arr2, arr3, arr4); numbers = new Array(); for (i = 0; i < 20; i++) numbers[i] = [marr[6 * i], marr[6 * i + 1], marr[6 * i + 2], marr[6 * i + 3], marr[6 * i + 4], marr[6 * i + 5]]; GM_setValue('numbers', numbers); populate(); }; function refresh() { $('.tickets').remove(); numbers = []; generate(); }; function populate() { var radiodiv = $('
'); numbers.forEach((ticket, idx) => { radiodiv.append(`
`); }); $('td[width=160]').append(radiodiv); $('.tickets input').change(function() { var ticket = numbers[$(this).val()]; $('input[name="one"]').val(ticket[0]); $('input[name="two"]').val(ticket[1]); $('input[name="three"]').val(ticket[2]); $('input[name="four"]').val(ticket[3]); $('input[name="five"]').val(ticket[4]); $('input[name="six"]').val(ticket[5]); }); $('label').click(function() { let id = $(this).prop("for"); $("#" + id).click(); }); } $('document').ready(function() { var refreshbtn = $('тно') refreshbtn.click(function() { refresh(); }); $('td[width=160]').append(refreshbtn); if (!numbers) generate(); else populate(); }); })();