Small warning, the change to change how lemmy as a whole calculates active users just got pushed so instances may mess up the stats as they upgrade to 0.19 when thats stable (and instances using it rn when they upgrade to a more recent release client) (Makes how programming.dev and lemmynsfw calculate community stats the default)
Ategon
It doesn't, still spams low upvote posts, just slightly tweaked ordering
btw if you put the url to nim as /c/[email protected] I dont think the url bot will trigger since it does the same thing the ! format does
[Nim](/c/[email protected])
Edit: yeah looks like it didnt reply to me so this format works
Looks like a camelCase variable to me so its likely just a temporary word they replace with the actual bot name but something went wrong and it didn't replace it properly leading to the temporary text showing instead
There could be some other reasons but the actual cause cant really be determined without looking at the source code
Congrats on the alpha 🎉
Advent of code is an coding advent calendar where a new puzzle is released every day for people to solve
The numbers there (apart from the timer) in the site that was linked can be clicked to bring you to specific puzzles (1 aka Day 1 for the puzzle on the 1st of december, 2 aka Day 2 for the 2nd of december, etc.)
Weve got a go community in the site that you might get some answers from rather than the general community here [email protected]
This is more a community for the development side being activitypub instead of fediverse
Theres communities like [email protected] though
I haven't touched friendica much so dont know the answer to that
JavaScript
Ended up misreading the instructions due to trying to go fast. Built up a system to compare hand values like its poker before I realized its not poker
Likely last day im going to be able to write code for due to exams coming up
Code Block
// Part 1
// ======
function part1(input) {
const lines = input.replaceAll("\r", "").split("\n");
const hands = lines.map((line) => line.split(" "));
const sortedHands = hands.sort((a, b) => {
const handA = calculateHandValue(a[0]);
const handB = calculateHandValue(b[0]);
if (handA > handB) {
return -1;
} else if (handA < handB) {
return 1;
} else {
for (let i = 0; i < 5; i++) {
const handACard = convertToNumber(a[0].split("")[i]);
const handBCard = convertToNumber(b[0].split("")[i]);
if (handACard > handBCard) {
return 1;
} else if (handACard < handBCard) {
return -1;
}
}
}
});
return sortedHands
.filter((hand) => hand[0] != "")
.reduce((acc, hand, i) => {
return acc + hand[1] * (i + 1);
}, 0);
}
function convertToNumber(card) {
switch (card) {
case "A":
return 14;
case "K":
return 13;
case "Q":
return 12;
case "J":
return 11;
case "T":
return 10;
default:
return parseInt(card);
}
}
function calculateHandValue(hand) {
const dict = {};
hand.split("").forEach((card) => {
if (dict[card]) {
dict[card] += 1;
} else {
dict[card] = 1;
}
});
// 5
if (Object.keys(dict).length === 1) {
return 1;
}
// 4
if (Object.keys(dict).filter((key) => dict[key] === 4).length === 1) {
return 2;
}
// 3 + 2
if (
Object.keys(dict).filter((key) => dict[key] === 3).length === 1 &&
Object.keys(dict).filter((key) => dict[key] === 2).length === 1
) {
return 3;
}
// 3
if (Object.keys(dict).filter((key) => dict[key] === 3).length === 1) {
return 4;
}
// 2 + 2
if (Object.keys(dict).filter((key) => dict[key] === 2).length === 2) {
return 5;
}
// 2
if (Object.keys(dict).filter((key) => dict[key] === 2).length === 1) {
return 6;
}
return 7;
}
// Part 2
// ======
function part2(input) {
const lines = input.replaceAll("\r", "").split("\n");
const hands = lines.map((line) => line.split(" "));
const sortedHands = hands.sort((a, b) => {
const handA = calculateHandValuePart2(a[0]);
const handB = calculateHandValuePart2(b[0]);
if (handA > handB) {
return -1;
} else if (handA < handB) {
return 1;
} else {
for (let i = 0; i < 5; i++) {
const handACard = convertToNumberPart2(a[0].split("")[i]);
const handBCard = convertToNumberPart2(b[0].split("")[i]);
if (handACard > handBCard) {
return 1;
} else if (handACard < handBCard) {
return -1;
}
}
}
});
return sortedHands
.filter((hand) => hand[0] != "")
.reduce((acc, hand, i) => {
console.log(acc, hand, i + 1);
return acc + hand[1] * (i + 1);
}, 0);
}
function convertToNumberPart2(card) {
switch (card) {
case "A":
return 14;
case "K":
return 13;
case "Q":
return 12;
case "J":
return 1;
case "T":
return 10;
default:
return parseInt(card);
}
}
function calculateHandValuePart2(hand) {
const dict = {};
let jokers = 0;
hand.split("").forEach((card) => {
if (card === "J") {
jokers += 1;
return;
}
if (dict[card]) {
dict[card] += 1;
} else {
dict[card] = 1;
}
});
// 5
if (jokers === 5 || Object.keys(dict).length === 1) {
return 1;
}
// 4
if (
jokers === 4 ||
(jokers === 3 &&
Object.keys(dict).filter((key) => dict[key] === 1).length >= 1) ||
(jokers === 2 &&
Object.keys(dict).filter((key) => dict[key] === 2).length === 1) ||
(jokers === 1 &&
Object.keys(dict).filter((key) => dict[key] === 3).length === 1) ||
Object.keys(dict).filter((key) => dict[key] === 4).length === 1
) {
return 2;
}
// 3 + 2
if (
(Object.keys(dict).filter((key) => dict[key] === 3).length === 1 &&
Object.keys(dict).filter((key) => dict[key] === 2).length === 1) ||
(Object.keys(dict).filter((key) => dict[key] === 2).length === 2 &&
jokers === 1)
) {
return 3;
}
// 3
if (
Object.keys(dict).filter((key) => dict[key] === 3).length === 1 ||
(Object.keys(dict).filter((key) => dict[key] === 2).length === 1 &&
jokers === 1) ||
(Object.keys(dict).filter((key) => dict[key] === 1).length >= 1 &&
jokers === 2) ||
jokers === 3
) {
return 4;
}
// 2 + 2
if (
Object.keys(dict).filter((key) => dict[key] === 2).length === 2 ||
(Object.keys(dict).filter((key) => dict[key] === 2).length === 1 &&
jokers === 1)
) {
return 5;
}
// 2
if (
Object.keys(dict).filter((key) => dict[key] === 2).length === 1 ||
jokers
) {
return 6;
}
return 7;
}
export default { part1, part2 };
top left of the site in the navbar, and for sites who collect all of the different instances such as join-lemmy and lemmyverse. Also shows up in things like error pages in the new frontend
Smaller in the navbar but in the cases of join-lemmy and the things like error pages its larger (you can see the size by going to https://join-lemmy.org/instances?topic=all_topics&language=all&scroll=true)
Uses typescript but can be used for both js and ts, I make bots in Javascript using it
The issue with that and reason why AoC doesnt use that for the leaderboard is they dont have access to the code people write, just the final result
Adding that as an option would mean having something that takes into account differences in base runtimes of code for different languages (e.g. scripting languages taking longer) so that its feasible to code it in anything, and having the ability to execute many different kinds of code which can be a pain to set up (and would mean youre then running arbitrary code unless you sandbox it)
I used that as the way to rank people in [email protected] when I was running that and its been on hiatus for awhile due to the effort needed to run it since I havent had time due to building up things in the instance such as [email protected]
It could work if self reported but then its easy to cheat