🌟 Advent of Code (AoC) 2024 🌟

PermalÀnk
Medlem ★
●

🌟 Advent of Code (AoC) 2024 🌟

TrÄdar frÄn 2016, 2018, 2019, 2020, 2021, 2022, 2023.

December nalkas och tomten behöver Ă€n en gĂ„ng vĂ„r hjĂ€lp 🎅 HĂ€ng pĂ„ och lös dagliga programmerings(?)pussel pĂ„ Advent of Code.

INSTRUKTIONER

Vi fortsÀtter nyttja samma leaderboard som förr: 115994-59705230

Om du vill dela med dig av din lösning för en viss dag, skriv inlÀgg pÄ följande form:

Dag: 1
SprÄk: Python 3
Lösning: GitHub

HÀr kan du skriva vad helst du vill om din lösning sÄ lÀnge du anvÀnder spoiler-taggar.

def solution_1(input): return "mitt korrekta svar"

Dold text
Visa signatur

:(){ :|:& };:

đŸŠđŸ»â€â™‚ïž   đŸšŽđŸ»â€â™‚ïž   đŸƒđŸ»â€â™‚ïž   ☕

PermalÀnk
Datavetare ★
●

@GLaDER: var precis pÄ vÀg att göra en shameless copy av ditt 2023-startinlÀgg, sÄg detta nÀr jag gjorde refresh för att fÄ rÀtt rubrik!

Har gjort alla uppgifterna alla Är, sÄ tÀnker inte bryta den traditionen. Men lÀr tyvÀrr bli primÀrt kvÀllsjobb i Är, lite annat i vÀgen.

I Ă„r fĂ„r det bli Rust igen. Är ju sĂ„ mycket som hĂ€nder kring det sprĂ„ket, bl.a. rekommendationer frĂ„n US-gov, Microsoft, Google, m.fl. att alltid anvĂ€nda Rust över C och C++ om möjligt.

Skönt att fÄ jobba med nÄgot annat Àn det man primÀrt anvÀnder i jobbet, som senaste tiden Àr C#, Go och en del Python (uteslutande ihop med PyTorch).

Och kör man Rust (eller C eller C++) sÄ finns ju den roliga utmaningen att skriva sina lösningar sÄ alla svar berÀkningar pÄ under 1s pÄ en "normal dator". Sist jag körde Rust, 2021, rÀckte det med en RPi4 för att komma under 1s. Fast hÀnger i praktiken alltid pÄ vad de 1-2 "vÀrsta" fallen krÀver...

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

PermalÀnk
●

Varför hör jag helt plötsligt Fortunate Son-musik frĂ„n 2023?đŸ˜‚đŸ˜±

Mvh,
WKF.

Visa signatur

"Den sÀkraste koden Àr den som aldrig skrivs"
"Visste du förresten att det Àr ett mÄngmiljardbolag?"
"Jag lever inte för att koda utan kodar för att sen kunna leva"

PermalÀnk
Medlem
●

Jag hade planerat att lÀra mig Zig i Är, men vi fÄr se ifall det blir för tungt.

PermalÀnk
Hedersmedlem ★
●

Som vanligt sÄ kommer jag ihÄg att AoC Àr en grej nÀr trÄden dyker upp hÀr!
FÄr se om jag Àr med i Är, det Àr inte sÀkert. IsÄfall mÄste jag snabbt bestÀmma vilket sprÄk det blir.
2023 körde jag Python (för att det Àr bekvÀmt), 2021 TypeScript (för att lÀra mig). 2022 uteblev pga flytt.

Skulle vilja lÀra mig Powershell lite bÀttre, men jag tror inte jag Àr sÄ sjÀlvplÄgande att jag kör AoC i det.

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

TrÄdar frÄn 2016, 2018, 2019, 2020, 2021, 2022, 2023.

December nalkas och tomten behöver Ă€n en gĂ„ng vĂ„r hjĂ€lp 🎅 HĂ€ng pĂ„ och lös dagliga programmerings(?)pussel pĂ„ Advent of Code.

StÀllde klockan, pÄ 05:45, trots att jag sagt till mig sjÀlv att jag inte ska stressa med AoC i Är. Tror kroppen hÄller med, för jag lyckades somna om direkt efter att alarmet gick Skönt med en liten mjukstart, som vanligt.

Dag: 1
SprÄk: Python 3
Lösning: GitHub

Visa signatur

:(){ :|:& };:

đŸŠđŸ»â€â™‚ïž   đŸšŽđŸ»â€â™‚ïž   đŸƒđŸ»â€â™‚ïž   ☕

PermalÀnk
Medlem ★
●

Eftersom jag Àr arbetslös i Är kanske jag orkar mellan barnpassandet.

Visa signatur

Citera för svar

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: Python

Det blev ingen one-liner. Det gÄr att nÀstla lite lambdas, men det blev för olÀsligt.

from collections import Counter l1, l2 = zip(*list(tuple(map(int, l.split())) for l in open("input01.txt", "r").readlines())) c1, c2 = Counter(l1), Counter(l2) print(sum(map(lambda x: abs(x[0] - x[1]), zip(sorted(l1), sorted(l2)))), sum([k * v * c2.get(k, 0) for k, v in c1.items()]))

Dold text
PermalÀnk
Medlem
●

Är alla aktiva pĂ„ den leaderborden fortfarande?

Hade gÀrna gÄtt med men den Àr full.

Visa signatur

Starka Äsikter om onödiga saker.

PermalÀnk
Medlem
●

Blev Java igen, jag tÀnkte göra det i Python för en stund men, dÄ jag jobbar lite med Python sÄ orkar jag inte göra det.

Dag 1
SprÄk: Java
Lösning: GitHub

PermalÀnk
Medlem
●

Dag: 1
SprÄk: Dyalog APL

d←↓⍉↑⍎¹⊃⎕NGET'1.txt'1 +/|-⌿↑(âŠ‚âˆ˜â‹âŒ·âŠą)šd ⍝ del1 {+/âș×+/âș∘.=⍔}/d ⍝ del2

Dold text

SprÄk: Scala

Using .resource(Source.fromFile(path))(_.getLines.toArray) .map(_.split(" ").map(_.toInt)) .transpose .map(_.sortInPlace()) .pipe: case Array(fst, snd) => println(s"del1: ${fst.zip(snd).map((x, y) => (x - y).abs).sum}") println(s"del2: ${fst.foldLeft(0)((acc, x) => acc + x * snd.count(_ == x))}")

Dold text
PermalÀnk
Medlem ★
●
Skrivet av bjoen:

Är alla aktiva pĂ„ den leaderborden fortfarande?

Hade gÀrna gÄtt med men den Àr full.

Tar ocksÄ gÀrna en plats pÄ leaderboarden.

Är till vardsags ingenjör inom anlĂ€ggning som upptĂ€ckt att man kan köra mycket python istĂ€llet för Ă€ndlösa excelark. DĂ€rför blir det mestadels att jag gör nĂ„got litet i pandas. I Ă„r tĂ€nkte jag försöka vĂ€ssa kunskaperna med pythons inbyggda funktioner, som vanligt har jag svĂ„rt att fĂ„ till en snygg parser nĂ€r det inte kommer i prydliga csv-filer

file = open("input part 1.txt", "r") data = file.read() data_into_list = data.split() file.close() list1 = [] list2 = [] check = 0 for item in data_into_list: if check % 2 == 0: list1.append(int(item)) else: list2.append(int(item)) check +=1 list1.sort() list2.sort() summa = 0 # part 1 for n in range(len(list1)): summa= summa+ abs(list1[n]-list2[n]) print (summa) # part2 summa = 0 for n in range(len(list1)): check=list1[n] for i in range(len(list2)): repeats = 0 if list2[i]==check: repeats +=1 else: pass summa += check*repeats print (summa)

Dold text
PermalÀnk
Medlem
●
Skrivet av Chibariku:

Tar ocksÄ gÀrna en plats pÄ leaderboarden.

Är till vardsags ingenjör inom anlĂ€ggning som upptĂ€ckt att man kan köra mycket python istĂ€llet för Ă€ndlösa excelark. DĂ€rför blir det mestadels att jag gör nĂ„got litet i pandas. I Ă„r tĂ€nkte jag försöka vĂ€ssa kunskaperna med pythons inbyggda funktioner, som vanligt har jag svĂ„rt att fĂ„ till en snygg parser nĂ€r det inte kommer i prydliga csv-filer

file = open("input part 1.txt", "r") data = file.read() data_into_list = data.split() file.close() list1 = [] list2 = [] check = 0 for item in data_into_list: if check % 2 == 0: list1.append(int(item)) else: list2.append(int(item)) check +=1 list1.sort() list2.sort() summa = 0 # part 1 for n in range(len(list1)): summa= summa+ abs(list1[n]-list2[n]) print (summa) # part2 summa = 0 for n in range(len(list1)): check=list1[n] for i in range(len(list2)): repeats = 0 if list2[i]==check: repeats +=1 else: pass summa += check*repeats print (summa)

Dold text

DÄ skapar jag en ny för oss som inte Àr med i den gamla, eller om dÀr Àr mÄnga inaktiva i den gamla sÄ kan ju alla som gör den iÄr gÄ med hÀr ocksÄ!

Kod: 3412137-72abe3b6
@GLaDER kanske kan lÀgga in den i original-inlÀgget.

Visa signatur

Starka Äsikter om onödiga saker.

PermalÀnk
Datavetare ★
●

Dag: 1
SprÄk: Rust

use ahash::AHashMap; use std::fs; const INPUT_FILE: &str = "input.txt"; fn read_number_pair(line: &str) -> (i32, i32) { let mut number_pair = line.split_whitespace().map(|s| { s.parse::<i32>() .expect(&format!("{} should be a number", s)) }); (number_pair.next().unwrap(), number_pair.next().unwrap()) } fn read_to_left_and_right_list(path: &str) -> (Vec<i32>, Vec<i32>) { fs::read_to_string(path) .expect(&format!("File {} should be present", path)) .lines() .map(|line| read_number_pair(line)) .unzip() } // Part 1 fn sorted(v: &Vec<i32>) -> Vec<i32> { let mut v_clone = v.clone(); v_clone.sort(); v_clone } fn calculate_total_distance(left_list: &Vec<i32>, right_list: &Vec<i32>) -> i32 { sorted(left_list) .iter() .zip(sorted(right_list).iter()) .map(|(a, b)| (a - b).abs()) .sum() } // Part 2 fn calculate_similarity_score(left_list: &[i32], right_list: &[i32]) -> i32 { let mut number_count_right_list = AHashMap::new(); for &number in right_list { *number_count_right_list.entry(number).or_insert(0) += 1; } left_list.iter().fold(0, |total_score, &number| { *number_count_right_list.entry(number).or_default() * number + total_score }) } fn main() { let (left_list, right_list) = read_to_left_and_right_list(INPUT_FILE); let total_distance = calculate_total_distance(&left_list, &right_list); println!("part 1: {}", total_distance); let similarity_score = calculate_similarity_score(&left_list, &right_list); println!("part 2: {}", similarity_score); }

Dold text
Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

PermalÀnk
Medlem ★
●

FÄr vÀl ge AOC en Àrlig chans i Är.

Dag 1
SprÄk: Rust
Lösning: GitHub

PermalÀnk
Medlem ★
●
Skrivet av Yoshman:

Dag: 1
SprÄk: Rust

use ahash::AHashMap; use std::fs; const INPUT_FILE: &str = "input.txt"; fn read_number_pair(line: &str) -> (i32, i32) { let mut number_pair = line.split_whitespace().map(|s| { s.parse::<i32>() .expect(&format!("{} should be a number", s)) }); (number_pair.next().unwrap(), number_pair.next().unwrap()) } fn read_to_left_and_right_list(path: &str) -> (Vec<i32>, Vec<i32>) { fs::read_to_string(path) .expect(&format!("File {} should be present", path)) .lines() .map(|line| read_number_pair(line)) .unzip() } // Part 1 fn sorted(v: &Vec<i32>) -> Vec<i32> { let mut v_clone = v.clone(); v_clone.sort(); v_clone } fn calculate_total_distance(left_list: &Vec<i32>, right_list: &Vec<i32>) -> i32 { sorted(left_list) .iter() .zip(sorted(right_list).iter()) .map(|(a, b)| (a - b).abs()) .sum() } // Part 2 fn calculate_similarity_score(left_list: &[i32], right_list: &[i32]) -> i32 { let mut number_count_right_list = AHashMap::new(); for &number in right_list { *number_count_right_list.entry(number).or_insert(0) += 1; } left_list.iter().fold(0, |total_score, &number| { *number_count_right_list.entry(number).or_default() * number + total_score }) } fn main() { let (left_list, right_list) = read_to_left_and_right_list(INPUT_FILE); let total_distance = calculate_total_distance(&left_list, &right_list); println!("part 1: {}", total_distance); let similarity_score = calculate_similarity_score(&left_list, &right_list); println!("part 2: {}", similarity_score); }

Dold text

Jag har redan lÀrt mig nÄgot nytt

PermalÀnk
Medlem
●

Dag: 1
SprÄk: Rust

use std::{collections::HashMap, error::Error}; fn main() -> Result<(), Box<dyn Error>> { let content = std::fs::read_to_string("input.txt")?; let content: Vec<_> = content .lines() .flat_map(|line| { line.split_ascii_whitespace() .filter_map(|s| s.parse::<u32>().ok()) .collect::<Vec<_>>() }) .collect(); let transposed = transpose(content); part1(&transposed); part2(&transposed); Ok(()) } fn transpose(content: Vec<u32>) -> Vec<Vec<u32>> { let mut result = vec![vec![]; 2]; for chunk in content.chunks(2) { (0..chunk.len()).for_each(|index| result[index].push(chunk[index])); } result.iter_mut().for_each(|v| v.sort()); result } fn part1(input: &Vec<Vec<u32>>) { let mut sum = 0; for i in 0..input.first().map(|v| v.len()).unwrap_or_default() { sum += input.iter().fold(0, |accum, v| v[i].abs_diff(accum)); } println!("{sum}"); } fn part2(input: &Vec<Vec<u32>>) { let right: HashMap<u32, u32> = input[1].iter().fold(HashMap::new(), |mut accum, key| { *accum.entry(*key).or_default() += 1; accum }); println!( "{}", input[0].iter().fold(0, |accum, value| { accum + value * right.get(value).unwrap_or(&0) }) ); }

Dold text
Visa signatur

AMD Ryzen 3700X, Gigabyte Elite X570, 32GB Ballistix Sport, NH-D15S, SAPPHIRE NITRO+ RX 7900 XTX, Corsair AX760, LG OLED C2 42"

PermalÀnk
Medlem ★
●

FĂ„r se hur mycket man orkar i Ă„r.
Dag 1
Lite C#

namespace AdventOfCode; public class Puzzle_2024_1 : Puzzle { public override object PartOne(string data) { var lines = Parse(data); return lines.left .Order() .Zip(lines.right.Order(), (l, r) => Math.Abs(l - r)) .Sum(); } public override object PartTwo(string data) { var lines = Parse(data); var right = lines.right .GroupBy(g => g) .Select(grp => new { grp.Key, Count = grp.Count() }) .ToDictionary(grp => grp.Key, grp => grp.Count); return lines.left.Sum(l => !right.TryGetValue(l, out var count) ? 0 : l * count); } private static (IEnumerable<int> left, IEnumerable<int> right) Parse(string data) { List<int> left = []; List<int> right = []; var split = data.Split(Environment.NewLine); foreach (var line in split) { var parts = line.Split(" ", StringSplitOptions.RemoveEmptyEntries); left.Add(int.Parse(parts[0])); right.Add(int.Parse(parts[1])); } return (left, right); } }

Dold text
PermalÀnk
Medlem ★
●

Jopp, jag fÄr se hur lÀnge jag orkar harva, de första dagarna brukar jag ju i alla fall ha tid med.

Dag 1
SprÄk: C#

var lines = File.ReadAllLines("input.txt").Select(x => x.Split(" ")).Select(x => (int.Parse(x[0]), int.Parse(x[1]))); var group = lines.Select(x => x.Item2).GroupBy(i => i).Select(g => new KeyValuePair<int, int>(g.Key, g.Count())).ToDictionary(); Console.WriteLine("Part 1: " + lines.Select(x => x.Item1).Order().Zip(lines.Select(x => x.Item2).Order()).Sum(a => Math.Abs(a.First - a.Second))); Console.WriteLine("Part 2: " + lines.Sum(x => { group.TryGetValue(x.Item1, out int mult); return x.Item1 * mult; }));

Dold text
kortade ner programmet lite
Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

PermalÀnk
●

YAY!

Dag 1 Del 1 endast(!)
PHP - Körs via "Code Runner" inuti VSCode Terminal

<?php // All data which is a tuple of two numbers separated by 3 spaces $data = "88159 51481 66127 31794 71500 84893 and_so_on..."; // Data from: https://adventofcode.com/2024/day/1/input // We create a lines array $lines = explode("\n", $data); // Now we will extract each number from each line, one number // is to the left of 3 spaces and the other is to the right // We also convert the string numbers to integers while we're at it $leftArr = []; $rightArr = []; foreach ($lines as $line) { $numbers = explode(" ", $line); $leftArr[] = intval($numbers[0]); $rightArr[] = intval($numbers[1]); } // We will now sort each array in ascending order sort($leftArr); sort($rightArr); // We will now loop through both arrays at the same time and // add the difference between the two numbers to a sum $sumOfDifferenceBetweenTheTwoArrays = 0; // Using "abs" we can find the absolute value of the difference for ($i = 0; $i < count($leftArr); $i++) { $sumOfDifferenceBetweenTheTwoArrays += abs($leftArr[$i] - $rightArr[$i]); } // Output the sum of the differences between the two arrays echo $sumOfDifferenceBetweenTheTwoArrays; ?>

Dold text

Jag ska erkÀnna mot den eventuella "shitstorm" det kan innebÀra att jag inuti VSCode anvÀnder CoPilot och med hjÀlp av kommentarer och sedan smÄjusteringar av den erhÄllna koden nedanför varje kommentar. Dock sÄ gav den vissa "ointelligenta" förslag (vilket jag förmodar Àr en del av AoC:s tanke!). T.ex. fattade den ej att det behövde vara numerÀra vÀrden efter indelningen av strÀngraderna trots att de innehÄller nummer.

En sak ska klargöras redan nu vilket Àr att jag ALDRIG kopierar in sjÀlva AoC-texten utan jag lÀser och försöker "kommentars-koda och korrigera erhÄllen kod" utifrÄn min förstÄelse av den. I slutÀndan handlar det dÀrmed Àven om min förstÄelse av vad som faktiskt efterfrÄgas (="Kravspecifikationen") i varje "Kodkalenderdag".

EDIT: Åh, jag sĂ„g nu att det var en Part 2 ocksĂ„, missade det! Var ju ett Ă„r sedan jag förtrĂ€ngde denna traumatiska upplevelse! 😂

Mvh,
WKF.

Visa signatur

"Den sÀkraste koden Àr den som aldrig skrivs"
"Visste du förresten att det Àr ett mÄngmiljardbolag?"
"Jag lever inte för att koda utan kodar för att sen kunna leva"

PermalÀnk
Medlem
●
Skrivet av WebbkodsFrilansaren:

YAY!
<Uppladdad bildlÀnk>

Dag 1 Del 1 endast(!)
PHP - Körs via "Code Runner" inuti VSCode Terminal

<?php // All data which is a tuple of two numbers separated by 3 spaces $data = "88159 51481 66127 31794 71500 84893 and_so_on..."; // Data from: https://adventofcode.com/2024/day/1/input // We create a lines array $lines = explode("\n", $data); // Now we will extract each number from each line, one number // is to the left of 3 spaces and the other is to the right // We also convert the string numbers to integers while we're at it $leftArr = []; $rightArr = []; foreach ($lines as $line) { $numbers = explode(" ", $line); $leftArr[] = intval($numbers[0]); $rightArr[] = intval($numbers[1]); } // We will now sort each array in ascending order sort($leftArr); sort($rightArr); // We will now loop through both arrays at the same time and // add the difference between the two numbers to a sum $sumOfDifferenceBetweenTheTwoArrays = 0; // Using "abs" we can find the absolute value of the difference for ($i = 0; $i < count($leftArr); $i++) { $sumOfDifferenceBetweenTheTwoArrays += abs($leftArr[$i] - $rightArr[$i]); } // Output the sum of the differences between the two arrays echo $sumOfDifferenceBetweenTheTwoArrays; ?>

Dold text

Jag ska erkÀnna mot den eventuella "shitstorm" det kan innebÀra att jag inuti VSCode anvÀnder CoPilot och med hjÀlp av kommentarer och sedan smÄjusteringar av den erhÄllna koden nedanför varje kommentar. Dock sÄ gav den vissa "ointelligenta" förslag (vilket jag förmodar Àr en del av AoC:s tanke!). T.ex. fattade den ej att det behövde vara numerÀra vÀrden efter indelningen av strÀngraderna trots att de innehÄller nummer.

En sak ska klargöras redan nu vilket Àr att jag ALDRIG kopierar in sjÀlva AoC-texten utan jag lÀser och försöker "kommentars-koda och korrigera erhÄllen kod" utifrÄn min förstÄelse av den. I slutÀndan handlar det dÀrmed Àven om min förstÄelse av vad som faktiskt efterfrÄgas (="Kravspecifikationen") i varje "Kodkalenderdag".

EDIT: Åh, jag sĂ„g nu att det var en Part 2 ocksĂ„, missade det! Var ju ett Ă„r sedan jag förtrĂ€ngde denna traumatiska upplevelse! 😂

Mvh,
WKF.

Det Àr vÀl helt okej att anvÀnda gpt om man gör det för att lÀra sig

SÄ lÀnge man inte tar sig upp pÄ topplistan, gissar pÄ att personen som klarade första stjÀrnorna pÄ nio sekunder inte var helt geniun.

Visa signatur

Starka Äsikter om onödiga saker.

PermalÀnk
●

YAY 1+2! (vid första försöket för del 1+2 och jag var faktiskt smÄtt osÀker pÄ 2:an men chansade att jag hade gjort rÀtt redan första försöket)

Dag 1 Del 1 OCH 2!
PHP - Körs via "Code Runner" inuti VSCode Terminal

1.php

<?php // All data which is a tuple of two numbers separated by 3 spaces $data = "88159 51481 66127 31794 and_so_on..."; // Source: https://adventofcode.com/2024/day/1/input // We create a lines array $lines = explode("\n", $data); // Now we will extract each number from each line, one number // is to the left of 3 spaces and the other is to the right // We also convert the string numbers to integers while we're at it $leftArr = []; $rightArr = []; $leftArr2 = []; $rightArr2 = []; foreach ($lines as $line) { $numbers = explode(" ", $line); $leftArr[] = intval($numbers[0]); $rightArr[] = intval($numbers[1]); } // Also store in a separate array for later Part 2 $leftArr2 = $leftArr; $rightArr2 = $rightArr; // We will now sort each array in ascending order sort($leftArr); sort($rightArr); // We will now loop through both arrays at the same time and // add the difference between the two numbers to a sum $sumOfDifferenceBetweenTheTwoArrays = 0; // Using "abs" we can find the absolute value of the difference for ($i = 0; $i < count($leftArr); $i++) { $sumOfDifferenceBetweenTheTwoArrays += abs($leftArr[$i] - $rightArr[$i]); } // Output the sum of the differences between the two arrays echo $sumOfDifferenceBetweenTheTwoArrays; // Here in Part 2 we will use the two arrays again. We begin by // counting the values in right array by using array_count_values. // We will then loop through the left array and if we find its value // as a key in the righytArrayCount array then we will check if it // exists in the foundKeysFromRightArr array. If it does not exist // then we will add it and we will multiply the found key with the // corresponding key in the rightArrayCount array (it's value) and // add that to the $similarityScore. After looping through all the // values in the left array we will output the $similarityScore. $rightArrCount = array_count_values($rightArr2); $foundKeysFromRightArr = []; $similarityScore = 0; $length = count($leftArr2); // Jag la till $length för att inte plÄga sönder for-loopen! :P for ($i = 0; $i < $length; $i++) { if (array_key_exists($leftArr2[$i], $rightArrCount)) { if (!in_array($leftArr2[$i], $foundKeysFromRightArr)) { $foundKeysFromRightArr[] = $leftArr2[$i]; $similarityScore += $leftArr2[$i] * $rightArrCount[$leftArr2[$i]]; } // The "else" is when key has already been added, then we only need to add the value // that is already in the foundKeysFromRightArr array else { $similarityScore += $leftArr2[$i]; } } } echo "\n" . $similarityScore; ?>

Dold text

En liten detalj Àr att alla kommentarer som syns innebÀr att koden som syns nedanför dem Àr det som dÄ genererats. Jag fick lÀgga till else-satsen sjÀlv för Àn sÄ lÄnge Àr den inte tillrÀckligt "extrapolerande intelligent" och jag fick den starka "magkÀnslan" direkt nÀr jag först fick hela for-loopen att det saknades hantering för specialfallet som gÄr att hÀrleda i sÄ kallade "kravspecifikationen" för del 2.

Det roliga i hur jag löste detta var att jag först lÀste uppgiften, sen gick jag till TV-rummet och kollade pÄ random YT-klipp och under tiden sÄ arbetade min hjÀrna och jag hittade en fantastiskt vacker inbyggd PHP-metod för arrayer (se om du kan lista ut vilken det Àr) hos php.net som jag visste att jag ville anvÀnda.

Sedan sÄ "simulerade" jag i princip stegen i min skalle för vad jag ville göra rent pseudokod-aktigt och jag skrev det i kommentarerna i lösningen och sÄ kom nÀstan all kod jag ville ha fram vilket jag sÄ klart granskade. Jag fick som sagt var lÀgga till sett specialfall som Àr i else-satsen trots att kommentaren innehöll instruktioner om att hantera den.

Jag skrev fel: Jag hade inte alls inkluderat instruktioner om specialfallet. Hursomhelst sÄ Àr det viktiga att jag upptÀckte det innan jag skickade in första svaret för del 2.

De kommande kodutmaningarna som möjligen kommer att fÄ mig pÄ fall Àr nÀr flerdimensionella arrayer mÄste tillÀmpas och nÀr du ska börja kontrollera och "navigera" uppÄt/nedÄt, höger/vÀnster och diagonalt i dessa. Ett bra exempel Àr en /[A-H][1-8]/-ruta i schack dÀr du vill kolla runt de Ätta nÀrliggande rutorna för den rutan förutsatt att de alla finns, dvs., nÀr du inte stÄr i nÄgot hörn eller lÀngst vid nÄgon sida.

Mvh,
WKF.

Visa signatur

"Den sÀkraste koden Àr den som aldrig skrivs"
"Visste du förresten att det Àr ett mÄngmiljardbolag?"
"Jag lever inte för att koda utan kodar för att sen kunna leva"

PermalÀnk
Medlem
●

Dag 1
SprÄk: Python

def p1(): with open('input.txt', 'r') as file: lines = [line.strip().split() for line in file] l1 = sorted(int(line[0]) for line in lines) l2 = sorted(int(line[1]) for line in lines) res = sum(abs(id1 - id2) for id1, id2 in zip(l1, l2)) print(res) def p2(): with open('input.txt', 'r') as file: lines = [line.strip().split() for line in file] l1 = sorted(int(line[0]) for line in lines) l2 = {} for line in lines: key = int(line[1]) l2[key] = l2.get(key, 0) + key res = sum(l2.get(id, 0) for id in l1) print(res) p1() p2()

Dold text
PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

TrÄdar frÄn 2016, 2018, 2019, 2020, 2021, 2022, 2023.

December nalkas och tomten behöver Ă€n en gĂ„ng vĂ„r hjĂ€lp 🎅 HĂ€ng pĂ„ och lös dagliga programmerings(?)pussel pĂ„ Advent of Code.

INSTRUKTIONER

Vi fortsÀtter nyttja samma leaderboard som förr: 115994-59705230

Om du vill dela med dig av din lösning för en viss dag, skriv inlÀgg pÄ följande form:

Dag: 1
SprÄk: Python 3
Lösning: GitHub

HÀr kan du skriva vad helst du vill om din lösning sÄ lÀnge du anvÀnder spoiler-taggar.

def solution_1(input): return "mitt korrekta svar"

Dold text

Private Leaderboard full?

Visa signatur

Ny signatur!

PermalÀnk
Medlem ★
●

@GLaDER borde skapa en ny leaderboard.

PermalÀnk
Medlem ★
●

Har rensat lite pÄ leaderboarden (ganska godtyckligt bland de som inte tagit nÄgon stjÀrna Àn i Är). Sorry om jag tagit bort nÄgon som faktiskt har tÀnkt vara med

TyvÀrr mÄste man ta bort en person Ät gÄngen och det krÀvs Ätminstone fem klick per person, sÄ en annan kvÀll, kanske.

Visa signatur

:(){ :|:& };:

đŸŠđŸ»â€â™‚ïž   đŸšŽđŸ»â€â™‚ïž   đŸƒđŸ»â€â™‚ïž   ☕

PermalÀnk
Medlem
●

Dag: 1
SprÄk: R
Lösning:

library(tidyverse) dat <- readLines("2024/1/input.txt")[-1] %>% str_split("\\s+") %>% map(as.numeric) v1 <- v %>% map(~.x[1]) %>% unlist() v2 <- v %>% map(~.x[2]) %>% unlist() # part1 sum(abs(sort(v1)-sort(v2))) # part2 tibble(a=v1, b=v2) %>% rowwise() %>% mutate(aib = sum(v2 %in% a), sim = a*aib) %>% ungroup() %>% summarise(s=sum(sim))

Dold text
PermalÀnk
Medlem ★
●

Dag 1
SprÄk: PowerShell

$content = Get-Content day1.txt $leftPart = @() $rightPart = @() $leftAndRight = 0 $similarityScore = 0 $content | ForEach-Object { $pos = ($PSItem -replace (' ',';')).IndexOf(';') $leftPart += $PSItem.Substring(0, $pos) $rightPart += $PSItem.Substring($pos+3) } $leftPart = $leftPart | Sort-Object $rightPart = $rightPart | Sort-Object 0..$($rightPart.count - 1) | ForEach-Object{ $leftAndRight = $leftAndRight + [int]$($($leftPart[$PSItem] - $rightPart[$PSItem]) -replace '-','') } $leftPart | ForEach-Object { $similarityScore = $similarityScore + $($(([regex]::Matches($rightPart, $PSItem)).count) * $PSItem) } Write-Host "Part 1: $leftAndRight" Write-Host "Part 2: $similarityScore"

Dold text

Orkar nog inte fÀrglÀgga koden igen i all fall. Var jobbigare Àn att skriva koden

Visa signatur

🟱 Main: Ryzen7 5800X | Strix x470-I | 32GB | RTX2070S | Samsung C49RG9
đŸ”” unRaid: Ryzen5 2700X | B450M DS3H | 32GB
🟠 Tfn: Google Pixel 7 Lime Green

-:| @ eller citera för svar |:-

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: C
Lösning:

#include <stdio.h> #include <stdlib.h> int comp(const void *e1, const void *e2) { return *(int*)e1 - *(int*)e2; } int main(int argc, char *argv[]) { FILE *fp; int a[1000], b[1000]; int i = 0, j = 0; int diff = 0, sim = 0, mult; fp = fopen("input.txt", "r"); while (fscanf(fp, "%d %d", &a[i], &b[i]) == 2) { i++; } fclose(fp); qsort(a, sizeof(a)/sizeof(*a), sizeof(*a), comp); qsort(b, sizeof(b)/sizeof(*b), sizeof(*b), comp); for (i = 0; i < 1000; i++) { // part 1 diff += abs(a[i] - b[i]); //part 2 mult = 0; for (; j < 1000; j++) { if (a[i] < b[j]) { sim += (a[i] * mult); break; } else if (a[i] == b[j]) { mult++; } } } printf("diff = %d\n", diff); printf("sim = %d\n", sim); return 0; }

Dold text

Bara för att det mÄste in en simpel C-lösning hÀr ocksÄ

Visa signatur

Citera mig för svar.
Arch Linux

PermalÀnk
Medlem ★
●

Undrar om man orkar ta sig förbi dag 3 i Är

Visa signatur

Grubblare