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
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
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
[JavaScript] Relatively easy one today
Part 1
function part1(input) {
const split = input.split("\n");
const times = split[0].match(/\d+/g).map((x) => parseInt(x));
const distances = split[1].match(/\d+/g).map((x) => parseInt(x));
let sum = 0;
for (let i = 0; i < times.length; i++) {
const time = times[i];
const recordDistance = distances[i];
let count = 0;
for (let j = 0; j < time; j++) {
const timePressed = j;
const remainingTime = time - j;
const travelledDistance = timePressed * remainingTime;
if (travelledDistance > recordDistance) {
count++;
}
}
if (sum == 0) {
sum = count;
} else {
sum = sum * count;
}
}
return sum;
}
Part 2
function part2(input) {
const split = input.split("\n");
const time = parseInt(split[0].split(":")[1].replace(/\s/g, ""));
const recordDistance = parseInt(split[1].split(":")[1].replace(/\s/g, ""));
let count = 0;
for (let j = 0; j < time; j++) {
const timePressed = j;
const remainingTime = time - j;
const travelledDistance = timePressed * remainingTime;
if (travelledDistance > recordDistance) {
count++;
}
}
return count;
}
Was a bit late with posting the solution thread and solving this since I ended up napping until 2am, if anyone notices theres no solution thread and its after the leaderboard has been filled (can check from the stats page if 100 people are done) feel free to start one up (I just copy paste the text in each of them)
It doesn't, still spams low upvote posts, just slightly tweaked ordering