Skip to content

Commit

Permalink
update to get the archmagi github yearly contrib count
Browse files Browse the repository at this point in the history
  • Loading branch information
joshparkerj committed Aug 25, 2024
1 parent 619356a commit 896ed82
Show file tree
Hide file tree
Showing 3 changed files with 157 additions and 37 deletions.
30 changes: 24 additions & 6 deletions bootdev/archmagi.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,35 @@ const sleeper = (ms, f) => (

return deetsResult;
});
let githubFollowers = 0;
let githubDeets = { followers: 0, yearlyContributions: 0 };
if (deets.github && getGithubCheckbox.checked) {
githubFollowers = await sleeper(2000 * i, () => (GM.xmlHttpRequest({ url: deets.github })
.then((r) => r.responseText).then((t) => {
githubDeets = await sleeper(2000 * i, () => (GM.xmlHttpRequest({ url: deets.github })
.then((r) => r.responseText).then(async (t) => {
const dom = parser.parseFromString(t, 'text/html');
const followersLink = dom.querySelector('a[href$=followers] span');
if (!followersLink) {
return 0;
return { followers: 0, yearlyContributions: 0 };
}

return Number(followersLink.textContent);
const followers = Number(followersLink.textContent);
const contribUrl = `https://github.com${dom.querySelector('include-fragment[src]').getAttribute('src')}`;
const yearlyContributions = await GM.xmlHttpRequest({ url: contribUrl, headers: { 'x-requested-with': 'XMLHttpRequest' } })
.then((r) => r.responseText).then((contribText) => {
const contribDom = parser.parseFromString(contribText, 'text/html');
const yearlyContributionsHeading = contribDom.querySelector('.js-yearly-contributions h2');
if (!yearlyContributionsHeading) {
return { followers, yearlyContributions: 0 };
}

const yearlyContributionsText = yearlyContributionsHeading.textContent;
console.log(yearlyContributionsText);
const yearlyContributionsTextSplit = yearlyContributionsText.split(/\s+/)[1];
console.log(yearlyContributionsTextSplit);
const result = Number(yearlyContributionsTextSplit.replace(/\D+/g, ''));
console.log(result);
return result;
});
return { followers, yearlyContributions };
})));
}

Expand All @@ -78,7 +96,7 @@ const sleeper = (ms, f) => (
const age = Math.round((Date.now() - deets.start) / milliPerDay);
const lessonsSolvedPerDay = deets.lessonsSolved / age;
const completedDeets = {
...deets, end, time, age, lessonsSolvedPerDay, githubFollowers,
...deets, end, time, age, lessonsSolvedPerDay, githubFollowers: githubDeets,
};

console.log(completedDeets);
Expand Down
108 changes: 77 additions & 31 deletions gmw/cheat-wos.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

const score = (w) => [...w].reduce((acc, c) => acc + pointValues[c], 0);

/* const makePrefixTree = (dictArray) => {
const makePrefixTree = (dictArray) => {
const tree = {};

const addChild = (node, c) => {
Expand All @@ -69,7 +69,7 @@

return tree;
};
*/

const abcObj = {};

[...abc].forEach((c) => {
Expand Down Expand Up @@ -111,7 +111,7 @@
solveHelper(prefixTreeRoot);
return solutions;
};
/*

const fake = (scramble) => (
[...scramble].map((_, i) => [...scramble].slice(0, i).concat([...scramble].slice(i + 1)))
);
Expand All @@ -124,7 +124,7 @@
)).filter((solution) => solution[0]?.length === scramble.length - 1);
};

const solveHidden = (scramble) => (
/* const solveHidden = (scramble) => (
[...abc].map((c) => solveFake(scramble + c))
);
Expand Down Expand Up @@ -175,6 +175,24 @@
};
*/
// create the UI
const wosMain = document.createElement('main');
wosMain.id = 'wos';
document.body.appendChild(wosMain);

let gameModeGlobal = 'no-fake-no-hidden';
const gameModeHTML = `
<legend>Game Mode:</legend>
<input type="radio" id="game-mode-no-fake-no-hidden" name="game-mode" value="no-fake-no-hidden" checked />
<label for="game-mode-no-fake-no-hidden">No fake letters; no hidden letters</label>
<input type="radio" id="game-mode-one-fake-no-hidden" name="game-mode" value="one-fake-no-hidden" />
<label for="game-mode-one-fake-no-hidden">One fake letter; no hidden letters</label>
`;

const gameModeFieldset = document.createElement('fieldset');
gameModeFieldset.id = 'wos-game-mode';
gameModeFieldset.addEventListener('change', ({ target: { value: gameMode } }) => {
gameModeGlobal = gameMode;
});

let minimumWordLength = 4;
const minimumWordLengthHTML = `
Expand All @@ -189,59 +207,87 @@
wosForm.id = 'wos';

const minimumWordLengthFieldset = document.createElement('fieldset');
minimumWordLengthFieldset.id = 'minimum-word-length';
minimumWordLengthFieldset.id = 'wos-minimum-word-length';
minimumWordLengthFieldset.addEventListener('change', ({ target: { value: minWordLength } }) => {
console.log(`set min word length to: ${minWordLength}`);
minimumWordLength = minWordLength;
});

wosForm.innerHTML = minimumWordLengthHTML;
gameModeFieldset.innerHTML = gameModeHTML;
wosForm.appendChild(gameModeFieldset);

minimumWordLengthFieldset.innerHTML = minimumWordLengthHTML;
wosForm.appendChild(minimumWordLengthFieldset);

const solutionsSection = document.createElement('section');
solutionsSection.id = 'wos-solutions-section';

const displayWord = (parentElement) => (word) => {
const solutionDiv = document.createElement('div');
solutionDiv.appendChild(new Text(`${word} ${score(word)}`));
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.name = 'not-in-dictionary';
checkbox.value = word;
checkbox.id = `${checkbox.name}-${checkbox.value}`;
solutionDiv.appendChild(checkbox);
const checkboxLabel = document.createElement('label');
checkboxLabel.for = checkbox.id;
checkboxLabel.appendChild(new Text('not in dictionary'));
solutionDiv.appendChild(checkboxLabel);
parentElement.appendChild(solutionDiv);
};

const solutions = document.createElement('div');
solutions.id = 'wos-solutions';
const scrambleInput = document.createElement('input');
scrambleInput.addEventListener('change', ({ target: { value: scramble } }) => {
console.log(`got scramble: ${scramble}`);
solutions.innerHTML = '';
solve(scramble)
.filter((w) => w.length >= minimumWordLength)
.filter((w) => !fakeWords.has(w))
.sort((a, b) => a.length - b.length)
.forEach((word) => {
const solution = document.createElement('div');
solution.appendChild(new Text(`${word} ${score(word)}`));

const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.name = 'not-in-dictionary';
checkbox.value = word;
solution.appendChild(checkbox);

solutions.appendChild(solution);
solutionsSection.innerHTML = '';

if (gameModeGlobal === 'no-fake-no-hidden') {
const solutions = document.createElement('div');
solutions.classList.add('wos-solutions');
solutionsSection.appendChild(solutions);
solve(scramble)
.filter((w) => w.length >= minimumWordLength)
.filter((w) => !fakeWords.has(w))
.sort((a, b) => a.length - b.length)
.forEach(displayWord(solutions));
} else if (gameModeGlobal === 'one-fake-no-hidden') {
solveFake(scramble).forEach((solutionSet) => {
const solutions = document.createElement('div');
solutions.classList.add('wos-solutions');
solutionsSection.appendChild(solutions);
solutionSet.filter((w) => w.length >= minimumWordLength)
.filter((w) => !fakeWords.has(w))
.sort()
.sort((a, b) => a.length - b.length)
.forEach(displayWord(solutions));
});
}
});

wosForm.appendChild(scrambleInput);
document.body.appendChild(wosForm);
document.body.appendChild(solutions);
wosMain.appendChild(wosForm);
wosMain.appendChild(solutionsSection);

const style = document.createElement('style');
style.appendChild(new Text(`
div#wos-solutions {
div.wos-solutions {
display: flex;
flex-direction: column;
flex-wrap: wrap;
height: 400px;
}
div#wos-solutions > div {
div.wos-solutions > div {
border: solid black 1px;
margin: 2px;
padding: 4px;
border-radius: 6px;
}
}
`));

document.body.appendChild(style);
wosMain.appendChild(style);

const fakeWordButton = document.createElement('button');
fakeWordButton.id = 'fake-word';
Expand All @@ -252,5 +298,5 @@ div#wos-solutions > div {
localStorage.setItem('wos-fake-words', JSON.stringify([...fakeWords]));
});

document.body.appendChild(fakeWordButton);
wosMain.appendChild(fakeWordButton);
}());
56 changes: 56 additions & 0 deletions gmw/leetcode-404.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/* eslint-disable indent */
const maximumLength = function maximumLength(numbers, k) {
const results = [];
const modNumbers = numbers.map((num) => num % k);
for (let i = 0; i < k; i++) {
let result = 1;
let first = 0;
let second = modNumbers.length;
for (; first < second; first++) {
for (let j = 1 + first; j < modNumbers.length; j++) {
if ((modNumbers[first] + modNumbers[j]) % k === i) {
second = j;
break;
}
}
}

if (second < modNumbers.length) {
result += 1;
for (let j = second, l = second + 1; l < modNumbers.length; l++) {
if ((modNumbers[j] + modNumbers[l]) % k === i) {
result += 1;
j = l;
}
}
}

const allSame = modNumbers.filter(e => e === i).length;
results.push(result > allSame ? result : allSame);
}

return Math.max(...results);
};

export default maximumLength;

/*
[1,2,3,4,5]
2
[1,4,2,3,1,4]
3
[11,500]
980
[1,1,1,1,1,1,1,1,1,1,1,1,1,1]
981
[9,7,4,2,6,7,12,7,5,11,10,8,1,8,10,8,5,8,8,3]
13
[5,3,9]
6
[6,2,3,1,1]
2
[1,7,9,10,8,7,10]
6
*/

0 comments on commit 896ed82

Please sign in to comment.