🌟 Advent of Code (AoC) 2022 🌟

PermalÀnk
Medlem ★
●

Dag 3
SprÄk C#
Kommentarer

Lite drygt att versaler kommer före gemener i teckentabellen, sÄ det blev ju lite specialfall av det. Kom ju ocksÄ pÄ att jag kunde slippa skriva nÄn jÀmförelse av strÀngar pÄ egen hand, sÄ dÄ blev ju sjÀlva uppgiften rÀtt snabbt löst efter det.

Dold text

Kod

using var sr = new StreamReader("input.txt"); int pt1score = 0; int pt2score = 0; int i = 1; string line2 = ""; string line3 = ""; while (!sr.EndOfStream) { var line = sr.ReadLine()!; pt1score += line.Substring(0, line.Length / 2).Where(x => line.Substring(line.Length / 2) .Contains(x)).Distinct().Sum(x => score_item(x)); if (i%3 == 0) { pt2score += line.Where(x => line2.Contains(x) && line3.Contains(x)).Distinct().Sum(x => score_item(x)); } i++; line3 = line2; line2 = line; } Console.WriteLine("Part 1 " + pt1score); Console.WriteLine("Part 2 " + pt2score); int score_item(char item) { if (item < 91) return item - 38; else return item - 96; }

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
●
Skrivet av Barsk66:

Alla svar hÀr missar en viktig punkt sÄvitt jag kan se och har dÀrmed en bugg. Jag lÀgger detta som gömt, dÄ man vÀl kanske ska ge sig pÄ att klara problemet innan man ser min punkt nedan som alltsÄ inte Àr kod utan en problembeskrivning:

Flera alver kan ha samma summa, och dÄ ska det ju bli en lista pÄ alla de alver som har högsta summan som Àr svaret. Alla svar som jag kan se missar detta vilket Àr en bugg. Nu rÄkar ju input-texten inte ge detta utfall, men med annan slumpmÀssig indata sÄ kommer det att bli fel. FrÄgan Àr ocksÄ fel stÀlld i AoC's site dÄ det frÄgar *vilken* alv nÀr det borde stÄ *vilken/vilka (om flera)*. Fast det hade ju förstÄs gett en ledtrÄd till lösningen.

Dold text

HÄller inte med, det borde stÄtt i sÄ fall.

Min lösning (om Àn lite sent)
Dag: 1
SprÄk: C#

using static System.Console; WriteLine("--- Day 1: Calorie Counting ---"); #region HandleData List<int> elves = new(); int calories = 0; foreach (var line in File.ReadLines("puzzleInput.txt")) { if (!string.IsNullOrWhiteSpace(line)) { calories += int.Parse(line); } else { elves.Add(calories); calories = 0; } } if (calories > 0) { elves.Add(calories); } int indexOfElve = elves.IndexOf(elves.Max()); #endregion WriteLine($"Elf nr {indexOfElve + 1} carrying the most calories and has {elves[indexOfElve]} calories");

Dold text
Visa signatur

AMD Ryzen 5 2600 | MSI B450 Gaming Pro Carbon AC | Corsair 32GB CL 15 (4x8GB) DDR4 3000MHz | Corsair RM750X 750W v2 | MSI RTX 2060 Ventus XS 6GB | NZXT H440 Midi Tower :: ASUS VivoBook 15 X505ZA-BQ252T AMD Ryzen 7 | 2700U Radeon Vega 10
Vilken var din första?

PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

Oj. Förklara! Hur tÀnkte du? Varför fungerar det hÀr?

Egentligen Àr den ju ganska over-engineered eftersom man i trÀningsdatan har all information som krÀvs för att kunna berÀkna slutresultatet. Men det var mest som en kul grej, i stÀllet för att skriva massa if-satser sÄ tÀnkte jag att det kan ju algoritmen sjÀlv fÄ reda ut sÄ slipper jag.

Visa signatur

1

PermalÀnk
●

Dag 3
SprÄk: Rust
Lösning: Github
Blev en extern crate, finns sÀkert nÄgot std sÀtt att göra samma sak.

use itertools::Itertools; use std::fs; pub fn run() { let data = fs::read_to_string("dec_03.txt").expect("unable to read file"); println!("Part 1: {}", part1(&data)); println!("Part 2: {}", part2(&data)); } fn part1(data: &String) -> i32 { let mut sum: i32 = 0; for line in data.lines() { let (first, second) = line.split_at(line.len() / 2); let mut item = ' '; for c in first.chars() { match second.find(c) { Some(0..=99) => item = c, _ => {} } } match item.is_ascii_lowercase() { true => { sum += item as i32 - 96; } false => { sum += item as i32 - 38; } } } sum } fn part2(data: &String) -> i32 { let mut sum = 0; for line in &data.lines().chunks(3) { let group: Vec<_> = line.collect(); let mut item = ' '; for c in group[0].chars() { match group[1].find(c) { Some(0..=99) => match group[2].find(c) { Some(0..=99) => { item = c; } _ => {} }, _ => {} } } match item.is_ascii_lowercase() { true => { sum += item as i32 - 96; } false => { sum += item as i32 - 38; } } } sum }

Dold text
PermalÀnk
●

Jag blir nĂ€stan lite irriterad nĂ€r jag ser folk som kan sina verktyg sĂ„ bra som en del av er gör. 😆
Jag löser uppgifterna, naturligtvis, men nĂ€r man efterĂ„t kommer in i den hĂ€r trĂ„den Ă€r det lite som ”hur ska man egentligen tĂ€nka?”

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: C#

private (int partOne, int partTwo) Solve(string input) { var partOne = input .ToLines() .Select(s => s.ToCharArray()) .Select(array => array.Take(array.Length / 2).Join(array.Skip(array.Length / 2) , k => k , k => k , (k, result) => (int)char.ToLower(result) + (char.IsUpper(result) ? -70 : -96) ) ).Select(grp => grp.ToList()) .ToList(); var partTwo = input .ToLines() .Select(row => row.ToCharArray()) .Chunk(3) .Select(group => group[0] .Join(group[1], k => k, k => k, (k, r) => r) .Join(group[2], k => k, k => k, (k, r) => r)) .SelectMany(grp => grp.Select(res => (int)char.ToLower(res) + (char.IsUpper(res) ? -70 : -96)) .Distinct()); return (partOne.Select(rugSack => rugSack.Distinct().Single()).Sum() , partTwo.Sum()); }

* ToLines() Àr min egna metod som splittar pÄ \n

Dold text
Visa signatur

AMD 7700X (EK 240mm AIO) | ROG Strix B650E-F Gaming | Gigabyte RX 6800 XT 16GB OC | Kingston Fury 32GB DDR5 5600mhz | Kingston Fury Renegade M2 2TB | Alienware AW2723DF 280hz

PermalÀnk
Medlem
●

Dag: 3
SprÄk: Java
Lösning: I have nothing to say in my defense.

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class DayThree { public static void main(String[] args) { List<String> rucksack = new ArrayList<>(); try { File file = new File("C:\\AoC 22\\inputDay3.txt"); FileReader filereader = new FileReader(file); BufferedReader bufferedreader = new BufferedReader(filereader); String line; while((line = bufferedreader.readLine()) != null) { rucksack.add(line); } filereader.close(); } catch(IOException e) { e.printStackTrace(); } String alphabet = "-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int prioritySum = 0; for(int i = 0; i < rucksack.size(); i++) { String items = rucksack.get(i); String tempFirst = items.substring(0, items.length()/2); String tempSecond = items.substring(items.length()/2, items.length()); int counter = 0; for(int j = 0; j < tempFirst.length(); j++) { for(int k = 0; k < tempSecond.length(); k++) { if(tempFirst.charAt(j) == tempSecond.charAt(k)) { counter++; if(counter == 1) prioritySum = prioritySum + alphabet.indexOf(tempFirst.charAt(j)); } } } } System.out.println("Priority: " + prioritySum); int prioritySumNew = 0; for(int i = 0; i < rucksack.size(); i = i+3) { String tempFirst = rucksack.get(i); String tempSecond = rucksack.get(i+1); String tempThree = rucksack.get(i+2); int counter = 0; for(int j = 0; j < tempFirst.length(); j++) { for(int k = 0; k < tempSecond.length(); k++) { for(int o = 0; o < tempThree.length(); o++) { if(tempFirst.charAt(j) == tempSecond.charAt(k) && tempFirst.charAt(j) == tempThree.charAt(o)) { counter++; if(counter == 1) prioritySumNew = prioritySumNew + alphabet.indexOf(tempFirst.charAt(j)); } } } } } System.out.println("Badge Priority: " + prioritySumNew); } }

Dold text
PermalÀnk
●

Dag: 3
SprÄk: Haskell

-- The program expects the input on stdin, ie -- $ ./solve < input import Data.List (elemIndex) main = interact solve solve :: String -> String solve input = "Problem 1: " ++ show p1 ++ "\n" ++ "Problem 2: " ++ show p2 ++ "\n" where p1 = foldr ((+).score) 0 (map (head.dupes.halves) (lines input)) p2 = foldr ((+).score) 0 (findBadges (lines input)) -- Find common character from first 3 lines, continue recursively. findBadges :: [String] -> String findBadges (e:f:g:es) = head (dupes (e,(dupes (f,g)))):findBadges es findBadges _ = "" -- Find the common characters in two strings. dupes :: (String, String) -> String dupes (c1, c2) = filter ((flip elem) c1) c2 -- Split a string in half. halves :: String -> (String, String) halves s = splitAt (div (length s) 2) s -- Score of a character from the problem description. score :: Char -> Int score c = case elemIndex c (['a'..'z'] ++ ['A'..'Z']) of Just i -> i + 1 _ -> 0

(Jag anvÀnder highlight som finns i apt för syntaxfÀrgning.)

Dold text
PermalÀnk
●
Skrivet av Det Otroliga ÅbĂ€ket:

Jag blir nĂ€stan lite irriterad nĂ€r jag ser folk som kan sina verktyg sĂ„ bra som en del av er gör. 😆
Jag löser uppgifterna, naturligtvis, men nĂ€r man efterĂ„t kommer in i den hĂ€r trĂ„den Ă€r det lite som ”hur ska man egentligen tĂ€nka?”

Det Àr det som Àr det fina, alla kan vara med och utmana sig sjÀlva oavsett skicklighetsnivÄ och jag tror alla lÀr sig nÄgot av att se andras lösningar.

PermalÀnk
●
Skrivet av Gubbjekeln:

Det Àr det som Àr det fina, alla kan vara med och utmana sig sjÀlva oavsett skicklighetsnivÄ och jag tror alla lÀr sig nÄgot av att se andras lösningar.

Sjukt bra sÀtt att lÀra sig. Brukar alltid försöka lösa sjÀlv först och sen se hur mycket snyggare man hade kunnat löst det. Ofta lÀr man sig nÄgot som man sen kan anvÀnda sig av senare dagar eller nÀsta kalender, eller gud förbjude till nÄgot produktivt.

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: Elixir
Lösning: Github

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

PermalÀnk
Medlem ★
●

Dag: Valfri
SprÄk: Python
https://github.com/ostwilkens/aoc2022

Visa signatur

Chassi: DAN A4 | MB: ASUS VI Impact | GPU: Titan X | CPU: 4770K | RAM: 2x8GB Corsair Vengeance | SSD: Samsung 830 512GB | SkÀrm: ASUS Swift IPS

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: Tafflig F#

open System.IO let DuplicatedItem rs = rs |> fst |> Set.intersect (rs |> snd) |> Set.toList |> List.head let scoreChar chr = match chr with | _ when chr >= 'a' && chr <='z' -> int(chr) - 96 | _ when chr >= 'A' && chr <= 'Z' -> int(chr) - 38 let parseRow (input:string) = let r1, r2 = input.ToCharArray() |> List.ofArray |> List.splitAt (input.Length / 2) (Set.ofList r1, Set.ofList r2) let task2:string[] -> int = List.ofArray>> List.map (fun c-> c.ToCharArray() |> Set.ofArray) >> List.chunkBySize 3 >> List.sumBy (Set.intersectMany >> Set.toList >> List.head >> scoreChar) let input = File.ReadAllLines "input.txt" printfn "Task 1: %A" (input |> Seq.sumBy (parseRow >> DuplicatedItem >> scoreChar )) printfn "Test 2: %A" (input |> task2)

Dold text
Visa signatur

Jag Àr en optimist; det Àr aldrig sÄ dÄligt sÄ att det inte kan bli sÀmre.

PermalÀnk
Medlem
●

Dag: 3
SprÄk: Dyalog APL
Jag ska försöka hinna med att skriva en förklaring av APL koden senare.

d←(⎕A,⍹⎕C⎕A)∘⍳¹⊃⎕NGET'3.txt'1 +/⊃¹{(2Ă·âšâ‰ąâ”)(↑∩↓)⍔}šd ⍝ del1 +/⊃š∩/{(3Ă·âšâ‰ąâ”)3⍎⍔}d ⍝ del2

Dold text

SprÄk: Scala
Det blir inte sÄ mycked kod i andra sprÄk heller.

val input = Using.resource(Source.fromFile("""3.txt"""))(_.getLines().toList) extension (c: Char) def priority = if c.isLower then c - 'a' + 1 else c - 'A' + 27 input.map(s => s.splitAt(s.length / 2).pipe(_.intersect(_).head.priority)).sum // del1 input.grouped(3).map(_.reduce(_.intersect(_)).head.priority).sum // del2

Dold text
PermalÀnk
Medlem
●

Dag: 3
SprÄk C#

Intersect fixar biffen idag.

Har glömt posta för de andra dagarna, men gÄr att titta pÄ dem hÀr

namespace AOC2022.Puzzles; internal class Puzzle3 : Puzzle<int> { protected override void Solve(string[] lines) { One = lines .Sum(line => line.Substring(0, line.Length / 2) .Intersect(line.Substring(line.Length / 2)) .Select(GetPriority) .Single()); Two = lines .Chunk(3) .Sum(group => group .Skip(1) .Aggregate(group.First(), (a, b) => string.Concat(a.Intersect(b)), x => GetPriority(x.Single()))); } private static int GetPriority(char type) => type - (char.IsUpper(type) ? 38 : 96); }

Dold text
PermalÀnk
Medlem
●

Dag: 1
SprÄk: C

#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) int parseInt(const char *str) { char *endptr; int ret; errno = 0; ret = strtol(str, &endptr, 10); if (errno != 0) { perror("Failed to parse string"); exit(EXIT_FAILURE); } if (endptr == str) { fprintf(stderr, "No digits were found\n"); exit(EXIT_FAILURE); } if (*endptr != '\0') printf("Warning: further characters after number: \"%s\"\n", endptr); return ret; } int main(void) { char *line = NULL; size_t len = 0; ssize_t nread; int curSum = 0; int top[3] = { 0 }; FILE *fp = fopen("d1_input.txt", "r"); if (!fp) { perror("Failed to open file"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, fp)) != -1) { if (!strcmp(line, "\n")) { for (unsigned int i=0; i<ARRAY_LEN(top); i++) { if (top[i] <= curSum) { memmove(&top[i+1], &top[i], (ARRAY_LEN(top)-i-1)*sizeof(top[0])); top[i] = curSum; break; } } curSum = 0; continue; } line[nread-1] = '\0'; curSum += parseInt(line); } free(line); fclose(fp); curSum = 0; printf("Max calorie sum: %d\n", top[0]); printf("Top calorie sums:"); for (unsigned int i=0; i<ARRAY_LEN(top); i++) { curSum += top[i]; printf (" %d", top[i]); } printf("\n"); printf("Top total sum: %d\n", curSum); exit(EXIT_SUCCESS); }

Dold text

Dag: 2
SprÄk: C

#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> enum weapon { ROCK = 0, PAPER, SCISSORS }; enum outcome { LOSS = ROCK, TIE = PAPER, WIN = SCISSORS }; const int value[3] = { [ROCK] = 1, [PAPER] = 2, [SCISSORS] = 3 }; const int score[3] = { [LOSS] = 0, [TIE] = 3, [WIN] = 6 }; // Outcome score LUT, first dimension: my weapon, second dimension their weapon const int outcomeScore[3][3] = { [ROCK] = { [ROCK] = score[TIE], [PAPER] = score[LOSS], [SCISSORS] = score[WIN] }, [PAPER] = { [ROCK] = score[WIN], [PAPER] = score[TIE], [SCISSORS] = score[LOSS] }, [SCISSORS] = { [ROCK] = score[LOSS], [PAPER] = score[WIN], [SCISSORS] = score[TIE] }, }; // My weapon value LUT for certain outcome, first dimension: outcome, second dimension: their weapon const int valueGivenOutcome[3][3] = { [LOSS] = { [ROCK] = value[SCISSORS], [PAPER] = value[ROCK], [SCISSORS] = value[PAPER] }, [TIE] = { [ROCK] = value[ROCK], [PAPER] = value[PAPER], [SCISSORS] = value[SCISSORS] }, [WIN] = { [ROCK] = value[PAPER], [PAPER] = value[SCISSORS], [SCISSORS] = value[ROCK] }, }; int getWeaponOrOutcomeIdx(char chr) { switch (chr) { case 'A': case 'X': return ROCK; case 'B': case 'Y': return PAPER; case 'C': case 'Z': return SCISSORS; default: fprintf(stderr, "Unknown character: %c\n", chr); exit(EXIT_FAILURE); } } int main(void) { char *line = NULL; size_t len = 0; ssize_t nread; int totalScoreP1 = 0; int totalScoreP2 = 0; FILE *fp = fopen("d2_input.txt", "r"); if (!fp) { perror("Failed to open file"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, fp)) != -1) { enum weapon theirIdx, myIdx; char *tok = strtok(line, " \n"); if (!tok) exit(EXIT_FAILURE); theirIdx = getWeaponOrOutcomeIdx(tok[0]); tok = strtok(NULL, " \n"); if (!tok) exit(EXIT_FAILURE); myIdx = getWeaponOrOutcomeIdx(tok[0]); totalScoreP1 += value[myIdx] + outcomeScore[myIdx][theirIdx]; totalScoreP2 += valueGivenOutcome[myIdx][theirIdx] + score[myIdx]; } free(line); fclose(fp); printf("totalScoreP1 = %d\n", totalScoreP1); printf("totalScoreP2 = %d\n", totalScoreP2); exit(EXIT_SUCCESS); }

Dold text

Dag: 3
SprÄk: C

#include <errno.h> #include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) int getPriority(uint64_t item) { int lcase, ucase; lcase = ffs(item >> 32); ucase = ffsll((item & 0xffffffff) << 26); return lcase + ucase; } int main(void) { char *line = NULL; size_t len = 0; ssize_t nread; uint32_t totalPrio = 0; uint32_t totalBadgePrio = 0; FILE *fp = fopen("d3_input.txt", "r"); if (!fp) { perror("Failed to open file"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, fp)) != -1) { uint64_t compartment[2] = { 0 }; uint64_t overlap; static uint64_t rucksack[3]; static int rucksack_cnt = 0; nread--; for (int i=0; i<nread>>1; i++) compartment[0] |= UINT64_C(1)<<(line[i]-'A'); for (int i=nread>>1; i<nread; i++) compartment[1] |= UINT64_C(1)<<(line[i]-'A'); overlap = compartment[0] & compartment[1]; totalPrio += getPriority(overlap); // Part 2: rucksack[rucksack_cnt++] = compartment[0] | compartment[1]; if (rucksack_cnt == ARRAY_LEN(rucksack)) { uint64_t badge = UINT64_MAX; for (unsigned int i=0; i<ARRAY_LEN(rucksack); i++) badge &= rucksack[i]; rucksack_cnt = 0; totalBadgePrio += getPriority(badge); } } free(line); fclose(fp); printf("Total prio: %"PRIu32"\n", totalPrio); printf("Total badge prio: %"PRIu32"\n", totalBadgePrio); exit(EXIT_SUCCESS); }

Dold text
PermalÀnk
●

Dag 3
SprÄk: C#

Part 1

string[] rucksack = File.ReadAllLines(@Files/day3.txt); int prioritiesSum = 0; for (int i = 0; i < rucksack.Length; i++) { var compOne = rucksack[i].Substring(0, (rucksack[i].Length / 2)); var compTwo = rucksack[i].Substring((rucksack[i].Length / 2), (rucksack[i].Length / 2)); var match = Regex.Match(compOne, @$"[{compTwo}]"); if (match.Success) { if (match.Value == match.Value.ToUpper()) { byte[] ascii = Encoding.ASCII.GetBytes(match.Value); prioritiesSum += (ascii[0] - 38); } else { byte[] ascii = Encoding.ASCII.GetBytes(match.Value); prioritiesSum += (ascii[0] - 96); } } } Console.WriteLine(prioritiesSum);

Part 2

string[] rucksack = File.ReadAllLines(@Files/day3.txt); int keysumtotal = 0; for (int i = 0; i < rucksack.Length; i += 3) { var elf1 = rucksack[i]; var elf2 = rucksack[i + 1]; var elf3 = rucksack[i + 2]; string commonkey = string.Empty; int keysumgroup = 0; foreach (char c in elf1) { if (Regex.Count(c.ToString(), @$"[{elf2}]") > 0 && Regex.Count(c.ToString(), @$"[{elf3}]") > 0) commonkey = c.ToString(); } if (commonkey == commonkey.ToUpper()) { byte ascii = Encoding.ASCII.GetBytes(commonkey)[0]; keysumgroup += (ascii - 38); } else { byte ascii = Encoding.ASCII.GetBytes(commonkey)[0]; keysumgroup += (ascii - 96); } keysumtotal += keysumgroup; } Console.WriteLine(keysumtotal);

Dold text
PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: Kotlin

del1: Dela upp texten i rader -> hitta intersection mellan höger och vÀnster sida av raden -> summera över bokstÀvernas vÀrde.

del2: Gör om textrader till sets och sÀtt i grupper om 3 -> vik ihop dessa sets genom att kolla deras intersection -> summera vÀrde.

fun Char.priorityValue() = if(this.code > 96) this.code - 96 else this.code -38 println(input.lines().flatMap { it.substring(0, it.length/2).toSet().intersect(it.substring(it.length/2).toSet()) } .sumOf(Char::priorityValue)) println(input.lines().map { it.toSet() }.chunked(3) .flatMap { it[0].intersect(it[1]).intersect(it[2])} .sumOf(Char::priorityValue))

Dold text
Visa signatur

i5-7600k . GTX 1080 . 16 GB

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: C++

#include "../AoCHelper/AoCHelper.h" #include <vector> void puzzle_one(std::vector<std::string> input) { std::vector<int> calories{}; int currentElfCalorie{0}; for (std::string row : input) { if (row == "") { // next elf calories.push_back(currentElfCalorie); currentElfCalorie = 0; } else { currentElfCalorie = currentElfCalorie + std::stoi(row); } } std::sort(calories.begin(), calories.end()); int answer{calories.back()}; std::cout << "Puzzle one: " << answer << std::endl; } void puzzle_two(std::vector<std::string> input) { std::vector<int> calories{}; int currentElfCalorie{0}; for (std::string row : input) { if (row == "") { // next elf calories.push_back(currentElfCalorie); currentElfCalorie = 0; } else { currentElfCalorie = currentElfCalorie + std::stoi(row); } } std::sort(calories.begin(), calories.end(), std::greater<int>()); int answer{calories.at(0) + calories.at(1) + calories.at(2)}; std::cout << "Puzzle two: " << answer << std::endl; } int main() { std::vector<std::string> exampleInput{"", "", "", "", ""}; AoCHelper a1{"2022", "1"}; std::vector<std::string> result = a1.get_input(); puzzle_one(result); puzzle_two(result); }

Dold text

Dag: 2
SprÄk: C++

#include "../AoCHelper/AoCHelper.h" #include <vector> void puzzle_one(std::vector<std::string> input) { int answer{0}; for (std::string row : input) { char enemyMove = row[0]; char playerMove = row[2]; const int rockBonusPoints = 1; const int paperBonusPoints = 2; const int scissorBonusPoints = 3; int bonusPoints = 0; enemyMove == 'A' ? enemyMove = 'R' : enemyMove == 'B' ? enemyMove = 'P' : enemyMove = 'S'; switch (playerMove) { case 'X': playerMove = 'R'; bonusPoints = rockBonusPoints; break; case 'Y': playerMove = 'P'; bonusPoints = paperBonusPoints; break; case 'Z': playerMove = 'S'; bonusPoints = scissorBonusPoints; break; default: break; } if (enemyMove == playerMove) { // "Tie" answer += 3; } else if (enemyMove == 'R' && playerMove == 'P' || enemyMove == 'S' && playerMove == 'R' || enemyMove == 'P' && playerMove == 'S') { // "Player wins" answer += 6; } answer += bonusPoints; } std::cout << "Puzzle one: " << answer << std::endl; } void puzzle_two(std::vector<std::string> input) { int answer{0}; for (std::string row : input) { char enemyMove = row[0]; char outcome = row[2]; char playerMove{}; const int rockBonusPoints = 1; const int paperBonusPoints = 2; const int scissorBonusPoints = 3; int bonusPoints = 0; enemyMove == 'A' ? enemyMove = 'R' : enemyMove == 'B' ? enemyMove = 'P' : enemyMove = 'S'; switch (outcome) { case 'X': // need to lose playerMove = enemyMove == 'R' ? 'S' : enemyMove == 'P' ? 'R' : 'P'; break; case 'Y': // need to draw playerMove = enemyMove; break; case 'Z': // need to win playerMove = enemyMove == 'R' ? 'P' : enemyMove == 'P' ? 'S' : 'R'; break; default: break; } if (enemyMove == playerMove) { // "Tie" answer += 3; } else if (enemyMove == 'R' && playerMove == 'P' || enemyMove == 'S' && playerMove == 'R' || enemyMove == 'P' && playerMove == 'S') { // "Player wins" answer += 6; } bonusPoints = playerMove == 'R' ? rockBonusPoints : playerMove == 'P' ? paperBonusPoints : scissorBonusPoints; answer += bonusPoints; } std::cout << "Puzzle two: " << answer << std::endl; } int main() { std::vector<std::string> exampleInput{"A Y", "B X", "C Z"}; AoCHelper a1{"2022", "2"}; std::vector<std::string> result = a1.get_input(); puzzle_one(result); puzzle_two(result); }

Dold text

Dag: 3
SprÄk: C++

#include "../AoCHelper/AoCHelper.h" #include <vector> int getPriorityLevel(char item) { if (item >= 'a' && item <= 'z') { return int(item - 'a' + 1); } else if (item >= 'A' && item <= 'Z') { return int(item - 'A' + 27); } return 0; } void puzzle_one(std::vector<std::string> input) { int answer{}; for (std::string row : input) { std::vector<char> firstCompartment; std::vector<char> secondCompartment; for (int i = 0; i < row.size() / 2; i++) { firstCompartment.push_back(row[i]); } for (int i = row.size() / 2; i < row.size(); i++) { secondCompartment.push_back(row[i]); } for (int i = 0; i < firstCompartment.size(); i++) { if (std::any_of(secondCompartment.begin(), secondCompartment.end(), [&](char secondCompartmentItem) { return secondCompartmentItem == firstCompartment[i]; })) { answer += getPriorityLevel(firstCompartment[i]); break; // Only one item can be duplicate. }; } } std::cout << "Puzzle one: " << answer << std::endl; } void puzzle_two(std::vector<std::string> input) { int answer{}; for (int i = 0; i < input.size(); i += 3) { std::vector<char> firstElf; std::vector<char> secondElf; std::vector<char> thirdElf; for (int j = 0; j < input[i].size(); j++) { firstElf.push_back(input[i][j]); } for (int j = 0; j < input[i + 1].size(); j++) { secondElf.push_back(input[i + 1][j]); } for (int j = 0; j < input[i + 2].size(); j++) { thirdElf.push_back(input[i + 2][j]); } auto sameItem = std::find_if(firstElf.begin(), firstElf.end(), [&](char firstElfItem) { return std::any_of(secondElf.begin(), secondElf.end(), [&](char secondElfItem) { return secondElfItem == firstElfItem; }) && std::any_of(thirdElf.begin(), thirdElf.end(), [&](char thirdElfItem) { return thirdElfItem == firstElfItem; }); }); if (sameItem != firstElf.end()) { answer += getPriorityLevel(*sameItem); } } std::cout << "Puzzle two: " << answer << std::endl; } int main() { std::vector<std::string> exampleInput{"vJrwpWtwJgWrhcsFMMfFFhFp", "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL", "PmmdzqPrVvPwwTWBwg", "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn", "ttgJtRGJQctTZtZT", "CrZsJsPPZsGzwwsLwLmpwMDw"}; AoCHelper a1{"2022", "3"}; std::vector<std::string> result = a1.get_input(); puzzle_one(result); puzzle_two(result); }

Dold text
PermalÀnk
●

Dag: 3
SprÄk: Java

// Part 1

var filePath = "src/main/resources/day3.txt"; var input = Files.readAllLines(Path.of(filePath)); var sum = 0; for (String backpack : input) { var backpackHalf = backpack.length() / 2; var first = backpack.substring(0, backpackHalf); var second = backpack.substring(backpackHalf); var set1 = first.chars() .mapToObj(e -> (char) e) .collect(toSet()); var set2 = second.chars() .mapToObj(e -> (char) e) .collect(toSet()); set1.retainAll(set2); for (char c : set1) { sum += Character.isUpperCase(c) ? (int) c - 38 : (int) c - 96; } } System.out.println("Part 1 answer: " + sum);

Dold text

// Part 2

var sum2 = 0; var counter = 0; Set<Character> commonSet = new HashSet<>(); for (String backpack : input) { if (commonSet.size() == 0) { commonSet = backpack.chars() .mapToObj(e -> (char) e) .collect(toSet()); } else { commonSet.retainAll(backpack.chars() .mapToObj(e -> (char) e) .collect(toSet())); } if (counter++ == 2) { for (char c : commonSet) { sum2 += Character.isUpperCase(c) ? (int) c - 38 : (int) c - 96; } commonSet.clear(); counter = 0; } } System.out.println("Part 2 answer: " + sum2);

Dold text
PermalÀnk
Medlem ★
●

Dag 3, Uppgift 2:
SprÄk: Python

Lite trÄkig lösning kanske men it gets the job done.

with open("3.txt") as f: data = f.read().splitlines() data = [ord(({*a} & {*b} & {*c}).pop()) for a, b, c in zip(*[data[n::3] for n in [0, 1, 2]])] sum(s - (96 if s > 96 else 38) for s in data)

Dold text
Visa signatur

1

PermalÀnk
Medlem
●

Dag 3
SprÄk: Python

import string with open('Day3/data.txt') as file: data = file.readlines() # Create Priority dict items = string.ascii_lowercase[:26] + string.ascii_lowercase[:26].upper() priorities = {} for n, item in enumerate(items): priorities[item] = n+1 def find_dup(items): item_count = (len(items)) first_comp= items[0:(item_count//2)] second_comp = items[(item_count//2):item_count] for item in first_comp: if item in second_comp: return item break backpacks_prio = [] for backpack in data: dup = find_dup(backpack.strip()) backpacks_prio.append(priorities[dup]) print(sum(backpacks_prio)) # Part 2 groups = [] all_packs = data while len(all_packs) > 0: groups.append(data[0:3]) for _ in range(3): all_packs.pop(0) def find_badge(packs): for item in packs[0]: if item in packs[1]: if item in packs[2]: return item break badges_prio = [] for group in groups: badge = find_badge(group) print(badge) badges_prio.append(priorities[badge]) print(badges_prio) print(sum(badges_prio))

Dold text
PermalÀnk
Medlem
●
Skrivet av pemt512:

Dag: 1
SprÄk: C

#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) int parseInt(const char *str) { char *endptr; int ret; errno = 0; ret = strtol(str, &endptr, 10); if (errno != 0) { perror("Failed to parse string"); exit(EXIT_FAILURE); } if (endptr == str) { fprintf(stderr, "No digits were found\n"); exit(EXIT_FAILURE); } if (*endptr != '\0') printf("Warning: further characters after number: \"%s\"\n", endptr); return ret; } int main(void) { char *line = NULL; size_t len = 0; ssize_t nread; int curSum = 0; int top[3] = { 0 }; FILE *fp = fopen("d1_input.txt", "r"); if (!fp) { perror("Failed to open file"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, fp)) != -1) { if (!strcmp(line, "\n")) { for (unsigned int i=0; i<ARRAY_LEN(top); i++) { if (top[i] <= curSum) { memmove(&top[i+1], &top[i], (ARRAY_LEN(top)-i-1)*sizeof(top[0])); top[i] = curSum; break; } } curSum = 0; continue; } line[nread-1] = '\0'; curSum += parseInt(line); } free(line); fclose(fp); curSum = 0; printf("Max calorie sum: %d\n", top[0]); printf("Top calorie sums:"); for (unsigned int i=0; i<ARRAY_LEN(top); i++) { curSum += top[i]; printf (" %d", top[i]); } printf("\n"); printf("Top total sum: %d\n", curSum); exit(EXIT_SUCCESS); }

Dold text

Dag: 2
SprÄk: C

#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> enum weapon { ROCK = 0, PAPER, SCISSORS }; enum outcome { LOSS = ROCK, TIE = PAPER, WIN = SCISSORS }; const int value[3] = { [ROCK] = 1, [PAPER] = 2, [SCISSORS] = 3 }; const int score[3] = { [LOSS] = 0, [TIE] = 3, [WIN] = 6 }; // Outcome score LUT, first dimension: my weapon, second dimension their weapon const int outcomeScore[3][3] = { [ROCK] = { [ROCK] = score[TIE], [PAPER] = score[LOSS], [SCISSORS] = score[WIN] }, [PAPER] = { [ROCK] = score[WIN], [PAPER] = score[TIE], [SCISSORS] = score[LOSS] }, [SCISSORS] = { [ROCK] = score[LOSS], [PAPER] = score[WIN], [SCISSORS] = score[TIE] }, }; // My weapon value LUT for certain outcome, first dimension: outcome, second dimension: their weapon const int valueGivenOutcome[3][3] = { [LOSS] = { [ROCK] = value[SCISSORS], [PAPER] = value[ROCK], [SCISSORS] = value[PAPER] }, [TIE] = { [ROCK] = value[ROCK], [PAPER] = value[PAPER], [SCISSORS] = value[SCISSORS] }, [WIN] = { [ROCK] = value[PAPER], [PAPER] = value[SCISSORS], [SCISSORS] = value[ROCK] }, }; int getWeaponOrOutcomeIdx(char chr) { switch (chr) { case 'A': case 'X': return ROCK; case 'B': case 'Y': return PAPER; case 'C': case 'Z': return SCISSORS; default: fprintf(stderr, "Unknown character: %c\n", chr); exit(EXIT_FAILURE); } } int main(void) { char *line = NULL; size_t len = 0; ssize_t nread; int totalScoreP1 = 0; int totalScoreP2 = 0; FILE *fp = fopen("d2_input.txt", "r"); if (!fp) { perror("Failed to open file"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, fp)) != -1) { enum weapon theirIdx, myIdx; char *tok = strtok(line, " \n"); if (!tok) exit(EXIT_FAILURE); theirIdx = getWeaponOrOutcomeIdx(tok[0]); tok = strtok(NULL, " \n"); if (!tok) exit(EXIT_FAILURE); myIdx = getWeaponOrOutcomeIdx(tok[0]); totalScoreP1 += value[myIdx] + outcomeScore[myIdx][theirIdx]; totalScoreP2 += valueGivenOutcome[myIdx][theirIdx] + score[myIdx]; } free(line); fclose(fp); printf("totalScoreP1 = %d\n", totalScoreP1); printf("totalScoreP2 = %d\n", totalScoreP2); exit(EXIT_SUCCESS); }

Dold text

Dag: 3
SprÄk: C

#include <errno.h> #include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_LEN(x) (sizeof(x) / sizeof((x)[0])) int getPriority(uint64_t item) { int lcase, ucase; lcase = ffs(item >> 32); ucase = ffsll((item & 0xffffffff) << 26); return lcase + ucase; } int main(void) { char *line = NULL; size_t len = 0; ssize_t nread; uint32_t totalPrio = 0; uint32_t totalBadgePrio = 0; FILE *fp = fopen("d3_input.txt", "r"); if (!fp) { perror("Failed to open file"); exit(EXIT_FAILURE); } while ((nread = getline(&line, &len, fp)) != -1) { uint64_t compartment[2] = { 0 }; uint64_t overlap; static uint64_t rucksack[3]; static int rucksack_cnt = 0; nread--; for (int i=0; i<nread>>1; i++) compartment[0] |= UINT64_C(1)<<(line[i]-'A'); for (int i=nread>>1; i<nread; i++) compartment[1] |= UINT64_C(1)<<(line[i]-'A'); overlap = compartment[0] & compartment[1]; totalPrio += getPriority(overlap); // Part 2: rucksack[rucksack_cnt++] = compartment[0] | compartment[1]; if (rucksack_cnt == ARRAY_LEN(rucksack)) { uint64_t badge = UINT64_MAX; for (unsigned int i=0; i<ARRAY_LEN(rucksack); i++) badge &= rucksack[i]; rucksack_cnt = 0; totalBadgePrio += getPriority(badge); } } free(line); fclose(fp); printf("Total prio: %"PRIu32"\n", totalPrio); printf("Total badge prio: %"PRIu32"\n", totalBadgePrio); exit(EXIT_SUCCESS); }

Dold text

Tycker din lösning för dag 3 var snygg. Men hÀnger inte riktigt med pÄ hur alla bit operationer gÄr ihop sig, har du lust att förklara?

PermalÀnk
Medlem
●

Julkul!

Lite sent pÄ det, men nu Àr jag ocksÄ med i leken. En av Ärets höjdpunkter
Dag: 1
SprÄk: C
Lösning:

#include <stdio.h> #include <stdlib.h> #define ROW_LEN_MAX 8 __uint32_t solve_day_01(const int numElves) { FILE* inputFile; char lineBuf[ROW_LEN_MAX]; __uint32_t currentElf = 0; __uint32_t *topElves = malloc(numElves*sizeof(__uint32_t)); __uint8_t firstElfToGo = 0; __uint32_t heavyElvesSum = 0; for (int i = 0; i < numElves; i++) { topElves[i] = 0; } inputFile = fopen("input/day_01.txt", "r"); while(fgets(lineBuf, ROW_LEN_MAX, inputFile)) { if (lineBuf[0] == '\n') { if (currentElf > topElves[firstElfToGo]) { heavyElvesSum = heavyElvesSum + currentElf - topElves[firstElfToGo]; topElves[firstElfToGo] = currentElf; __uint32_t min = currentElf; for (int i = 0; i < numElves; i++) { if (topElves[i] < min) { min = topElves[i]; firstElfToGo = i; } } } currentElf = 0; } else { currentElf += atoi(lineBuf); } } fclose(inputFile); free(topElves); return heavyElvesSum; } int main(void) { __uint32_t part1 = solve_day_01(1); __uint32_t part2 = solve_day_01(3); printf("**AoC-2022 day 1 part 1: %d **\n", part1); printf("**AoC-2022 day 1 part 2: %d **\n", part2); }

Dold text
PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: JS (Node)

Idag var det kul tyckte jag!

import { data, testData } from "../input/day3.js" function intersect(arr1, arr2) { const setA = new Set(arr1); const setB = new Set(arr2); let interSectResult = []; for (const c of setB) { if (setA.has(c)) interSectResult.push(c) } return interSectResult; } function intersectFor3Arrays(arr1, arr2, arr3) { const setA = new Set(arr1); const setB = new Set(arr2); const setC = new Set(arr3); let interSectResult = []; for (const c of setC) { if (setA.has(c) && setB.has(c)) interSectResult.push(c); } return interSectResult; } function flatten(arr) { return [].concat.apply([], arr); } const priority = '-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); export const solutionA = () => { let items = []; for (let row of data.split('\n')) { const [compA, compB] = [row.substring(0, row.length / 2), row.substring(row.length / 2)]; items.push(intersect(compA, compB)); } items = flatten(items); const sumOfPrios = items.map(n => priority.indexOf(n)).reduce((a, b) => a + b, 0); console.log(sumOfPrios) } export const solutionB = () => { const rows = data.split('\n'); let items = []; for (let i = 0; i < rows.length; i+=3) { let compA = rows[i], compB = rows[i+1], compC = rows[i+2]; items.push(intersectFor3Arrays(compA, compB, compC)); } items = flatten(items); const sumOfPrios = items.map(n => priority.indexOf(n)).reduce((a, b) => a + b, 0); console.log(sumOfPrios); }

Dold text
PermalÀnk
Medlem
●

Dag 3 Java.
Finns Àndel att snygga till xD.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; public class day3 { public static void main(String[] args) throws IOException { ArrayList<String> compartmentOne = new ArrayList<>(); ArrayList<String> compartmentTwo = new ArrayList<>(); ArrayList<String> backPack = new ArrayList<>(); ArrayList<Character> duplicates = new ArrayList<>(); ArrayList<Character> duplicates2 = new ArrayList<>(); Path filePath = Path.of("src/input03.txt"); String day3Content = Files.readString(filePath); StringBuilder builder = new StringBuilder(); for (int i = 0; i < day3Content.length(); i++) { if (day3Content.charAt(i) != ('\n')) { builder.append(day3Content.charAt(i)); } else { backPack.add(builder.toString()); builder = new StringBuilder(); } } StringBuilder builder1 = new StringBuilder(); StringBuilder builder2 = new StringBuilder(); for (String s : backPack) { int halfSize = s.length() / 2; for (int j = 0; j < s.length(); j++) { if (j < halfSize) builder1.append(s.charAt(j)); else builder2.append(s.charAt(j)); } compartmentOne.add(builder1.toString()); builder1.setLength(0); compartmentTwo.add(builder2.toString()); builder2.setLength(0); } Character duplicate = null; for (int i = 0; i < backPack.size(); i++) { for (int j = 0; j < compartmentOne.get(i).length(); j++) { for (int k = 0; k < compartmentOne.get(i).length(); k++) { if (compartmentOne.get(i).charAt(j) == compartmentTwo.get(i).charAt(k)) duplicate = compartmentOne.get(i).charAt(j); } } duplicates.add(duplicate); } char[] duplicates3 = new char[duplicates.size()/3]; for (int i = 0; i < backPack.size()-2; i++) { for (int j = 0; j < backPack.get(i).length(); j++) { for (int k = 0; k <backPack.get(i+1).length() ; k++) { for (int l = 0; l <backPack.get(i+2).length(); l++) { if(backPack.get(i).charAt(j) == backPack.get(i+1).charAt(k)){ if(backPack.get(i).charAt(j) == backPack.get(i+2).charAt(l)){ char badge = backPack.get(i+2).charAt(l); duplicates3[(i+2)/3] = badge; } } } } } } for (int i = 0; i < duplicates3.length; i++) { duplicates2.add(duplicates3[i]); } System.out.println(sumList(duplicates)); System.out.println(sumList(duplicates2)); } private static int sumList(ArrayList<Character> duplicates) { String alphabet = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int sum = 0; for (int i = 0; i < alphabet.length(); i++) { for (Character duplicate : duplicates) { if (alphabet.charAt(i) == duplicate) sum += i; } } return sum; } }

Dold text
Visa signatur

Ghost S1 || Asrock Phantom Gaming Z390 || 9900KF || Corsair 32GB@3400MHz CL16/1.45volt || Intel 660p 1gb || Corsair sf600 || RTX 4070 Inno3d 2x|| Asus PG279QM

Macbook pro 14 M1

PermalÀnk
●

Dag 3 Java

Kommentar:

Jag Àr inte helt nöjd med koden, gjorde den nu ikvÀll lite snabbt och ville bara fÄ det klart, finns sÀkert en hel del att anmÀrka pÄ i koden, men har studerat Java i c:a 7 mÄnader nu, tidigare C# senior , sÄ kÀnde att AoC Àr perfekt tillfÀlle att verkligen fÄ sÀtta sitt kunnande pÄ prov och det fick man göra idag !

Finns garanterat bÀttre verktyg för detta Àn en helvetes massa loopar hit och dit, looparna i del 2 Àr bedrövligt skrivna .. men men, det funkar!

package aoc_template; import java.io.*; import java.util.*; public class Aoc_template { public static void main(String[] args) { List<String> all_items = new ArrayList<>(); List<Character> complete_list = new ArrayList<>(); int total_prio = 0; try { File file=new File("C:/aoc_input/03/input.txt"); FileReader fr=new FileReader(file); BufferedReader br=new BufferedReader(fr); StringBuffer sb=new StringBuffer(); String line; while((line=br.readLine())!=null) { all_items.add(line); } fr.close(); } catch(IOException e) { e.printStackTrace(); } for (int i = 0; i<all_items.size();i++) { String original = all_items.get(i); String firsthalf = ""; String secondhalf = ""; if(original.length()%2 == 0) { firsthalf =original.substring(0, original.length()/2); secondhalf = original.substring(original.length()/2); char[] first_half = firsthalf.toCharArray(); char[] second_half = secondhalf.toCharArray(); boolean found = false; for (int j = 0; j<first_half.length;j++) { for (int k = 0; k<second_half.length;k++) { if (second_half[k] == first_half[j] && found == false) { complete_list.add(first_half[j]); found = true; } } } } } for (int i = 0; i<complete_list.size();i++) { char val = complete_list.get(i); if (Character.isLowerCase(val)) { total_prio = total_prio + (complete_list.get(i).charValue() - 96); } else{ total_prio = total_prio + (complete_list.get(i).charValue() - 38); } } System.out.println("Total part 1 : " + total_prio); // End of part 1 // Start of part 2 String[] temp1 = new String[1]; String[] temp2 = new String[1]; String[] temp3 = new String[1]; int total_score = 0; boolean reached_three = false; int counter = 0; boolean found = false; for (int a = 0;a<all_items.size();a++) { if (a % 3 == 0){ found = false; temp1[0] = all_items.get(a); temp2[0] = all_items.get(a + 1); temp3[0] = all_items.get(a + 2); char[] temp1_char = temp1[0].toCharArray(); char[] temp2_char = temp2[0].toCharArray(); char[] temp3_char = temp3[0].toCharArray(); for (char c : temp1_char) { for (char d : temp2_char) { for (char e : temp3_char) { if (d == c) { if (e == d && found == false) { char val = e; int test = e; if (Character.isLowerCase(val)) { total_score = total_score + test - 96; reached_three = false; found = true; break; } else{ total_score = total_score + test - 38; reached_three = false; found = true; break; } } } } } } } } System.out.println("Total part 2 : " + total_score); } }

Dold text
Visa signatur

[ -- Gaming -- ]
{ i5-9600k - RTX 3070 OC - 16GB - 3 x 1TB m.2 }
[ -- Workstation --]
{ i7-5960X | GTX 1660 6GB / Quadro | 48GB corsair dominator platinum | 20TB }
{ Lenovo T480S | i7-8650U | 16 GB | 512 GB }

PermalÀnk
Medlem ★
●

Dag: 3
SprÄk: Pwsh (Powershell 7)
Lösning:

function start-day3_prioCalc { param( [parameter(mandatory=$true)]$letter ) switch ( $letter ){ { $PSItem -cmatch "[A-Z]"} { $isUpperCase = $true } { $PSItem -cmatch "[a-z]"} { $isUpperCase = $false } default { Write-Host "Bad matching char!"; Break } } if ( $isUpperCase ) { $prioNum = ([int][char]$letter - (64-26)) } else { $prioNum = ([int][char]$letter - 96) } return $prioNum } function start-day3 { $day3InputData = @(Get-Content -Path "day_03_input.txt" -Delimiter "`n") # START Part 1 $prioResultSumPart1 = 0 $prioResultSumPart2 = 0 $groupCounter = 0 $day3InputData | ForEach-Object { #Check if length is div with 2 $stringCharCount = $PSItem.Length $stringInputWhole = $PSItem if( $stringCharCount.ToString().ToCharArray()[-1] -match "1|3|5|7|9" ) { write-host "String is uneaven lenght ($($stringCharCount[-1]))" Break } $spitStringCharArrayPart1 = ($stringInputWhole.Substring(0,($stringCharCount/2))).ToCharArray() $spitStringCharArrayPart2 = ($stringInputWhole.Substring($stringCharCount - ($stringCharCount/2))).ToCharArray() $matchingChar = $null $matchingChar = $spitStringCharArrayPart1 | ForEach-Object { #Write-Host ($spitStringCharArrayPart2 -cmatch $PSItem) return ($spitStringCharArrayPart2 -cmatch $PSItem) } $matchingChar = $matchingChar | Select-Object -First 1 $prioPart1 = start-day3_prioCalc -letter $matchingChar $prioResultSumPart1 = $prioResultSumPart1 + $prioPart1 } # END Part 1 # START Part 2 $prioResultSumPart2 = 0 $groupCounter = 0 1..(($day3InputData.Length)/3) | ForEach-Object { $badgeMatchingChar = $day3InputData[$groupCounter].ToString().ToCharArray() | ForEach-Object { $currentChar = $null $currentChar = $PSItem if( ($day3InputData[$groupCounter+1] -cmatch $currentChar) -and ($day3InputData[$groupCounter+2] -cmatch $currentChar) ){ return $currentChar } else { } } $prioPart2 = start-day3_prioCalc -letter ($badgeMatchingChar | Select-Object -First 1) $prioResultSumPart2 = $prioResultSumPart2 + $prioPart2 $groupCounter = $groupCounter+3 } # END Part 2 Write-Host "Day 3a: $prioResultSumPart1" Write-Host "Day 3b: $prioResultSumPart2" }

Dold text
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: 3
sprÄk: go

func main() { lines, err := helpers.ReadLines(os.Args[1]) sum := 0 for _, line := range lines { s1, s2 := line[0:len(line)/2], line[len(line)/2:] sum += findDuplicate(s1, s2) } fmt.Println((sum)) sum = 0 for i := 0; i < len(lines)-1; i += 3 { sum += findTriple(lines[i], lines[i+1], lines[i+2]) } fmt.Println((sum)) if err != nil { panic(err) } } func findDuplicate(s1, s2 string) int { seen := make(map[rune]struct{}) for _, char := range s1 { seen[char] = struct{}{} } for _, char := range s2 { if _, ok := seen[char]; ok { if unicode.IsUpper(char) { return int(char) - 38 } else { return int(char) - 96 } } } return -1 } func findTriple(s1, s2, s3 string) int { seen := make(map[rune]int) for _, char := range s1 { seen[char] = 1 } for _, char := range s2 { if val, ok := seen[char]; ok && val == 1 { seen[char]++ } } for _, char := range s3 { if val, ok := seen[char]; ok && val == 2 { if unicode.IsUpper(char) { return int(char) - 38 } else { return int(char) - 96 } } } return -1 }

Dold text
PermalÀnk
Medlem ★
●

Dag: 4
SprÄk: C#
Kvalité: Nja...

Console.WriteLine("Mickur's Advent of Code 2022 - Day 4!"); // Setup var input = File.ReadAllLines("input.txt"); var counter1 = 0; var counter2 = 0; foreach (var line in input) { var split1 = line.Split(','); // Elf 1 var elf1Split = split1[0].Split('-'); var elf1Start = AoCUtils.Parsing.FastIntParse(elf1Split[0]); var elf1Stop = AoCUtils.Parsing.FastIntParse(elf1Split[1]); // Elf 2 var elf2Split = split1[1].Split('-'); var elf2Start = AoCUtils.Parsing.FastIntParse(elf2Split[0]); var elf2Stop = AoCUtils.Parsing.FastIntParse(elf2Split[1]); // Part One: ... var elfOneCompletelyInTwo = elf2Start <= elf1Start && elf2Stop >= elf1Stop; var elfTwoCompletelyInOne = elf1Start <= elf2Start && elf1Stop >= elf2Stop; if (elfOneCompletelyInTwo || elfTwoCompletelyInOne) { counter1++; } // Part Two: ... var elfOnePartlyInTwo = (elf1Start >= elf2Start && elf1Start <= elf2Stop) || (elf1Stop >= elf2Start && elf1Stop <= elf2Stop); var elfTwoPartlyInOne = (elf2Start >= elf1Start && elf2Start <= elf1Stop) || (elf2Stop >= elf1Start && elf2Stop <= elf1Stop); if (elfOnePartlyInTwo || elfTwoPartlyInOne) { counter2++; } } Console.WriteLine(counter1); Console.WriteLine(counter2);

Dold text
SmÄpill
Visa signatur

CPU: 7950X 5GHz@1.1v | RAM: 32GB 6000MHz CL36 | GPU: KFAÂČ 3090 SG w/ AlphaCool Eisblock Aurora
Ljudkort: Modius + Magnius | Lurar: GoldPlanar GL2000 / Sennheiser HD 650 / Philips Fidelio X3 / Supreme CD-99