Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,55 @@
function luckyNumbers(opts={}) {
/**************************************************************************\
| OPTIONS |
|**************************************************************************|
| even ...... boolean ............. return even/uneven numbers |
| (default: false) |
| |
| nth ....... number ............... return nth number |
| |
| through ... number ............... return numbers from #1 to number |
| OR array[from, to] ... return numbers on index |
| from array[from] to array[to] |
| |
| range ..... array[from, to] ...... return numbers between from and to |
\**************************************************************************/
opts.even = opts.even || false;
if (typeof opts.through == 'number') opts.through = [0, opts.through];
let out = [],
x = opts.even ? 2 : 1,
max = opts.range ? opts.range[1] * 3
: opts.through ? opts.through[1] * 12
: opts.nth ? opts.nth * 15
: 2000;
for (x; x <= max; x = x+2) out.push(x); // fill
for (x = 1; x < Math.floor(out.length / 2); x++) { // sieve
let i = out.length;
while (i--)
(i+1) % out[x] == 0 && out.splice(i, 1);
}
if (opts.nth) return out[opts.nth-1];
if (opts.through) return out.slice(opts.through[0], opts.through[1]);
if (opts.range) return out.filter(function(val) {
return val >= opts.range[0] && val <= opts.range[1];
});
return out;
}
/* TESTING */
// blank
console.log( luckyNumbers() );
// showing the first twenty lucky numbers
console.log( luckyNumbers({through: 20}) );
// showing the first twenty even lucky numbers
console.log( luckyNumbers({even: true, through: 20}) );
// showing all lucky numbers between 6,000 and 6,100 (inclusive)
console.log( luckyNumbers({range: [6000, 6100]}) );
// showing all even lucky numbers in the same range as above
console.log( luckyNumbers({even: true, range: [6000, 6100]}) );
// showing the 10,000th lucky number (extra credit)
console.log( luckyNumbers({nth: 10000}) );
// showing the 10,000th even lucky number (extra credit)
console.log( luckyNumbers({even: true, nth: 10000}) );

View file

@ -0,0 +1,88 @@
(function() {
document.write(`
<table>
<tr><th>argument(s)<br>space separated</th><th>gives</th></tr>
<tr><td>$j</td><td><i>j</i><sup>th</sup> lucky number</tr>
<tr><td>$j lucky</td><td><i>j</i><sup>th</sup> lucky number</tr>
<tr><td>$j evenLucky</td><td><i>j</i><sup>th</sup> even lucky number</tr>
<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td>$j $k</td><td><i>J</i><sup>th</sup> through <i>k</i><sup>th</sup> (inclusive) lucky numbers</td></tr>
<tr><td>$j $k lucky</td><td><i>J</i><sup>th</sup> through <i>k</i><sup>th</sup> (inclusive) lucky numbers</td></tr>
<tr><td>$j $k evenLucky</td><td><i>J</i><sup>th</sup> through <i>k</i><sup>th</sup> (inclusive) even lucky numbers</td></tr>
<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td>-$j</td><td>all lucky numbers in the range 1 .. |<i>j</i>|*</tr>
<tr><td>$j -$k</td><td>all lucky numbers in the range <i>j</i> .. |<i>k</i>|*</tr>
<tr><td>$j -$k lucky</td><td>all lucky numbers in the range <i>j</i> .. |<i>k</i>|*</tr>
<tr><td>$j -$k evenLucky</td><td>all even lucky numbers in the range <i>j</i> .. |<i>k</i>|*</tr>
</table>
<p>* where |<i>x</i>| is the absolute value of <i>x</i></p>
`);
let args = prompt('Enter a luckyNumbers argument string:').split(' '),
numbers = [],
strings = [],
obj = {}, // object to pass to our luckyNumbers function
msg = '';
for (let x = 0; x < args.length; x++) {
if (isNaN(parseInt(args[x]))) strings.push(args[x].toUpperCase());
else numbers.push(parseInt(args[x]));
}
// check strings
switch (true) {
case (strings.length > 1):
msg += 'Too many arguments.';
break;
case (strings.length == 0): break;
case (strings[0] != 'LUCKY' && strings[0] != 'EVENLUCKY'):
msg += `Unknown argument: ${strings[0]}.`;
break;
case (strings[0] == 'EVENLUCKY'): obj.even = true;
}
// check numbers
switch (true) {
case (numbers.length == 0):
msg += 'Missing number argument.';
break;
case (numbers.length > 2):
msg += 'Too many number arguments.';
break;
case (numbers.length == 1):
if (numbers[0] > 0) obj.nth = numbers[0];
else obj.through = Math.abs(numbers[0]);
break;
case (numbers.length == 2):
// both negative
if (numbers[0] < 0 && numbers[1] < 0) {
msg += 'Missing positive argument';
break;
}
// negative + positive
numbers.sort();
if (numbers[0] < 0 && numbers[1] > 0) {
obj.range = [numbers[1], Math.abs(numbers[0])];
break;
}
// both positive
if (numbers[0] > 0 && numbers[1] > 0) {
obj.through = [numbers[0]-1, numbers[1]];
}
}
if (msg.length > 0)
document.write(`<p>${msg}<br>Reload to try again</p>`);
else {
let res;
try { res = luckyNumbers(obj); }
catch (err) {
document.write(`<p>${err}<br>Reload to try again</p>`);
}
finally {
if (typeof res == 'object' ) res = res.join(', ');
document.write(`
<p>
<b>Input: </b>${args.join(' ')}<br>
<b>Result: </b>${res}
</p>
<p>Reload to continue</p>
`)
}
}
})();