🌟 Advent of Code (AoC) 2021 🌟

PermalÀnk
Medlem
●
Skrivet av Dave1080:

Kastar in handduken för idag. FÄr rÀtt pÄ exemplet, men fel pÄ faktiska inputen och jag har ingen aning om varför.

Jag jÀmför alltsÄ mellan en lista med alla coordinates mot en annan likadan efter en toSet() operation dÀr den tar bort alla dubbletter, som stÀmmer in pÄ min overridade operator kollen i Coordinate klassen.

Koden: GitHub

Jag har i alla fall lÀrt mig att toSet() Àr en krÀvande operation.

Om du har tre olika linjer som överlappar i en punkt, rÀknar du det som en korsning eller tvÄ? I exemplet sÄ har de bara dubbletter, och inga trippletter eller mer, sÄ det kan man klara utan att tÀnka pÄ hur högre överlapp ska tolkas.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

PermalÀnk
Medlem
●

Day: 5
SprÄk: Rust

use std::{collections::HashMap, str::FromStr}; type Point = (u32, u32); #[derive(Debug, Clone)] struct Line { p1: Point, p2: Point, } impl Line { pub fn points(&self) -> Vec<Point> { let mut points = vec![self.p1]; let mut step_x = self.p1.0; let mut step_y = self.p1.1; while (step_x, step_y) != self.p2 { step_x = Line::step(step_x, self.p2.0); step_y = Line::step(step_y, self.p2.1); points.push((step_x, step_y)); } points } fn step(a: u32, b: u32) -> u32 { match (a, b) { (a, b) if a < b => a + 1, (a, b) if a > b => a - 1, _ => a, } } } impl FromStr for Line { type Err = String; fn from_str(s: &str) -> Result<Self, Self::Err> { let parts: Vec<&str> = s.split_whitespace().collect(); let parts: Vec<u32> = parts .iter() .flat_map(|s| s.split(',').collect::<Vec<_>>()) .filter_map(|s| s.parse().ok()) .collect(); Ok(Self { p1: (parts[0], parts[1]), p2: (parts[2], parts[3]), }) } } fn count_overlap(lines: &[Line], filter: impl Fn(&Line) -> bool) -> usize { let mut map: HashMap<Point, u32> = HashMap::new(); for line in lines.iter().filter(|line| filter(line)) { for point in line.points() { let pos = map.entry(point).or_default(); *pos += 1; } } map.iter().filter(|p| p.1 >= &2).count() } fn main() { let input = std::fs::read_to_string("input.txt").unwrap(); let lines: Vec<Line> = input.lines().filter_map(|s| s.parse().ok()).collect(); println!( "Part 1: {}", count_overlap(&lines, |line| line.p1.0 == line.p2.0 || line.p1.1 == line.p2.1) ); // 4655 println!("Part 2: {}", count_overlap(&lines, |_| true)); // 20500 }

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
Hedersmedlem ★
●
Skrivet av Bryal:

Om du har tre olika linjer som överlappar i en punkt, rÀknar du det som en korsning eller tvÄ? I exemplet sÄ har de bara dubbletter, och inga trippletter eller mer, sÄ det kan man klara utan att tÀnka pÄ hur högre överlapp ska tolkas.

@Dave1080 jag tror ocksÄ detta Àr problemet. Utan att köra koden ser det ut att om sÀg 3 linjer möts pÄ samma stÀlle sÄ rÀknas de som 3-1 = 2 punkter dÀr linjer möts, istÀllet för 1 som problemet krÀver.
Testa att göra om coordinates till en lista som sÀger hur mÄnga gÄnger varje koordinat förekommer, och rÀkna ut antalet platser i listan dÀr vÀrdet Àr >= 2.

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

Dag: 5
SprÄk: C#

internal class Puzzle5 : Puzzle<int> { public record struct Line(Point From, Point To); public struct Point { public int x; public int y; public Point(string coord) { var split = coord.Split(','); x = int.Parse(split[0]); y = int.Parse(split[1]); } public Point(int x, int y) { this.x = x; this.y = y; } } private readonly Line[] _lines; private readonly int _topX; private readonly int _topY; public Puzzle5() { _lines = File.ReadAllLines("Inputs/Puzzle5.txt") .Select(x => { var split = x.Split(" -> "); return new Line(new Point(split[0]), new Point(split[1])); }) .ToArray(); _topX = _lines.SelectMany(l => new int[] { l.From.x, l.To.x }).Max() + 1; _topY = _lines.SelectMany(l => new int[] { l.From.y, l.To.y }).Max() + 1; } public override int One() { var diagram = new int[_topX, _topY]; foreach (var point in _lines .Where(x => x.From.x == x.To.x || x.From.y == x.To.y) .SelectMany(IterateLine)) { diagram[point.x, point.y] += 1; } return CountOverlaps(diagram); } public override int Two() { var diagram = new int[_topX, _topY]; foreach (var point in _lines.SelectMany(IterateLine)) { diagram[point.x, point.y] += 1; } return CountOverlaps(diagram); } private static IEnumerable<int> IterateBetween(int from, int to) { var range = Enumerable.Range(Math.Min(from, to), Math.Abs(from - to) + 1); return from < to ? range : range.Reverse(); } private static IEnumerable<Point> IterateLine(Line line) { if (line.From.x != line.To.x && line.From.y == line.To.y) { return IterateBetween(line.From.x, line.To.x) .Select(x => new Point(x, line.From.y)); } else if (line.From.y != line.To.y && line.From.x == line.To.x) { return IterateBetween(line.From.y, line.To.y) .Select(y => new Point(line.From.x, y)); } return IterateBetween(line.From.x, line.To.x) .Zip(IterateBetween(line.From.y, line.To.y)) .Select(z => new Point(z.First, z.Second)); } private static int CountOverlaps(int[,] diagram) => diagram.Cast<int>().Count(x => x > 1); }

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

Om du har tre olika linjer som överlappar i en punkt, rÀknar du det som en korsning eller tvÄ? I exemplet sÄ har de bara dubbletter, och inga trippletter eller mer, sÄ det kan man klara utan att tÀnka pÄ hur högre överlapp ska tolkas.

Skrivet av Thomas:

@Dave1080 jag tror ocksÄ detta Àr problemet. Utan att köra koden ser det ut att om sÀg 3 linjer möts pÄ samma stÀlle sÄ rÀknas de som 3-1 = 2 punkter dÀr linjer möts, istÀllet för 1 som problemet krÀver.
Testa att göra om coordinates till en lista som sÀger hur mÄnga gÄnger varje koordinat förekommer, och rÀkna ut antalet platser i listan dÀr vÀrdet Àr >= 2.

Löste det pÄ tvÄ minuter tack vare era tips tar dock nÄgra sekunder att köra koden, knappast optimalt.

Ska nog snegla pÄ andras lösningar för att ta reda pÄ hur man ritar ut diagonala linjer, har verkligen ingen aning sjÀlv. Matematik Àr inte min starkaste sida, om man sÀger sÄ.

Dag: 5 (del 1)
SprÄk: Dart
Lösning: GitHub

Visa signatur

| Mobo: Gigabyte X570 GAMING X | CPU: AMD Ryzen 9 3900X + Dark Rock 4 | RAM: 32GB @ 3000MHz | GPU: Gigabyte RTX 3080 OC | PSU: Seasonic GX 850W | Chassi: NZXT S340 Elite Matte Black | M.2: Samsung 970 Evo 500GB & 1000GB | HDD: 4TB | Monitors: Acer Predator X34 GS & Acer XB270HU |

PermalÀnk
●
Skrivet av Dave1080:

Löste det pÄ tvÄ minuter tack vare era tips tar dock nÄgra sekunder att köra koden, knappast optimalt.

Ska nog snegla pÄ andras lösningar för att ta reda pÄ hur man ritar ut diagonala linjer, har verkligen ingen aning sjÀlv. Matematik Àr inte min starkaste sida, om man sÀger sÄ.

Dag: 5 (del 1)
SprÄk: Dart
Lösning: GitHub

Ville undvika villkor sÄ lÄngt det gÄr dÄ det blir jobbigare kod, sÄ klurade en liten stund innan jag valde att linjÀrinterpolera bÄde horisintellt och vertikalt, med antal punkter (length) baserat pÄ största differensen:

... val length = max(abs(x2 - x1), abs(y2 - y1)) val coords = (0 to length).map(i => Coord(x1 + (x2 - x1) * i / length, y1 + (y2 - y1) * i / length)) ...

Dold text
PermalÀnk
Medlem
●

Har inte kört Advent of Code tidigare men tÀnkte ge det ett försök i Är
Ska man strukturera upp det pÄ nÄgot speciellt sÀtt?
Kommer man att ÄteranvÀnda nÄgot man skriver?
Är det nĂ„got visuellt man ska göra eller rĂ€cker det med att skriva ut saker i kommandotolken?

PermalÀnk
Medlem
●
Skrivet av Bluesky1:

Har inte kört Advent of Code tidigare men tÀnkte ge det ett försök i Är
Ska man strukturera upp det pÄ nÄgot speciellt sÀtt?
Kommer man att ÄteranvÀnda nÄgot man skriver?
Är det nĂ„got visuellt man ska göra eller rĂ€cker det med att skriva ut saker i kommandotolken?

Det Àr vÀldigt fritt val hur man gör.
SjÀlva uppgifterna besvaras med ett enkelt nummer eller motsvarande, hur man fÄtt fram det spelar inte sÄ stor roll.
SÄ det gÄr bra att bara skriva ut det pÄ kommandorad om man vill det.

Är sjĂ€lv ingen fena pĂ„ det men jag tycker det Ă€r rĂ€tt skoj att förbĂ€ttra sina kunskaper lite. Ligger dock redan en dag efter, har precis gjort klart dag 4.

PermalÀnk
Medlem
●

Ligger en dag efter redan men Ä andra sidan har jag inte sÄ brÄttom. Kul att lÀra sig helt enkelt.

Lösning för dag4 i Dyalog APL.
Denna gÄng med lite kommentarer sÄ det kanske blir mer lÀttlÀst ifall nÄgon Àr nyfiken.

dag4←⊃⎕NGET'data/2021_dag4.txt'1 ⍝ Read all numbers to be drawn draws←⍎⊃dag4 ⍝ Filter to read the bingo board data for each board, drop the first line that is the numbers to draw filter←0≠≱¹1↓dag4 ⍝ read all boards as an array of matrices boards←↑↑⍎¹¹filter⊆1↓dag4 ⍝ Read in all possible combinations of boards. allboards←∹⍀boards∘=⍀0⊱draws ⍝ Calculate score for given board ( draw {dfn} board ) score←{(âș⌷draws)×+/(,~âș ⍔⌷allboards)/,⍔⌷boards} ⍝ Find the winning boards match←(√/∧⌿,∧/)⍀2⊱allboards ⎕←'Board', (2⌷⊃⍞match) ,'won and the score is',score/⊃⍾match ⍝ Part 2 ⍝ Find the first number where all boards have won, the last to win is found going back one step to see ⍝ to see which board is not yet completed. lastdraw←⊃⍾∧/match lastboard←⍾~matchâŒ·âšÂŻ1+lastdraw ⎕←'Board', (⍞~matchâŒ·âšÂŻ1+lastdraw), 'is last to win and the score will be', lastdraw score lastboard

Dold text
PermalÀnk
Medlem
●

Dag 5 C++

Nu börjar det bli tungt för compilern, men kÀnns inte som C++ om man inte har lÄnga compile times
KÀnner att jag behöver spica upp det lite nu, kÀnns som man gör samma sak varje dag nu.

https://godbolt.org/z/8Pf6WGr36

PermalÀnk
Medlem
●

Dag: 5
Lösning: Golang

Idag fick jag bara till del1. Diagonaler blev för svÄrt :/

package main import ( "bufio" "fmt" "os" ) type Instruction struct { X1 int Y1 int X2 int Y2 int } func getPartOne(instructions []Instruction) int { cords := [1000][1000]int{} var count int for _, instruction := range instructions { if instruction.Y1 == instruction.Y2 || instruction.X1 == instruction.X2 { startX, endX := findStartEnd(instruction.X1, instruction.X2) for x := startX; x <= endX; x++ { startY, endY := findStartEnd(instruction.Y1, instruction.Y2) for y := startY; y <= endY; y++ { cords[y][x]++ if cords[y][x] == 2 { count++ } } } } //break } return count } func findStartEnd(val1 int, val2 int) (int, int) { if val1 <= val2 { return val1, val2 } else { return val2, val1 } } func getRows(filename string) []Instruction { file, err := os.Open(filename) if err != nil { panic(err) } defer file.Close() scanner := bufio.NewScanner(file) var instructions []Instruction for scanner.Scan() { instruction := Instruction{} fmt.Sscanf(scanner.Text(), "%d,%d -> %d,%d", &instruction.X1, &instruction.Y1, &instruction.X2, &instruction.Y2) instructions = append(instructions, instruction) } return instructions } func main() { fmt.Println("Part one:", getPartOne(getRows("../input.txt"))) }

Dold text
PermalÀnk
Hedersmedlem ★
●
Skrivet av Frappee:

Dag 5 C++

Nu börjar det bli tungt för compilern, men kÀnns inte som C++ om man inte har lÄnga compile times
KÀnner att jag behöver spica upp det lite nu, kÀnns som man gör samma sak varje dag nu.

https://godbolt.org/z/1vvMYbfz9

Jag Àr lika imponerad varje dag, bÄde av dig och av att det ens gÄr att lösa pÄ det dÀr sÀttet.
Riktigt snyggt med direction-lösningen ocksÄ.

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
Medlem ★
●
Skrivet av Flexbert:

Dag: 5
Lösning: Golang

Idag fick jag bara till del1. Diagonaler blev för svÄrt :/

Dold text

Vi Àr tvÄ om det! Vi har i alla fall försökt. Bara att tagga inför morgondagens pussel istÀllet!

Visa signatur

| Mobo: Gigabyte X570 GAMING X | CPU: AMD Ryzen 9 3900X + Dark Rock 4 | RAM: 32GB @ 3000MHz | GPU: Gigabyte RTX 3080 OC | PSU: Seasonic GX 850W | Chassi: NZXT S340 Elite Matte Black | M.2: Samsung 970 Evo 500GB & 1000GB | HDD: 4TB | Monitors: Acer Predator X34 GS & Acer XB270HU |

PermalÀnk
Medlem
●
Skrivet av Thomas:

Jag Àr lika imponerad varje dag, bÄde av dig och av att det ens gÄr att lösa pÄ det dÀr sÀttet.
Riktigt snyggt med direction-lösningen ocksÄ.

haha vad kul att du gillar det! dÄ ska jag fortsÀtta att försöka imponera

PermalÀnk
Medlem
●

Dag: 5
SprÄk: Scala

Kommenterade raden Àr det som skiljer mellan lösningen för del1 och del2. Orkade inte skriva om koden till en bÀttre lösning.

val input = Using.resource(Source.fromFile("5.txt"))(_.getLines().toVector) input .map { case s"$x1,$y1 -> $x2,$y2" => (x1.toInt, x2.toInt, y1.toInt, y2.toInt) } .collect { case (x1, x2, y1, y2) if x1 == x2 => (y1 to y2 by (y2 - y1).sign).map(x1 -> _) case (x1, x2, y1, y2) if y1 == y2 => (x1 to x2 by (x2 - x1).sign).map(_ -> y1) // case (x1, x2, y1, y2) => (x1 to x2 by (x2 - x1).sign).zip(y1 to y2 by (y2 - y1).sign) } .flatten .groupMapReduce(identity)(_ => 1)(_ + _) .values .count(_ >= 2)

Dold text
PermalÀnk
●

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

Dagens uppgift var right up my alley Tycker om simuleringar och att klura ut hur man kan optimisera algoritmer. Man behövde tÀnka till men nÀr man insÄg att man bara behövde hÄlla koll pÄ hur mÄnga fiskar som var pÄ vardera dag, och inte hÄlla koll pÄ varje enskild fisk, sÄ blev det genast mycket lÀttare.

import std/[strutils, sequtils, math, strscans, tables, algorithm] proc part1(fishesInitial: seq[int]): int = var fishes = fishesInitial for day in 0 ..< 80: for i in countdown(fishes.high, 0): if fishes[i] == 0: fishes[i] = 6 fishes.add 8 else: fishes[i] -= 1 result = fishes.len proc part2(fishesInitial: seq[int]): int = var fishDays: array[9, int] for i in 0 .. fishDays.high: fishDays[i] = fishesInitial.count i for day in 0 ..< 256: var newFishDays: array[9, int] for i in countdown(fishDays.high, 0): if i == 0: newFishDays[8] = fishDays[0] newFishDays[6] += fishDays[0] else: newFishDays[i-1] = fishDays[i] fishDays = newFishDays result = fishDays.sum let input = "input.txt".readFile.split(",").mapIt(it.parseInt) echo "Part 1: ", part1(input) echo "Part 2: ", part2(input)

Dold text
PermalÀnk
●

Dag: 6
SprÄk: Scala

Rolig uppgift som inte blir mÄnga rader kod om man Àr lite fiffig!

object Day6 { val data = readLines("6/data.txt") def main(args: Array[String]): Unit = { val startState = data.head.split(",").map(_.toInt) def count(days: Int) = { var fishCount = (0 until 7).map(day => startState.count(_ == day).toLong).toVector var incubate = Seq[Long](0, 0) for(_ <- 1 to days) { val grownFish = incubate.head incubate = incubate.tail :+ fishCount.head fishCount = fishCount.tail :+ (fishCount.head + grownFish) } fishCount.sum + incubate.sum } // part 1 println(count(80)) // part 2 println(count(256)) } }

Dold text
Gjorde koden mer lÀsbar.
PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

Dag: 5
SprÄk: Python 3
Lösning: GitHub.

Bytte telefon igÄr och nÄgonting gick snett med alarmet sÄÄÄÄÄÄÄ, det blev Ärets lÀngsta sovmorgon! Uppgiften i sig var OK, tycker jag. Som vanligt hade jag svÄrt att vÀlja ett spÄr att följa, men det gick bra tillslut.

Dag: 6
SprÄk: Python 3
Lösning: GitHub.

"80 iterationer, det Àr vÀl inget för min gamla bettan hÀr?"
*klappar pÄ datorn och implementerar en naiv array-lösning i Python*

Trodde att idag var min dag dÄ jag fick till en naiv lösning pÄ mindre Àn en minut. Sen tryckte jag pÄ play, och nÀr programmet inte terminerat pÄ 30 sekunder förstod jag att jag varit -- naiv. Inte ens testinputen terminerade inom rimlig tid

Gav mig i kast med Counter() men jag har lite svÄrt att förstÄ den sÄ jag fick inspireras av Internet och ta till en dictionary-lösning istÀllet.

Dold text
Visa signatur

:(){ :|:& };:

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

PermalÀnk
●
Skrivet av GLaDER:

Dag: 6
SprÄk: Python 3
Lösning: GitHub.

"80 iterationer, det Àr vÀl inget för min gamla bettan hÀr?"
*klappar pÄ datorn och implementerar en naiv array-lösning i Python*

Trodde att idag var min dag dÄ jag fick till en naiv lösning pÄ mindre Àn en minut. Sen tryckte jag pÄ play, och nÀr programmet inte terminerat pÄ 30 sekunder förstod jag att jag varit -- naiv. Inte ens testinputen terminerade inom rimlig tid

Gav mig i kast med Counter() men jag har lite svÄrt att förstÄ den sÄ jag fick inspireras av Internet och ta till en dictionary-lösning istÀllet.

Dold text

Hehe!
Min naiva lösning tuggade faktiskt pÄ till dag 140 inom rimlig tid, sen började datorn tycka att det var jobbigt (det var en ca 600 meg stor array vid det laget)
Men, man var ju tvungen att testa iaf!

PermalÀnk
Medlem ★
●

Dag: 6
SprÄk: Python

from collections import Counter c = Counter(map(int, open("input06").read().strip().split(","))) fishes = [c[i] for i in range(9)] for i in range(256): fishes = fishes[1:9] + fishes[0:1] fishes[6] += fishes[8] if i + 1 in [80, 256]: print(sum(fishes))

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

Gav mig i kast med Counter() men jag har lite svÄrt att förstÄ den sÄ jag fick inspireras av Internet och ta till en dictionary-lösning istÀllet.

Dold text

Counter Àr ett defaultdict. Den rÀknar antalet förekomster av olika vÀrden i input. Sedan finns det lite magi för att kunna addera Counters, men i funktionalitetsmÀssigt beter det sig som ett defaultdict. Du kan kika pÄ min lösning.

Dold text
PermalÀnk
●

Är uppgifterna lite ovanligt enkla detta Ă„r? Det brukar ju vara lite enklare i början iof.

Dag: 6
SprÄk: C#
Lösning: https://github.com/HeavyHenke/AdventOfCode2021/blob/main/AoC2...

PermalÀnk
●
Skrivet av jclr:

Dag: 5
SprÄk: Scala

Kommenterade raden Àr det som skiljer mellan lösningen för del1 och del2. Orkade inte skriva om koden till en bÀttre lösning.

val input = Using.resource(Source.fromFile("5.txt"))(_.getLines().toVector) input .map { case s"$x1,$y1 -> $x2,$y2" => (x1.toInt, x2.toInt, y1.toInt, y2.toInt) } .collect { case (x1, x2, y1, y2) if x1 == x2 => (y1 to y2 by (y2 - y1).sign).map(x1 -> _) case (x1, x2, y1, y2) if y1 == y2 => (x1 to x2 by (x2 - x1).sign).map(_ -> y1) // case (x1, x2, y1, y2) => (x1 to x2 by (x2 - x1).sign).zip(y1 to y2 by (y2 - y1).sign) } .flatten .groupMapReduce(identity)(_ => 1)(_ + _) .values .count(_ >= 2)

Dold text

groupMapReduce, hur har jag kunnat missa den?!
Tack för lektionen!

PermalÀnk
Datavetare ★
●

Dag: 6
SprÄk: Rust

Rust VecDeque Àr internt implementerad med en cirkulÀr-buffer, tar 12 ”s att lösa bÄda delarna med programmet nedan pÄ en MBA (en hel del av den tiden lÀr vara passning av input).

use crate::solution::Solution; use std::collections::VecDeque; const GENERATIONS: usize = 7; const YOUNG_GENERATIONS: usize = 9; struct Day6 { generations: VecDeque<u64>, } impl Solution for Day6 { fn part1(&mut self) -> String { self.num_after(80).to_string() } fn part2(&mut self) -> String { self.num_after(256).to_string() } } impl Day6 { fn num_after(&self, num_days: usize) -> u64 { let mut nursery = VecDeque::new(); nursery.resize(YOUNG_GENERATIONS - GENERATIONS, 0); let mut generations = self.generations.clone(); for _ in 0..num_days { let num_spawners = generations.pop_front().unwrap(); let num_new_adults = nursery.pop_front().unwrap(); nursery.push_back(num_spawners); generations.push_back(num_spawners + num_new_adults); } generations.iter().sum::<u64>() + nursery.iter().sum::<u64>() } } pub fn new(input: &str) -> Box<dyn Solution> { let mut generations = VecDeque::new(); generations.resize(GENERATIONS, 0); input .split(',') .map(|gen| gen.parse::<usize>().expect("Not a number")) .for_each(|gen| *generations.get_mut(gen).expect("Invalid generation") += 1); Box::new(Day6 { generations }) }

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

Dag: 5
SprÄk: Go

Blev en snabb mindre vacker lösning idag.

//var lock = sync.RWMutex{} type line struct { coord1, coord2 coord diagonal bool horizontal bool } type coord struct { x, y int } var coordInateCount map[int]int func main() { fileName := "" if len(os.Args) == 1 { fileName = "input.txt" } else { fileName = os.Args[1] } input, err := helpers.ReadLines(fileName) if err != nil { panic(err) } start := time.Now() coordInateCount = make(map[int]int) getLines(input) duration1 := time.Since(start) count := 0 for _, v := range coordInateCount { if v > 1 { count++ } } duration2 := time.Since(start) fmt.Printf("time after getLines: %v, time after count: %v\n", duration1, duration2) fmt.Println(count) } func hash(x, y int) int { if x >= y { return x*x + x + y } return x + y*y } func getLines(input []string) { //var wg sync.WaitGroup for _, inputLine := range input { //wg.Add(1) //go func(inputLine string) { //defer wg.Done() l := strings.Split(inputLine, " -> ") line := getCoordinates(l) getPointsOnLine(line) //}(inputLine) } //wg.Wait() } func Write(key int) { lock.Lock() defer lock.Unlock() coordInateCount[key]++ } func getCoordinates(coords []string) (line line) { for i, c := range coords { co := strings.Split(c, ",") x, err := strconv.Atoi(co[0]) if err != nil { panic(err) } y, err := strconv.Atoi(co[1]) if err != nil { panic(err) } coord := coord{x, y} if i == 0 { line.coord1 = coord } else { line.coord2 = coord } } if line.coord1.x != line.coord2.x && line.coord1.y != line.coord2.y { line.diagonal = true } if line.coord1.y == line.coord2.y { line.horizontal = true } return } func getPointsOnLine(line line) { if line.horizontal { xStart := int(math.Min(float64(line.coord1.x), float64(line.coord2.x))) xEnd := int(math.Max(float64(line.coord1.x), float64(line.coord2.x))) for x := xStart; x <= xEnd; x++ { // Write(hash(x, line.coord1.y)) coordInateCount[hash(x, line.coord1.y)] += 1 } } else if !line.horizontal && !line.diagonal { yStart := int(math.Min(float64(line.coord1.y), float64(line.coord2.y))) yEnd := int(math.Max(float64(line.coord1.y), float64(line.coord2.y))) for y := yStart; y <= yEnd; y++ { // Write(hash(line.coord1.x, y)) coordInateCount[hash(line.coord1.x, y)] += 1 } } else if line.diagonal { xStart := int(math.Min(float64(line.coord1.x), float64(line.coord2.x))) xEnd := int(math.Max(float64(line.coord1.x), float64(line.coord2.x))) var yStart, yEnd int if line.coord1.x == xStart { yStart = line.coord1.y yEnd = line.coord2.y } else { yStart = line.coord2.y yEnd = line.coord1.y } y := yStart for x := xStart; x <= xEnd; x++ { //Write(hash(x, y)) coordInateCount[hash(x, y)] += 1 if yStart > yEnd { y-- } else { y++ } } } }

Dold text
PermalÀnk
Medlem ★
●

Dag: 6
SprÄk: Go

func main() { start := time.Now() fileName := "" if len(os.Args) == 1 { fileName = "input.txt" } else { fileName = os.Args[1] } input, err := helpers.ReadLines(fileName) if err != nil { panic(err) } initialFishTimers := initFishTimers(input[0]) days := 80 fishTimers := liveLife(initialFishTimers, days) fishes := sumFish(fishTimers) fmt.Printf("Fishes after %v days: %v\n", days, fishes) days = 256 fishTimers = liveLife(initialFishTimers, days) fishes = sumFish(fishTimers) fmt.Printf("Fishes after %v days: %v\n", days, fishes) duration1 := time.Since(start) fmt.Println(duration1) } func initFishTimers(input string) (fishTimers []int) { fish := helpers.GetInts(strings.Split(input, ",")...) fishTimers = make([]int, 9) for _, daysLeft := range fish { fishTimers[daysLeft]++ } return } func liveLife(fishTimers []int, days int) []int { for day := 0; day < days; day++ { fishTimers = breed(fishTimers) } return fishTimers } func breed(fishTimers []int) (newTimers []int) { newTimers = make([]int, 9) for i, fishCount := range fishTimers { if i == 0 { newTimers[6] = fishCount newTimers[8] = fishCount } else { newTimers[i-1] += fishCount } } return newTimers } func sumFish(fish []int) (count int) { for i := 0; i < len(fish); i++ { count += fish[i] } return count }

Dold text

Gjorde en med big ints ocksÄ, hÀr Àr svaret pÄ 100000 dagar:

933080055622772905692335004958676338430531501711020646472660537907222910978679784026246060344189788378247432520566064807171058671760356869198668615331087966190585481940454887728760123359866710639641207534840446014186650758324522526415524990368771071043430182981462250804668114107571843725301401752037663478257431948897445910794565126444612258839455395982588210406691363774823587162472191178952421318433342903822177567952662824566887808933438084094010391460723962955165819743580886190918796987271757659687904347500431725998385935401822057677497697602655068582026390850723089186910238166175243287895921457112810111621474462191112984982194792036251442155823668746712165447270195929070490156238327326340509996615001850668968097509100303602659772903789100988488478362464072707141991686021359162821050895811450972964795102578225681738387567541416793364825380996441664106175030108113449102178006869046694731879707526842330637495519002851440549725310117417121940258221008338574218998995946133267071793499483819110929915899162738795460871610513624766158454330387276432942980821442528872402377999802484257422329662022389339124787192891260954485295736443117058640512106181333973050757867385385162539603636809371485832269795187864572944927839392472416463650441068500270837287977111347128878880521675215546389325184145801960039611776533902674627837594998660671873971937298054986216775717627698411599187224477705915545576396304298864743021814342463307841549222438760736641290617649039546310135088511741083431512460836269002322501444201144754216765152141826370051904911722354347900439445662072495709996924808113526702030382784295587005438780790472002192640405463334728472805587208480710200683362850971307376546073405502078130156055266015564165442809373816893131509901283744252917435829262672308990320048685555068114358954308817301806958863465505104223013026789524141996198619560321761873449154192673817651186311481640012277137266310186341311408051049682151923692344085418853313876644147013020531964375996446432714897757352902106923935486275049306233303509815902786075619402519152255682379794741331410649844209299086571076289707682511127579320167222441532086088412882434287149149736616928082329836772891392760057024302858241912962014763057472103353725296713595050680335686708519185745221409203588719270049810376023302075178491631535848049841323511177229311276245337945759933325091789515395007837101744278862304922858939451316464892323762368962299981655029525611200673559182823770374204243119731320261644124988428051348287550589801393707605938763974762224876235981081010741900456519140860601876513681925570206717356656375372355724600246501645198896407602369800549029556705788404389894636743439106124179887834321891172915763802159649726762792403130046475261313491756304171595922723047718652432084442815745838436952102152332738850911306961373296553213709672874618545647336692982165287549816282402000638422759535888605923146438446165308366210087106952275750924990045879476346498823409379266637088353844968460972790667012165952597171539059118625497424270934059003745460366992909334499934614012624479196768897964227269909061992962861999256060117103310277876237078116772797823136696773144819972385858820974248774783114267831030240419058355265188942286246811839773897465720826480271461660614432011901914717268862041450315345254086294602067481958444691283872192818644106052487598096152106858894742587206802874103132150921308649734322673012413363601343209760098359172691610795726100611408581101514588321743672475058852765661050946562047541265853500195780044616127440451515975404354052532654945784417702690960184968950498807721886236905549279044134973682515631853264083264169932029566964249040714858526731824579317896543662234565934488300398645163854357567819197367006537056539568060713117540633806003645176057992

Dold text

eller wallofnumbers en miljon dagar:

10285376745335690637169002636527208814177488848957463554381252999458967638921445520940310050546517596048311428886175702255376800596567973914036895070287328421490186829648951912585780595465309449206385579950127489204211036175743627827219896028781952141029992639576720842489051309991573531526892447451949123891037011826279908274927099596329373088956276692832115600279347153715202075531979678096151320276825931171015206881284487400028237789491486178382857233257857634162196447661573143020991634096239573497571145542246327643302602712820464083131503362545705138571698529565874535576517791389230435444680173262515023696178383946182318314819720275811928588804964943600749220884613709578621880129174452521203448772784796344287669257273120314327036515878574720424267496685331133775846489594575714814770444275381571571258586904256149526802637672800518157636399657134448703175228745578370387244640152845307070219783739957582355097541006206783375196450694861514552809149931854330141580794181050079271461862090910998855319782556139844377569990952939077570431814786658641734167349740189166625263642630322506677281440770337857711964391023853086529575265498574224163745822005384431876324538225656117104075583834456750352181751435757822730810078689310871967719394168781625901034754008592841854563310229122363796883088042272768659953493023947442053746032706205861634090539294798235959125639161742477249711042751448965383521488419069878039194063484947833070011500269617441034378859407560195004126590616002725122313138875885979137196288246798952185397703454854263826169204459650062413814607154476477489638218765308529364771466203381952973639629414711217439909981759737615842900969298734183365176555104276595244664761051892749642883318228440236132505386912638439189107430852288995577169292812322494868098279691212729206986724772303966368720462700422334186480702571016190344077943375522084983563845299848565790339223897395140107414190610457764255100604835448909099697608829824116963406445955735420796518375706743488800957590163575478455152878005053671820166959505966159285797936295354755127720027456427681480682043362761951835587207845901293779312183841127796593274884825816034309546304422372480239887991158753436863386394089753194318033727880916683084533831564771786994108650847396562587260009409333797096710982290023054173072109085434325955379208393823771150784205712252695014305838325441023110371062923599557776613661329239348716445693628785953060324393412857631468409212148566941439554127128411787088235837098121192013770682647750503836545563744096501353306418759551620337675611830302422840432008935757841408571584743304838779393608228606229303530836492510589067096974674331595833886571466070822235266247345839509386729575897980104215896019485277551832028652956881615679131057719449099163173869360308348930654927262973018063890817417507190013144963283441247348457334803413002956488371032012545129911734677122783235386839970671057589886443166346770938725731436029020456252526981792849294122247544550514818724890695017139198299475245938420483876170183022915758151311025777547693918451134815716478435302031068443227684946445347039902940555511435775888687526006908639276680785614084146807269199357756089261817254546725784208826460224121362462028478234322084264250305745373387205238262363351951886173107217724302127300462337745467423280825168693336261317672348396243921844654799355808149171996265219908391095894788307880343135127071801155037821983251981848933832936796345018540893337060969089098428850323765629716033803792015960980664445812237316159182005127325543655349917714114974191425387254454796504263286197129451706952543372089382822252487081540015104221697269279427158391471055116100798618239159412615502585418160331416700119307407344645344541816457549820364318543186079588125522954578792054560369052256597863557976974205847469691815683894755158002649137447638131346599195585469189024037226762706811441447673001259963850273742675179839430085038251368740939213687197772788605264058350496501255784252505522751158696269703625779521174924409895292881420602933536825410288249997908935219760067254366093091111812493765363498174252174784089919076785181626459307949494272294842707234553588435894765492072165218326831083132104100069431028117923999801228672945464032362968423155368759710710279898939862718893865364898831399850566082918617622538247276084776590155640470978395470713072894181335065639202077562236671596880549224487733067294717804440395948260056805072629227071110390874781501571328594447850887552603783358315007054061296967749457636289911399567858418035688507605432871908763294116848456236354092709599770810466274566993729068936036937383734463869127635751793449969387586989474448614295252642942469924551461749267765804916273289118066593370192454220703365734396295701249387989694864579792225711475914216116329561768936969694411664971269348773810192665283857569808418755117854017877832013832104107916619348227804014012643504712684274395444580615679994411811937148138741241351980233083665149185615762006679499907197010359966423547482713576171351017203908115775859063795076495689316050935570198522339683648454569548521691855841462220256946659642306558030794274817127564986505993450580277128592676991972119707668961153459711582416470800952411178214610167974240535826700700200657655079731713262726992980450283160479687073036219178407436643493695759108964769381376374552067071210251408947772819243586939168277140801144117243389791687619299056237965374423697354273991797454526337932422704752705919346344213453013283765958806137519834562001521083364884427212105696765570708470354536543686362737667545779412857953635677696322974464799756771384523357286047716343589903824313876000914202130314551450588963162719066766672454287052919734699879259336259066106785892781985790923084621046479664827844829093957487598182695273695225232350442860167848205663668934130163764879557175885224634173336806498263101689326791260656479039768024937568904069362079362778519696120699310900747599941240998556440656757224168590896712629128657461823175591849935905417047875763170169005559447235011466721133638377433347907443897266418192071501576927482499786614727449859613267467074164614961652886840027540436188734090310094373780229808137578834372859736732014698382824389632192854053095267681780000292443801608568031201039480620600032141770166594967204875563870382359755799165179172131330396148524056691478270931329407093336091875945050693153149818315575343745848568106049940033868932396833818296848937224189810569851373448976878673088389376007775753972546635196356746156553717417156911207221081102200224595465247626505562893492176729575026870126731725122430888700643373737138375455032324473997049218798434518200705411229786007377232388787658949180227475348645917941802572928200453723952103176028356492240298789469776881616270789226636510919327545896656599262134882227219787056395301813331726409818973026271794756982645323004602803332035308313453973037371940201126119355709730990477444199771172980997660753071738894515879901232241031300430759235005855409216642849615010797668967130247930019497123269934802449757478591635744182506863363395868056840376373958242947930156454986451040398862948377118362259778583126690853770995459312034257758711991354512679021524138160162849861846195099226042052866361769566448063680791934986700724000948538505070780331619149375178353872101786908117967013380992914027646816315524353421552295433452525109338131024743193993606933323267156263395542430345351307296419746985713903825593652705090379210645365724110307143627067002362861427607289578387377486054377218196087815201216205388882604374533067464329307516204497212745265247886090436913596344921687490063756669607386032044137380376174376156321509689881880589353541743684659974405039672495501384013243029854923658967379100416512981823017278662700984704744153732364611916068081056879857884928963383509569945668478626183953747600635930912243442125590811682473215965592244273557175663649247275283541283417141915224273794022222187883219112466006619286903439332525405542361094961294614310102153220080083525270165948837015090496000745673505795772765688776290641227078646489873096314054991908429434578206806425772977476514353385942919736012508808752791680406670437088435737098581121446668294618173347840428895820985521024305291000685700723382569158996518413606833870267723467894206574024467265829455113196420607715542154960308907862352377603829821771814759941287708523577445147201621290052439575027829266401587781173919753518485861211590901505551909878361236007503474144503134715734532699228463424274741349208975244754519194612736028768910106998210142152340216244048784360357290270061127215812584965780138660747990296222761999648954727503179968356878686516135386952941363275476674288310879822052136865309065656016367050811683738688126416489913277276968028219134949073824064271625845451549825580416398086155796011364599406904793504040627345915855197949184895801980801699009727447708125088198381324270842330357841338264423176510021817736574574267047337923118769250382637466444684481544753238580498240279902351580008066200449798151995161791460114458866546594943622160698141174390639756178473870199004799371717757449678929760015683529882169608431991747553777329075551719728596224205390364653260899864297064376530671364966553107065992770196727544849723986032142356765790687745045446698059137117869287785196476600927552684691095501313578252781436591180519089437652554617243509071019204721861646444842568118255587384657450437748337567726118592480027734133464258481266918647575591106419315059826539580607557581765884644477479497364090249260880560037090056585680357731198677053644290504980170594601961253057251073414568574236685113228828247429625516618073765416745406855775381193571427715193651772736129782819922782909058170217137491572676326851301645844678691816323713666070082141016788374356963429171983095246570746633140498288091791622566808959160311575389212436742455300813235714319201428034078486720513585439271381516462542020191776082992259213335923945391682485041159384393947364788812098734731668259812948279782930152240524913358527819802797409817201711303584054432807764309267686817036944893538432482115459323724564214535231811810878364221129749310945239924989992884880840225974618519085365553123221661762132960748042667990284159568197863921313924166562666028970300366867256269034835569938367638024840847815529982384849188640154294715219695635973192403943094912997462292688320635022828726096215131335419159616881058042362770984212888515181087179409191984590586747220329238232950380631655815016488901943993631382608002883402976350782634879643061011764306019862124136665647078797009862995320309132324121739398119979202821374408283298688464659529518583238847579369493137315687959855408596101356428905413722338718327781017541157497434072105075272733385341263781885780883613271272171484369896922372361493031366376833910181924774316590302562249534270175212944330541868597262592994226538723037856611743737218125323979040320292638869442519868063092830408098341835608188694404822303212426581399511705691693168658450954138284467775423377601518875374546005353498931725635844787563086831415828644069592624571987776997266261719695967631619797366671044737657674129996219225991131068182253268835998938419943056723554963976843847078049423248013737859856009854607718625697200248750805950234111452802026134327654863530594756606866346747888169001804639072047133267889328568119559429379496107586367821410996668518804700364370897325364719010757494207476195326498222772686937244461604175942320828698554337563417452803396727037472606355427313914598931714959495225672852544302627734934612584684125626119787493909720439484003277057287247943895038090465740289474714935687869134051838658603873929727916830326926072407462705136898341213933220214318145687856165776519123119312170795744074605004436249341630299024740905346815423226146558221763865341945679057539294252253819638678578379532785444731642716672561135759092527183283364974738294956786334400040201539262329140148046009248327013158332965958921019801110969338797321579372235114669254009908000887832737887978303756960153571755493069650136530940452022642138794322170443701156089214190481736717524112450187402548711202043776186249731535276138332855087738231789707336215691446026094420485903565161376220558335954545861705851017824800916471470185899152295222785360139910349546822354827977386772771757524503278960475021611945921103706097996214333591179948898942814342220602466695659399501995135645161360851244283243390542721901660733002304643478830394644364352921736897863364924608670162427146089238168443166307333289573542774840311491244355042141363608753311038701688383753612994993888704951605546297642699384460915333310554109720381127688946388014883139265655455795710200904766336477514451552026845737162801035630277924776009574805423461407060573925544722846311493207625867074079597257279095520687216290557570655891202285081534144216572066816731300646663213515081776844875118543794895131372199396161818145531124737513410986173691594944408679465889541517707552904376901712430490454953187266965821045779326265495325079611392869204006032782374748608915691934029692177394831017413468868433246976454848946975536597671070946614089832826815282514870829577222809307077770904804686753212712691377109682232871111721475198400231904008139242311095508244079707190281595603747870082658139060536171150052642013883117678385591785725077241834619718059848372945599860007775729321629851980869243664637192430297540468377844609145429051820854018917131477321128700057210698849256189487616041503254482294175571597944792973788117545491787296007247417008571450256664581332008780761081212840139150165827424525934282814481129573926298723401456532847473784062071634376027582316291965172183654994630617541203884921714482841668838240546037117722367526296092284058271622516676797773310591938110158157879096073516190942626641203165948710081617522457616249076500389474144833504379352913089110993456055753471787141129092817645399395015551470873194816072777642589775609668741322077552858572450579866939733832774903315383107727371479353462788200160343324506593211591912582685546835746231259933892523447090617369284395983097239377842776368735380349787911852140419084586407677494154127588441847597637535466106848281418395224749676956424484944214445439344729567571339316696895076409461181123313178658852041590650308872975555601373866613985007761835173678930173525687952789269767630226657132854338813539763087099239663684639110501844038166199844783009421450781436895169760695888794691117817443103108639879926364208361085173825116627547937006519443338822527188903724146512131415320776312697316819209219135811471459168139424451433866574452542233138741529105663017846924147196607675527090824217094517870989827576139929226796145717766615230858258822372135004352343982574717489167527581683561158264610101090423411938897840704702182669332561729921648449873600239488892626735044187204617415989124390616787713125605417576185890785020279542860586087614628666618639490662974610813723577141319448219848692529658571049313005315588677687790013138167505588567826821113905179615008612809761404213250633441307946517209240180988540009273133046479643469529029160724763877066207139696924264012034818006297942467291526596498389347988662541929532837484901693582019580577569343524466910363320000096389093076256334755512678579213156104844191075656171601814223759729557583512820168163533045118627696900350875034822422689553811457087166401012010694830906965664963749588567966194901869781678039141947547361415875325814759759187884025874374389277398251828849749095862951420354716121071767312292416095591255931019012479749053726576006663435769297705606133661152670541472347576504360297204226762072387275275044164283309782364767859437258083160165092794133256392900777005044307909753424216091901182474379431217775284442291219560438667274867517657618426012405009569429420297338331784100035189209086075646683702346291502645707339097826490354645844638781284151601431509744888956477566781356609426610190326016873509904033132337673087940028819045843399646042397502462168163294727156832304188054760871720429680485289764263782720889155985299619184566591155461233481011977721636224256055013842150583602626688951201381841238593842567822886033182367473644471584992450175667017079025987680857514407634070407317888979179567673544361994112681504356265618848921587950901115700852340315072906899004299028412306340948129469777128668988104867573791943971955938624695308781168054498344668736217778206560038856659288191520709041674339328282440625172506873621163617898572606201424866344153716090815307497287060627101886026174978801136040591268692355428978129775162212898573982764180183071569791148913099610687610697348548293640951215128431681517174309136262460944254632365344529138342682020867666825401231739260404689352653780258978908688408093953359217512720390167991908503639379095211085254195882416712868037265717821023541388502387565048367991753573191218410920244491909774546100610118096620596504193755469219444864698739858739931138841284397383247465073233524368046558555130933563866760340686809616187507657840895147150918188960784235582535739836937706637358943805573572968770432554364755621283976453721185669477176430086144477507166459261949926812118171101173348123784203540826923751312189771794876682330426117846716656345892047235003120339801332259965471033680388026262738308737034331727299502354788466518593019137166361716874370404006662770890193658170954672726954786768402989448574251666484319430304731407332586121218156164731965517283205543238919985631859464703564707002182194604677210998706285105533054365623882557249948874012652644346634589957831637940884913522094916659775994013347020157485525062492865404146710980171621848688468924379631698191028343787913920886924151081068640645528363772681511942191589594556787901485386029126720429640676346499405048818008285618686824980162950176636533038606072777144824292532573231359674432789369916129882440217763665662686599872957842334709176771156163674225102537258018479769563292496997994274392032730082837028233154108070581847751207724449191250798633521399702809406257918032294711048415964588315844849810687681654217363175690388919885969187507214971318332568784335714888453765150590408477445647687209979759317855148231015317294186486443053603000135722459411130776363042119568814485784379282609188904552848426378277148952319068841984927977899303828285086718971518126933676614963819575515239940907004904743951848379296612363092652751804629275430503678712164539913046710540224404826766188055663713718629424937983916286586964144966418488367140557107295321965214711617845275127584394405454005433964410389605809239504615439520454930723752914130757589617595514106071721547110704234079312539163394549295859874566585825035602639369677947224756581744188597879226256694266333435672664327277743316031023406931595513186730240386092985867811119281335558785747399498692626216992615721364498800540079270537508231875968555948712982325397971472848399464747097783449403098131696309321984926364403930716020030584151273288437974549512450754080511054037786508870726363091283370911253644293217649812771907694812039321560835415996947685524630613511655379141644866267535208033734892020178014967690228439719166304328469190917899261551454402358129782840990020042883717600507311843269841016093665295540315731263374805787641892383165403482545928781921719874254411018116998656415356412134146010885328276790555841670161992350699189123670609223399394258813297031103956218665012944244656623766715991010481106843999880114588887465040382014610790824937408372604181019956321067881077316904113675460764132520423638004393136632964003672386429353758526700350548076409444520809909435753002460540805541074954547031968956658264563432009983776355638803265946145575770292725883080840281433124739245998698969119139175357190722613647331105415677964518464240362647370848212093402672070240968255957049429198268409908051570730741099944269173363285588505240094826957810383676801939613157956365545282379451885018174164996530928475957950975471595835686370379095377380333712787200696691602876145086878145945454673450058472530871401477918013516984985427938026718963948799747657894622959145845514385621397215658089594602201819095750871896063087237572214593911989506742985461043239027990995228450057927602780787304347353036497762933733556218091116315065385390076668843173273158251010500775137380335340280376422386383196288329982029463118671938550550760654834310371822626654347652232703942040188476609670466435305333568577272232099581167514721214518675075900387946335964637796528167847834323565146152571644332541154750540763799835049128632832849760972530088460602806598056313116097568551436621089297930681729744984117217384268750852908222310677996391955248119063493882767479647190988876747838274992664400945679291777750793980422420770069939153721113506706789445651708075493762960512540453510971675648997421249537093168436740939266294177225437891758919130301665327458915494324766034195155903176768530561457065853325433895328623372049713216531791332238838049183797913260427524446710189009951267682847556894506573798955138750966588325770180559810820365396186284610639862682304036735004849173820339941233493633355349622751488738482875210983791931586917880575871153046743089534051549355347801625892952971218557264350451049140331463992848879867224888931780053409469117004692978458837680929006355759161803433516658472417240568099053381322741475838281523946862118510468469134706081424764438803975579834216840556697933369183174691141090711836444295995274074641234610723256522945396203899911352245161555829651616885857542656791666633753491747085433786941805054747838805326859807388472880663526174711121900639370859250854636542910036703335042125398420276549546593593376318118226989538294591030235299005476877822712162810876322703847895496587801601604779505966158546183245760468626461568258443882239072393026621936021473944862686693402388188264758200370531244266512226727231608745044299764495951714453991749344007114550839367791792663273213124125936754146955644093923800289948262182652582716639433294407465037826230029746214316443882130812686221316369236706473447717332250005961574202766835893077969616886121107409370668932688296617518190309247543895656543704426705200203613954943448962914249780696800859302675081086725651658536408527699573713846287798689093641319550938103236241107934759593968109526600740240818260813786495485393139411877799506739958321640378529960988972421053419638956596166222798874975190554498093959997914765771921718167965377273065493957396692079509258347669343067376318603351079398900372783937410179847671934855243779049604293326568871070377630686736740323283401942371455451372162370654654110607390743262435697602677076940057372492092984756173230047901893850119695809465205133704023453400549321416492587155658588636241510857477059393027365067652012056102118435159511630187481967439992239124331878511926096103224305923639979730783292354844276064918064265949487204018921959246089149157857713898923403717919098700504054284043934911281061530936477409985205352639317290971226373908297898240950648685431565075682595394215676987382385210584022756314181931125563714683697788103140414272713403172913705275938294014944011105727468212022252583344799340458741086045812186073635626385030250853916187708066238252943357004130654355108861624317996267779719122584972002954177263201770506325248980050251533911465340084669728314024738421086444636832003259964560913927466551782670431127435315965549732454523245163215894967908288710326733727106340964202031794015189482258266494959542019473475545736534240832509480009659045456381145222901214309221633727191218388467541627863409311493770958206154802161344139384895244510645944085971946264157146189095162264706826147331762618279166845947615450435935134465803600118597442355164063911061771799329780990107820147559061085279911604802859906097904716255159555824744149467769365961076594878187030674374859130970630539411941805505190343233522680681043505931959631443975112422197715777548152508440582447830422691359576590447146526121483776505826000971038101807251630311641398559530229329682127546686092307558635295008811885042257997392983547054915115087977123747007620485661140525725440675246798765406245560535033436904990126970195040340730924405917771649857336961385771458555882917332167199448093414502441724995618599221687152561493176346173345396152884300910022196614881974236510595568826566143240532381450895193424678791567271377319321270937252481951690729832137134796122303316580750811184512434442489757613752782793682136951555817930142060006718994871753952008942408319607096912719706067203404574980142577172834562008899329123560826985784391765093864926660186046293511046720826058317852395772000902155616933886791375453469143852751247445398698252477308117904367317354670830081033611895506073801127256166413523718240401732864653788998432144228305421501348782464316296037667320759278737948730422625068512475845977966106369484792903649538475777456790211305692624773063564529393069042148061490473732224936649719907332247825987283177558406951154969025951431134159739354162480118734404171507913365492201295733586852736850254004296245307288222485507477883189964865483946278496868692801505601859805249988796413352029526694188010469407167348775638590092020296944332790418707590583373961213469941156559138292707428275058586149469683863133907071697411786912293640876133737103820783955216536437254052003371470732668274082736644304657681612793377107326580165339317177939716014777927941776219591485483797043270985206465909037531644024233329316210773936760384651696740140107546276226363264856320587401849641081200817083478403192656364322455691983996305551561335820562621660052569789161820888351003621889403153111330751174858531088196982467498136140865612742258078287349769320323548648096438167096293919771245134802030414936331005392804426853301722907860184924146874978204853769801599205332816245646010161777592695178523688842511051987977556559206653085876736358595283950008534705688309369185159639599833020787700249482886044480408884884441392525152745583589692774541707602540287093001573984648498189317101297120064666533000962346154219451099180612199730424166346491752646697781649342686694553190943465081301570522801550245181871742261347719609645340953315907802997018797079543943514976693209129889420659573048341688856042808625670995069303755407734371141242565401212862584382405373913946636962078692163824206829468329422863905290447810354054452495231703135844222239016039233901702173518114502105276446155680352152098008090382564776354234818931694691198932142431169210000089930321279481910045952956341656946177132516875656766176920646831241150835564260362499490884421363273935988352055917725375025631232555269025074838671138477195828039230254777997088933093246313733990075492012612708229843406336757260986060298500625318318918544998221234760596489357593207743717962107310675010575836795361210619538044209559267345957883762725127776630601583945139897820136531947338979877183985250250162938702029949865019262023133629181287225480035210915363451634655626774785616269161919167148955890302701237735612253862950773123264061303374789204939763758550408708141170920012774653770191972702333105044375113640065296833380543065903095253018494727764014794981112931610353960673677370790104142101489815852044149376311226999869446174129775575477456247283449109174789472482102518153781922614670095407818697071008355761268895319799131796494071676975129647820376540171384816160284604351309152693647984440653830349697253380132075990049435900019178547676758745469222989523089155411075151164999326253770329766258374743219528752832449521232501625013221448838971103225496484208068685477517762984683546506938095750192410869584294557121599707642959367044344326371487811801219407283321901627990881629051024737555576509915866251080316294706091074044055135237188654367673309567860370451656659704140243626242293707224157226329523675838677434382793794414472932694994702347294816356077063375908771972758298568931554064477437103083710154896197724284049592409427996638572695176839362626798041401106090302020713689110983363933842299366304396177808145841640771298667494957668822852714487462514081983519498886245881906547053850824963881963680505917969548437325431025628260602323934029127928459483140459680730088300280511124101466896084746937740301456090804276901058171314415420387003771851408164794158741781240069680235181544273865514531132072446472102830657912040212002189733644675818240621939443978877545383532308429734511211810718996774263029057909753582213163180371581315001612036632621664941842128525896183614436038458289728419015998792226935985484469807912098003352732547439696902115465075716673667582297423125048186897094041880178549372019664744624214421460114366341723801588747196961094284503990370557835762643973001137911396058301584849191812349907541320572251829492641827069193658307206557977143828661597600246348246722226016130812891778302662637864191968188958501839818420939635141011664345161874211921271656639025825100062809925259459571000017001730009688700077576865897349703133861468233493713966919916461347278306333526443344015574622918874967266526416748458356597678765035394785890863092092939751595587308211397737789222928362958593454369864832382844395183823668023142127037835391242667911759617423437027999135399571459819322067696215468466091216827842707815912568821690015306131851860578098997279197612324568018953565096177766969438911916385027300650332970657436074870012553049596691020559982790462926241464234359240896361734618881641854166918262467426242624467620640806736150837513723193093627683298542404200301788904394462134042294165398407618232129685986308659219819360064542643899686219556263074195487786137921579822232680596413954906318467782019416004563834673943987555878088007258674147780589262567261551086582744180407941984573744622684103043975207651194084942882112793969347668543584429332196617201584500341948572310486515894099806326366229499595580193113127996309864885839729734293241751777252771795910125510619627443516096599299973273164586168930722956095103964187449244760326791165902062512191412460553682854422943599096263759691153181750122235977432136286033402224051929103736805359520925277782810186844404895760427878512674959601166610087079239481965254212514619482063951299801740104717014388393385564331525735795015265322525605864807859032765311265480785746953598763454966130161797751801398649861101732644501438152387375729591816470753293723507740849610092696801687683219034676433104507120111235995040651186016676725003410764571371931820636361288275773899019708626983804820724422278872134012847232783328242295457343369235339144818622414741789858296154135920765309807838307988604222991126318290082744592693839504006655366407222195228367869697071634969637113603982141028654983726309358625172143264789743935424733042572232037613032200747636169643198361697513093947941324512052745126326917610679976964439787871398221976171436352412862769647915249230822671269272005641103967265172727882979504831007125387613883861474285699286459570442514814787574969968236333483327996231365206647972188581174032692166066290995261128705638162091368431697121306855806492047774340315600255944940658524951685537220485451672083362141725651082120677996280760096864589849332453762245053202563242624428214665722893438966386184605597243642005445698513166664716972138744151587143601970538465257377280657213534560696761211956474759086751506089205458971651117820506774199495642324988457783551017544042532637706464051106715157593874698222213013150054819452782702576169208715805992826492003766249904126294084987564048788376916370107388772678713632074509823443684411775168272137849717049506437476362577529096225931932642240344546739000051829764549067170982025050859069431201213524237690444189142927942829214721647879571078279771519182988476493291284819199483532526592188972238288054567013161338682418117527394512559879357958800655957284978838122697770546454689267836552758367363700007939541596608289132650984243622559932513600039892852006471237235494232495761352646977420692671867871812100814098991191697998251701983369623482878310167057774459791227765198119280135926266192772213925865086630328811046646081542593524153336107739791301006467842743229445212052101434487713070603050883806047156242893447629572735170459992411870054210779434814302356104509878399842971938810706999263369097878031113738079212634953855399535092310702580532763138648759176306036120100066453555646959604548443592082518415377287391510585929933893402096906640620339967028531042595451935211600180490233067680141184685062890848281047445715249077094024871466216944326746379969629830070875110144870456225029332893379361001138412213184244717948252380943929475318293725831438395239873066523542967327343278546151538932402223462303688812744617318869277261694550346899818001793596562058053573922424564843874579862731056723868837415041565627736706628937564336838637144542029584968397958863948543342933993667972382598166710323545523199515106413052135414378839907072145001476291156499541249454469928767485255227894652358835853876148350197898777992298583493410229707334207705541541337301844304636553722477010200732508879021688486242191489273932299030832984768123485121828218361305447259748517447993645121351021841851031363140151358756319099808376003854822690041259973632693044882998295065163680751349447008876730104674102330653368352736224973652049114338076791007679111360861987992418543472407579158591287474036375707501835139062238845072032386636156993404585301743195422912414168710376234185069081964173938985106003013100083194706208497648314094918139359338234517249089612362259274013980759987896929405485605710885183614538080653492752377175575361777245461410719507063149374683548024734274367650841686603676457418961839370029257394079618185199331724479254861935677239114410895740886064723009279428474167138943559520872549472366201736304755247628177827964201021766505958201208363049052685245663374264976602839923507410626457428552802596070731157949162486077139240192194776278623372472553070604234386663957440091699412741700084036203944960590949962933919496772119562844447763265378108707622413481583298989719124772561920800385555135132000005710170184380337892870398952164437403397957065839044381448866515642264892568895575298562322553497054381250203033688500845479173149482688750860846189867073557886019128152981395569764515763188803750146813661643215643204282822921133150857096040525526238874663072065909011901825859431431529923123622464154947464938835260328834756749295068640310364950903496539652330421648432455120770809823303832945640147451200986478076349597213904670217540076483185380945052792308235471287724485935123696596155602016383646213080718298597107211919925780681807859384144015566251415520930095357550460399142412654942858076717936107964235598194372543302341756408967954097342329099426616076129786110035700687267040881144427538250176645203111413280218779036446004133349880144351016635270510960732943179409352878214132164065820760302211445755518344212915242553435343134577991287948508296307585445731124724924839031048786101819749633009895403111978163163405304291455957420730546892577596110884335342067122437526438350996863352606300824237108409985628723024079678933422716360753299704533506511774249728920248166450542065324993979001521930008698072041295020363575764912940568967110238658970457281562384923720673522012041598073912918906507497097398949398717049376299697319550170617231001415090648315734448116336694263228590025690087880947173828921078470877738566587641519738042708256329802443980190567731672159270376171509638576869261261106592224636087339359641787828736300292139896452970226749503710246243819851306648703762098918214680773417471803298395357542572799918158025672464062141995068149015671240245776812969507154738723486500038424329380542874974093702920922407297947818615996363439331474979242009445472482310671736499220987076850919050863526440651537025882091056419528162092358647929929357069314908225986176942907478576786963081756612444273055787833103992588094744882748983921547762174585852768345725701280851164138161229558015954639783445958739967992074084427408270199161976830684179270156986928030482547940474193022445038418165459876785089196443789749076500562375032675299304904296307024558528484586831072297814948334197026310833029515545138006405327367783491006506571152145949003213005074225807526201617612430745753932040932175185563477312743077015688728137959768645102678848468283251779425732195584118185351144294163851680932743054161539903881918354474822292755391896401736368100155489388540484886428620788496118358822215109499541566725099105692523838346428331168660688036867789865565486748187658371248043644257340216005457356252512580444930313270823456626547831947290879676337338146004436980570576178795743801744870864402138327655243419672640123051473836615271860203336755947298425726797073226349037029222897537018283894695595061139574794151987525469035524287999560764549390403404902015518160416197171069310512464877982452012966441344899164674028098289839373924899444332120763310970459656269345412254464019307661201824669733108843757627899190389941702382532725349745717590227568073480324352602354361352153617839983265325262862363417918665476648531387932947607059546620114480159678460745496682054930334596195948302115259339419301141291010948536292908463985906815828871450790458655535703167074456116226640112682291615924688235544095413160127257095479496487084806600634226518831197365515211483335093193669873276153599795086155124155532538021642182571625513363715831383179883391870313470652206210287837879257993655439336132125801268005085320916231530697734280539935939418579476656466693704407523493585993321993151714246669845144305574723891880231465265671892107873300221703481130377257224305835302936391604167891145814331477255225441997925554077334713003968995976004279142992966258499763909870352937896915775507893710599582357193611893

Dold text
PermalÀnk
Medlem
●

Dag: 6
SprÄk: C++

#include <iostream> #include <sstream> #include <algorithm> #include <numeric> #include <chrono> #include "../utils/file_reader.cpp" using namespace std; typedef unsigned long long ull; vector<int> parse(string string_data) { vector<int> output; string input_str; int input_int; stringstream sstream(string_data); while(getline(sstream,input_str,',')) { stringstream s(input_str); s >> input_int; output.push_back(input_int); } return output; } void step(vector<ull> &old_fish, vector<ull> &new_fish) { //old fish rotation rotate(old_fish.begin(),old_fish.begin()+1,old_fish.end()); //new fish rotation rotate(new_fish.begin(),new_fish.begin()+1,new_fish.end()); //fish going old, respawn as old ull aging_fish = new_fish.back(); old_fish.back() += aging_fish; //spawn new fish new_fish.back() = old_fish.back(); } ull solve(vector<int> data, int n_days) { vector<ull> old_fish(7,0); vector<ull> new_fish(9,0); for (auto ix : data) { old_fish[ix]++; } for (int i = 0; i < n_days ; i++) { step(old_fish, new_fish); //cout << "After " << i+1 << " days: " << n_fish << " fishes" << endl; } ull n_fish = accumulate(old_fish.begin(), old_fish.end(), 0ULL) + accumulate(new_fish.begin(), new_fish.end(), 0ULL); return n_fish; } int main() { auto start = chrono::high_resolution_clock::now(); string filename = "../../input/day_06.txt"; vector<string> string_data = read_file<string>(filename,true); vector<int> data = parse(string_data[0]); ull part_1 = solve(data, 80); ull part_2 = solve(data, 256); cout << "Day 6 Part 1 solution: " << part_1 << endl; cout << "Day 6 Part 2 solution: " << part_2 << endl; auto stop = chrono::high_resolution_clock::now(); auto duration = chrono::duration_cast<chrono::microseconds>(stop - start); cout << "Time taken: " << duration.count() << " ”s" << endl; return 0; }

Dold text
PermalÀnk
Medlem
●

Dag: 6
SprÄk: Rust

Sitter inte vid en dator med Carth just nu, sÄ fick bli en lösning i Rust. Lite skönt med ett snabbt sprÄk som omvÀxling ÀndÄ

static INPUT: &'static str = "1,1,1,1,2,1,1,4,1,4,3,1,1,1,1,1,1,1,1,4,1,3,1,1,1,5,1,3,1,4,1,2,1,1,5,1,1,1,1,1,1,1,1,1,1,3,4,1,5,1,1,1,1,1,1,1,1,1,3,1,4,1,1,1,1,3,5,1,1,2,1,1,1,1,4,4,1,1,1,4,1,1,4,2,4,4,5,1,1,1,1,2,3,1,1,4,1,5,1,1,1,3\ ,1,1,1,1,5,5,1,2,2,2,2,1,1,2,1,1,1,1,1,3,1,1,1,2,3,1,5,1,1,1,2,2,1,1,1,1,1,3,2,1,1,1,4,3,1,1,4,1,5,4,1,4,1,1,1,1,1,1,1,1,1,1,2,2,4,5,1,1,1,1,5,4,1,3,1,1,1,1,4,3,3,3,1,2,3,1,1,1,1,1,1,1,1,2,1,1,1,5,1,3,1,4,3,1,3,1,5,1,1,1,1,3,1,5,1,2,4,1\ ,1,4,1,4,4,2,1,2,1,3,3,1,4,4,1,1,3,4,1,1,1,2,5,2,5,1,1,1,4,1,1,1,1,1,1,3,1,5,1,2,1,1,1,1,1,4,4,1,1,1,5,1,1,5,1,2,1,5,1,1,1,1,1,1,1,1,1,1,1,1,3,2,4,1,1,2,1,1,3,2"; fn main() { let mut n_per_lifespan = [0u64; 9]; for lifespan in INPUT.split(',').map(|s| s.parse::<usize>().unwrap()) { n_per_lifespan[lifespan] += 1; } println!("Part 1: {}", alive_after_n_generations(n_per_lifespan.clone(), 80)); println!("Part 2: {}", alive_after_n_generations(n_per_lifespan, 256)); } fn alive_after_n_generations(mut n_per_lifespan: [u64; 9], generations: usize) -> u64 { for _ in 0..generations { let n_producing = n_per_lifespan[0]; n_per_lifespan.rotate_left(1); n_per_lifespan[6] += n_producing; n_per_lifespan[8] = n_producing; } return n_per_lifespan.iter().sum() }

Dold text
Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

PermalÀnk
Medlem ★
●

Dag: 6
SprÄk: F#

open System open System.IO type FishState = { Day0: int64 Day1: int64 Day2: int64 Day3: int64 Day4: int64 Day5: int64 Day6: int64 Day7: int64 Day8: int64 } let input = let input = File.ReadAllText "Day6.txt" |> fun x -> x.Split( ",", (StringSplitOptions.TrimEntries ||| StringSplitOptions.RemoveEmptyEntries) ) |> Seq.map int |> Seq.countBy id |> Seq.map (fun (x,y) -> (x, (y |> int64))) let getByKey key map = match map |> Seq.tryFind (fun (x, _) -> x = key) with | None -> 0L | Some (_, v) -> v { Day0 = (getByKey 0 input) Day1 = (getByKey 1 input) Day2 = (getByKey 2 input) Day3 = (getByKey 3 input) Day4 = (getByKey 4 input) Day5 = (getByKey 5 input) Day6 = (getByKey 6 input) Day7 = (getByKey 7 input) Day8 = (getByKey 8 input) } let oneRound (input:FishState) = { Day0 = input.Day1; Day1 = input.Day2; Day2 = input.Day3; Day3 = input.Day4; Day4 = input.Day5; Day5 = input.Day6; Day6 = input.Day7 + input.Day0; Day7 = input.Day8; Day8 = input.Day0; } let CountFish state = state.Day0 + state.Day1 + state.Day2 + state.Day3 + state.Day4 + state.Day5 + state.Day6 + state.Day7 + state.Day8 let SimulateDays days startState = [for _ in 1 .. days -> 0] |> List.fold (fun x _ -> oneRound x) startState printfn "Task 1: %i" (input |> SimulateDays 80 |> CountFish) printfn "Task 2: %i" (input |> SimulateDays 256 |> CountFish)

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: 6
SprÄk: C#
Lösning: github

Del 1 var ju ganska lÀtt att lösa pÄ ett ganska naivt sÀtt, men den stora stygga oom-killern drÀpte mitt program innan det hann köra klart del 2. SÄ nÀr bruteforce inte funkar fÄr man vÀl anvÀnda huvudet lite bÀttre. Blev bÀttre svar ocksÄ sen man kom pÄ att skolornas antal förstÄs blir större Àn en int klarar och började köra pÄ long istÀllet.

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."