🌟 Advent of Code (AoC) 2023 🌟

PermalÀnk
Medlem ★
●

🌟 Advent of Code (AoC) 2023 🌟

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

Med lite bĂ€ttre framförhĂ„llning i Ă„r sĂ„ behöver tomten Ă€n en gĂ„ng vĂ„r hjĂ€lp att rĂ€dda julen ✹

INSTRUKTIONER

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

InlÀggsform
EXEMPEL

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

HÀr kan du skriva vad helst du vill om din lösning

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

Dold text
Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●

Vi har ju nÄgra dagar kvar innan det Àr dags att sÀtta tÀnderna i 2023 Ärs uppgifter.

Vad har ni för planer? Ambitioner?

Ska ni upp pÄ global leaderboard varje dag? Hoppas nÄ dit en gÄng? Ska bara slÄ kollegorna? Eller Àr AoC mest för kul och det fÄr ta den tid det tar?

För egen del blir det Python -- i Är igen. Jag löser AoC för att jag gillar pusslen och jag kodar sÄ lite pÄ dagligbasis att jag inte kÀnner nÄgot större behov av att testa nÄgot nytt sprÄk. Ambitionen Àr som vanligt att hinna göra varje uppgift innan arbetsdagen drar igÄng, men det brukar gÄ sÄdÀr. Kommer ocksÄ spendera jul hos svÀrförÀldrarna (i annan tidszon), sÄ de senare uppgifterna kommer absolut inte göras vid öppningstiden.

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●

Blir vÀl kanske som vanligt att jag kör pÄ sÄ lÀnge det kÀnns roligt. Blir C# som vanligt, iaf.

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
Medlem ★
●

Blir node - kör sÄ lÀnge jag kan bli klar pÄ under en halvtimme. Mer tid Àn sÄ vill jag inte lÀgga.

Visa signatur

Att föresprÄka Mac pÄ Swec Àr som att föresprÄka hybridbilar pÄ en raggartrÀff i Mora.

PermalÀnk
Medlem ★
●

Vi hade tÀvling pÄ skolan förra Äret, sÄ dÄ var jag hardcore och gjorde bÄda uppgifterna varje dag och vaknade tidigt och hade kaffemaskinen laddad varje morgon.
Det hÀr Äret ska jag nog vara lite mer casual... Jag vann förra Äret och fick inget för det sÄ hehe.

Jag gjorde bÄde i Python, C++ och inne i Unity med C# förra Äret. DÄ vi hÄllt pÄ med Unreal detta Är kanske det blir inne i Unreal med C++ den hÀr gÄngen.

Visa signatur

13600KF, RTX 4070 FE, B760I, 32GB DDR4, NR200P

PermalÀnk
Medlem ★
●

Jag ska försöka mig pÄ att lösa AoC problem med Rust igen. Utvecklar med C++ kod till vardags pÄ jobbet men Rust Àr helt klart pÄ frammarsh sÄ bra att lÀra sig. Sist jag försökte för 2 Är sedan innan jag blev pappa sÄ kom jag till dag 4. Nu Àr mÄlet att komma lÀngre, helst till 10 eller sÄ.

Är förvĂ„nansvĂ€rt klurigt att skriva Rust nĂ€r man Ă€r vĂ€ldigt inkörd pĂ„ C++. Python Ă€r klart enklare t.ex.

PermalÀnk
Medlem
●

Mitt mÄl i Är Àr att Ätminstone göra klart del 1 för alla dagar, och sÄ gör jag del 2 i mÄn av tid/intresse. Kommer huvudsakligen att programmera i Rust, men jag har en kÀnsla av att Haskell kommer att dras fram för lösningar som krÀver nÄgorlunda avancerad parsning. Hade Àven varit kul att prova pÄ OCaml

PermalÀnk
Datavetare ★
●

Blir nog Go i Är igen. Har kört C++, Swift, R, Rust, Python och Go genom Ären. VÀntade lÀnge med att kika pÄ Go dÄ "det har inga speciella features förutom goroutes", visade sig att goroutines Àr brutalt anvÀndbara (dock inte sÄ mycket i AoC) samt att det saknar "avancerade sprÄkfeatures" Àr sprÄkets klart största tillgÄng nÀr man ska förstÄ andras eller sin egen kod 12 mÄnader senare...

TyvÀrr för AoC ger inte Go speciellt kompakta lösning som lÀmpar sig att posta i ett forum, Àr rÀtt mycket ett modernt C. Men gör AoC frÀmst för att det Àr roliga pussel! Möjligen blir det Python + sÄ mycket PyTorch som möjligt (vill lÀra mig PyTorch bÀttre).

Kommer göra alla, men frÄgan Àr om det hinns med innan jul...

Klicka för mer information
Visa mer
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
●

Har alltid gjort 2-3 dagar sedan har jag antingen inte kÀnt att jag har tid eller att det blivit försvÄrt.

PermalÀnk
Hedersmedlem ★
●

FÄr se om jag kör i Är, isÄfall mÄste jag bestÀmma ett sprÄk. 2021 körde jag TypeScript för att lÀra mig det, gick helt okej till typ dag 18, sen blev det lite vÀl klurigt. 2022 var jag mitt uppe i en flytt, sÄ det blev tyvÀrr inget alls.

Har kodat lite i Lua sista veckan för att scripta i REAPER (ett DAW i stil med Cubase, Logic, Pro Tools) och samtidigt lÀrt mig det; det kanske inte vore sÄ dumt att lÀra mig mer av det. Relativt trevligt sprÄk ÀndÄ, nÀr man blivit lite van.

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"
Mobil: Moto G200

PermalÀnk
●

Jag kör AoC i Ă„r igen och Ă„terigen kommer jag lösa mina uppgifter i Nim. Jag vill fokusera pĂ„ problemen i sig och inte behöva tĂ€nka sĂ„ mycket pĂ„ koden sĂ„ jag kör med nĂ„got jag Ă€r van vid. FĂ„r se hur lĂ€nge jag klarar mig i Ă„r, efter dag 10 brukar det gĂ„ utför men jag ska försöka slĂ„ förra Ă„ret dĂ„ jag kom till dag 15 innan jag fastnade. Tycker att det Ă€r ganska mysigt att gĂ„ upp lite extra tidigt och se vad tomtenissarna har för sig varje dag 😁

PermalÀnk
Medlem
●

Skall "försöka" i Är igen. Dock brukar ha svÄrt med tid. Stressigaste tiden pÄ Äret pÄ jobbet Àr inför jul stÀngningen. Samt att man Àr smÄbarns förÀlder.
Rust har varit pÄ min "att lÀra sig"-lista sÄ förhoppningsvis sÄ kommer man en liten bit iallafall. Men kanske blir att man byter till C# eller nÄgot.

Visa signatur

Node 304 White | Asus Strix X470-I | R5 2600 @ 3.85Ghz | 16GiB DDR4-3000Mhz CL15 | Sapphire Radeon RX 5700 PULSE | 512GiB 860 EVO M.2 | 1TiB 970 EVO Plus NVMe | Corsair SF450

PermalÀnk
Medlem ★
●

Ska nog försöka göra detta i Haskell detta Äret. Snart klar med min utbildning och valde funktionell programmering som en av de sista för skojs skull. SÄ tÀnker att detta kommer utgöra lite bra övning.

Visa signatur

i5-7600k . GTX 1080 . 16 GB

PermalÀnk
Medlem
●

IÄr tÀnkte jag försöka ge mig tiden att haka pÄ. Kör nog pÄ python

Visa signatur

AMD Ryzen 7900X3d, XFX 6950 XT, 32GB DDR5 6000

PermalÀnk
●

Dag: 1
SprÄk: Nim
Lösning: Github

Är antagligen jag som överkomplicerade det hela, men det hĂ€r kĂ€ndes som den svĂ„raste öppningsuppgiften jag gjort pĂ„ en AoC.

PermalÀnk
Medlem ★
●

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

Som skrivet ovan: Detta var en klurig dag 1. Tycker att jag fick till en ganska fin lösning ÀndÄ, men gÄr sÀkert hitta Àn smartare sÀtt.

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●

De kanske ville LLM sÀkra uppgifterna men samtidigt blev det mycket jobbigare för oss vanliga döda ocksÄ

PermalÀnk
Medlem ★
●

Första Äret jag kör och lyckades lösa de första tvÄ uppgifterna i Python.

Behövde en liten knuff i rÀtt riktning pÄ uppgift tvÄ vad det var jag missade i att göra om talen frÄn text till siffra.

PermalÀnk
Medlem ★
●
Skrivet av Chibariku:

Första Äret jag kör och lyckades lösa de första tvÄ uppgifterna i Python.

Behövde en liten knuff i rÀtt riktning pÄ uppgift tvÄ vad det var jag missade i att göra om talen frÄn text till siffra.

VÀlkommen in i vÀrmen! Hur skiljer sig din lösning frÄn den jag lÀnkade ovan?

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

VÀlkommen in i vÀrmen! Hur skiljer sig din lösning frÄn den jag lÀnkade ovan?

Tackar, inte lika elegant. Jag Àr ju ingenjör inom berg och markbyggnad i grundenmed programmering som hobbyintresse och förenkla lite arbetsflöden. SÄ mina programmeringar Àr oftast quick and dirty ,speciellt fullösningen pÄ del tvÄ som jag fick lite inspiration frÄn Reddit

del 1

import re values = [] with open('input.txt', 'r') as file: for row in file: values.append(row.strip()) n = 0 total = 0 int_list = [] for row in values: int_list.append(re.sub('\D', '', values[n])) n = n + 1 total = total + int(int_list[-1][0])*10 + int(int_list[-1][-1]) print (total)

Del 2

import re values = [] with open('input.txt', 'r') as file: for row in file: values.append(row.strip()) new_values = [] n = 0 for row in values: new_values.append(values[n].replace('one','on1e').replace('two','tw2o').replace('three','th3ree') .replace('four','fo4ur').replace('five','fi5ve').replace('six','si6x').replace('seven','sev7en') .replace('eight','eig8ht').replace('nine','ni9ne')) n = n + 1 n = 0 total = 0 int_list = [] for row in new_values: int_list.append(re.sub('\D', '', new_values[n])) n = n + 1 total = total + int(int_list[-1][0])*10 + int(int_list[-1][-1]) print (total)

Dold text
PermalÀnk
Medlem ★
●

Samma visa varje Är! KÀmpar pÄ med F# och ger upp om 3-4 dagar

Visa signatur

Grubblare

PermalÀnk
●

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

Visa signatur

Mobo: Asus ROG Strix B350-F Gaming CPU: AMD Ryzen 7 5800X3D GPU: XFX Radeon RX 6950 XT Speedster MERC 319 Kylare: Thermalright Peerless Assassin Ram: Kingston fury renegade 3600 MHZ 32GB Lagring: CORSAIR MP600 CORE 1 TB M2 NVME SSD, Samsung 870 evo 1TB ssd och en 2 TB mekaniskdisk

PermalÀnk
●

Dag: 1
SprÄk: C

Jag tÀnkte köra C i Är. Jag fick idén frÄn nÄn bloggpost jag lÀste som hyllade boken "the C programming language" som den perfekta tekniska manualen. C Àr uppfriskande i sin enkelhet, tÀnkte jag. Jag Ängrar mig redan.

Jag hade problem med att hitta sista ordet innan jag kom pÄ att vÀnda pÄ strÀngen och leta efter första igen.

#include <stdio.h> #include <string.h> #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define LINELEN 100 void part1(char *line, int *i1, int *i2); int part2(char *line, int i_fst, int i_snd); char* words[9] = {"one","two","three","four","five","six","seven","eight","nine"}; char* words_reverse[9] = {"eno","owt","eerht","ruof","evif","xis","neves","thgie","enin"}; int main() { int p1 = 0; int p2 = 0; char line[LINELEN]; FILE* fptr = fopen("input", "r"); while(fgets(line, sizeof line, fptr) != NULL) { int i_fst, i_snd; part1(line, &i_fst, &i_snd); p1 += 10 * (line[i_fst] - '0') + (line[i_snd] - '0'); p2 += part2(line, i_fst, i_snd); } fclose(fptr); printf("Part 1: %i\nPart 2: %i\n", p1, p2); } void part1(char *line, int *i1, int *i2) { *i1 = LINELEN; for (int i=0; i<LINELEN && line[i] != '\0'; ++i) if (line[i] >= '0' && line[i] <= '9') { *i1 = MIN(i, *i1); *i2 = i; } } int part2(char *line, int i_fst, int i_snd) { int val1 = line[i_fst] - '0'; // Init to values from digits (part 1). int val2 = line[i_snd] - '0'; const long int len = strlen(line); char line_reverse[LINELEN]; for (int i=0; i<len; ++i) line_reverse[i] = line[len-i-1]; line_reverse[len] = '\0'; for (int i=0; i<9; ++i) { char *p = strstr(line, words[i]); if (p != NULL && (p-line) < i_fst) { i_fst = p-line; val1 = i + 1; } p = strstr(line_reverse, words_reverse[i]); if (p != NULL && len - (p-line_reverse) > i_snd) { i_snd = len - (p-line_reverse); val2 = i + 1; } } return 10 * val1 + val2; }

Dold text
PermalÀnk
Medlem ★
●

Dag 1, Scala 3

Del 2 kÀndes definitivt lurigare i Är

Visa signatur

Kom-pa-TI-bilitet

PermalÀnk
Medlem ★
●

Jag kan definitivt se ett behov av att skapa enkla exempelprojekt i nÄgra sprÄk, men hjÀlp att öppna filer och sÄnt, till en lagom nivÄ alltsÄ

Tror det skulle sÀnka tröskeln för att delta en hel del

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: C#
Lösning:
KÀndes rÀtt knepig, eller sÄ Àr det fredagssegheten... Men en sak jag verkligen hatar Àr nÀr sample för del 1 och 2 skiljer, och nu speciellt nÀr sample för del 2 inte funkar öh-fakking-taget för del 1-kod

ï»żvar lines = File.ReadAllLines("input.txt"); Console.WriteLine("Part 1 " + lines.Sum(FirstLast)); Console.WriteLine("Part 2 " + lines.Sum(x => FirstLast(DigitiseWords(x)))); int FirstLast(string str) { char[] digits = ['1', '2', '3', '4', '5', '6', '7', '8', '9']; char first = str[str.IndexOfAny(digits)]; char last = str[str.LastIndexOfAny(digits)]; int output = int.Parse($"{first}{last}"); return output; } string DigitiseWords(string word) { return word .Replace("one", "o1e") .Replace("two", "t2o") .Replace("three", "t3e") .Replace("four", "f4r") .Replace("five", "f5e") .Replace("six", "s6x") .Replace("seven", "s7n") .Replace("eight", "e8t") .Replace("nine", "n9e"); }

Dold text
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
Medlem ★
●

Dag: 1
SprÄk: Python

Som andra sagt, detta mÄste ju utan tvekan ha varit den svÄraste inledningen pÄ mÄnga Är. Jag fick tillslut fuska och köra nÄgon annans fungerande lösning sida vid sida för att hitta den enda rad i hela inputen dÀr det gick fel. Och dÄ givetvis pÄ nÄgot som inte fanns med i exemplen man fick.

Egentligen var vÀl kanske inte uppgiften i sig jÀttesvÄr, det var den undermÄliga beskrivningen och de undermÄliga exemplen som stÀllde till det.

Min initiala lösning, som gick ut pÄ att byta ut fösta ordet framifrÄn och sen sista ordet bakifrÄn föll pÄ "91twonelt", dÀr bokstÀver frÄn samma ord mÄste anvÀndas frÄn bÄda hÄllen. Det löste sig genom att arbeta pÄ originalstrÀngen frÄn bÄda hÄllen, men det hade nog bokstavligen tagit mig evigheter att hitta utan hjÀlp.

import re with open('Day1/input') as file: lines=file.readlines() sum = 0 for line in lines: line = line.strip() matches = re.findall(r'\d', line) value = matches[0]+matches[-1] sum+=int(value) print("Step one:", sum) sum = 0 for line in lines: line = line.strip() original_line = line for x in range(2, len(line)): line = line[0:x].replace("one", "1").replace("two", "2").replace("three", "3").replace("four", "4").replace("five", "5").replace("six", "6").replace("seven", "7").replace("eight", "8").replace("nine", "9") + line[x:len(line)] if line != original_line: break first_digit = re.findall(r'\d', line)[0] line = original_line for x in range(1, len(line)): line = line[0:len(line)-x] + line[len(line)-x:len(line)].replace("one", "1").replace("two", "2").replace("three", "3").replace("four", "4").replace("five", "5").replace("six", "6").replace("seven", "7").replace("eight", "8").replace("nine", "9") if line != original_line: break last_digit = re.findall(r'\d', line)[-1] value = first_digit+last_digit sum+=int(value) print("Step two:", sum)

Och sÄhÀr blev det nÀr man slutligen insett att man bara behöver spara första och sista bokstaven nÀr man ersÀtter...

sum = 0 for line in lines: digits = re.findall(r'\d', line.replace("one", "on1e").replace("two", "t2o").replace("three", "t3e").replace("four", "f4r").replace("five", "f5e").replace("six", "s6x").replace("seven", "s7n").replace("eight", "e8t").replace("nine", "n9e")) sum+=int(digits[0] + digits[-1]) print("Step two:", sum)

Dold text
PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: C#
Lösning: Gillande inte dagens alls.. LÀste fel ett par gÄnger som man brukar göra men ocksÄ irriterande som ovan nÀmnde att sample för 2an inte fungerade för 1an. Satt och försökte göra en lite snyggare & snabbare del tvÄ men insÄg att jag inte orkade och det blev lite mer brute force

public override object A(string data) { return data .Split("\r\n") .Select(line => { var digits = line.Where(char.IsDigit).ToList(); return int.Parse(new string(new[] {digits.First(), digits.Last()})); }) .Sum(); } public override object B(string data) { var lineValues = new List<int>(); foreach (var line in data.Split("\r\n")) { List<char> found = new List<char>(); for (int i = 0; i < line.Length; i++) { if (char.IsDigit(line[i])) { found.Add(line[i]); continue; } for (int j = i + 1; j <= line.Length; j++) { if (Nums.TryGetValue(line[i..j], out var c)) { found.Add(c); break; } } } lineValues.Add(int.Parse(new string(new[] {found.First(), found.Last()}))); } return lineValues.Sum(); } private static readonly Dictionary<string, char> Nums = new() { {"one", '1'}, {"two", '2'}, {"three", '3'}, {"four", '4'}, {"five", '5'}, {"six", '6'}, {"seven", '7'}, {"eight", '8'}, {"nine", '9'} };

Dold text
PermalÀnk
Medlem ★
●

Dag 1 :: Haskell

Mycket svÄrare Àn nÄgot jag sett pÄ dag 1 i tidigare AOCs. Ofta skulle man trivialt kunna göra ettan i Excel, men sÄ var det absolut inte idag. Kanske hade varit lÀttare om man anvÀnt regex, men det Àr hemskt, sÄ jag vill inte.

part a

ï»żmain :: IO() main = do input <- readFile "inputs/Day1.txt" print $ sum $ map ((read::String->Int) . (\(Just f, Just l ) -> [f,l]) . firstAndLast) $ lines input firstAndLast :: String -> (Maybe Char, Maybe Char) firstAndLast s = (find isDigit s, find isDigit $ reverse s)

part b

main :: IO() main = do input <- readFile "inputs/Day1.txt" print $ sum $ map (\line -> findFirst line * 10 + findLast line) $ lines input findFirst :: [Char] -> Int findFirst s = helper 0 s take findLast :: [Char] -> Int findLast s = helper 0 s (\li ls -> drop (length ls - li ) ls) helper :: Num t1 => t1 -> t2 -> (t1 -> t2 -> [Char]) -> Int helper len s f | or tests = fromJust (elemIndex True tests ) `mod` 10 | otherwise = helper (len + 1) s f where tests = [isInfixOf digit $ f len s | digit <- digits] digits :: [String] digits = map show [0..9] ++ ["__blank__", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]

Dold text
Visa signatur

i5-7600k . GTX 1080 . 16 GB

PermalÀnk
Medlem
●

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

ÖvervĂ€gde att göra en mer komplicerad regex för del 2, men det slog mig sedan att den hĂ€r fullösningen borde funka lika bra.

Visa signatur

3700X | 32GB DDR4 3600 | 3070