Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4
đ Advent of Code (AoC) 2021 đ
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
}
AMD Ryzen 3700X, Gigabyte Elite X570, 32GB Ballistix Sport, NH-D15S, SAPPHIRE NITRO+ RX 7900 XTX, Corsair AX760, LG OLED C2 42"
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.
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
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);
}
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.
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
| 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 |
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))
...
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?
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.
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
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.
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")))
}
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.
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Ä.
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
Dag: 5
Lösning: Golang
Idag fick jag bara till del1. Diagonaler blev för svÄrt :/
Vi Àr tvÄ om det! Vi har i alla fall försökt. Bara att tagga inför morgondagens pussel istÀllet!
| 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 |
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
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)
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)
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))
}
}
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.
:(){ :|:& };:
đđ»ââïž Â đŽđ»ââïž Â đđ»ââïž Â â
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.
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!
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))
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.
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.
Ă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...
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)
groupMapReduce, hur har jag kunnat missa den?!
Tack för lektionen!
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 })
}
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
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++
}
}
}
}
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
}
Gjorde en med big ints ocksÄ, hÀr Àr svaret pÄ 100000 dagar:
933080055622772905692335004958676338430531501711020646472660537907222910978679784026246060344189788378247432520566064807171058671760356869198668615331087966190585481940454887728760123359866710639641207534840446014186650758324522526415524990368771071043430182981462250804668114107571843725301401752037663478257431948897445910794565126444612258839455395982588210406691363774823587162472191178952421318433342903822177567952662824566887808933438084094010391460723962955165819743580886190918796987271757659687904347500431725998385935401822057677497697602655068582026390850723089186910238166175243287895921457112810111621474462191112984982194792036251442155823668746712165447270195929070490156238327326340509996615001850668968097509100303602659772903789100988488478362464072707141991686021359162821050895811450972964795102578225681738387567541416793364825380996441664106175030108113449102178006869046694731879707526842330637495519002851440549725310117417121940258221008338574218998995946133267071793499483819110929915899162738795460871610513624766158454330387276432942980821442528872402377999802484257422329662022389339124787192891260954485295736443117058640512106181333973050757867385385162539603636809371485832269795187864572944927839392472416463650441068500270837287977111347128878880521675215546389325184145801960039611776533902674627837594998660671873971937298054986216775717627698411599187224477705915545576396304298864743021814342463307841549222438760736641290617649039546310135088511741083431512460836269002322501444201144754216765152141826370051904911722354347900439445662072495709996924808113526702030382784295587005438780790472002192640405463334728472805587208480710200683362850971307376546073405502078130156055266015564165442809373816893131509901283744252917435829262672308990320048685555068114358954308817301806958863465505104223013026789524141996198619560321761873449154192673817651186311481640012277137266310186341311408051049682151923692344085418853313876644147013020531964375996446432714897757352902106923935486275049306233303509815902786075619402519152255682379794741331410649844209299086571076289707682511127579320167222441532086088412882434287149149736616928082329836772891392760057024302858241912962014763057472103353725296713595050680335686708519185745221409203588719270049810376023302075178491631535848049841323511177229311276245337945759933325091789515395007837101744278862304922858939451316464892323762368962299981655029525611200673559182823770374204243119731320261644124988428051348287550589801393707605938763974762224876235981081010741900456519140860601876513681925570206717356656375372355724600246501645198896407602369800549029556705788404389894636743439106124179887834321891172915763802159649726762792403130046475261313491756304171595922723047718652432084442815745838436952102152332738850911306961373296553213709672874618545647336692982165287549816282402000638422759535888605923146438446165308366210087106952275750924990045879476346498823409379266637088353844968460972790667012165952597171539059118625497424270934059003745460366992909334499934614012624479196768897964227269909061992962861999256060117103310277876237078116772797823136696773144819972385858820974248774783114267831030240419058355265188942286246811839773897465720826480271461660614432011901914717268862041450315345254086294602067481958444691283872192818644106052487598096152106858894742587206802874103132150921308649734322673012413363601343209760098359172691610795726100611408581101514588321743672475058852765661050946562047541265853500195780044616127440451515975404354052532654945784417702690960184968950498807721886236905549279044134973682515631853264083264169932029566964249040714858526731824579317896543662234565934488300398645163854357567819197367006537056539568060713117540633806003645176057992
eller wallofnumbers en miljon dagar:
10285376745335690637169002636527208814177488848957463554381252999458967638921445520940310050546517596048311428886175702255376800596567973914036895070287328421490186829648951912585780595465309449206385579950127489204211036175743627827219896028781952141029992639576720842489051309991573531526892447451949123891037011826279908274927099596329373088956276692832115600279347153715202075531979678096151320276825931171015206881284487400028237789491486178382857233257857634162196447661573143020991634096239573497571145542246327643302602712820464083131503362545705138571698529565874535576517791389230435444680173262515023696178383946182318314819720275811928588804964943600749220884613709578621880129174452521203448772784796344287669257273120314327036515878574720424267496685331133775846489594575714814770444275381571571258586904256149526802637672800518157636399657134448703175228745578370387244640152845307070219783739957582355097541006206783375196450694861514552809149931854330141580794181050079271461862090910998855319782556139844377569990952939077570431814786658641734167349740189166625263642630322506677281440770337857711964391023853086529575265498574224163745822005384431876324538225656117104075583834456750352181751435757822730810078689310871967719394168781625901034754008592841854563310229122363796883088042272768659953493023947442053746032706205861634090539294798235959125639161742477249711042751448965383521488419069878039194063484947833070011500269617441034378859407560195004126590616002725122313138875885979137196288246798952185397703454854263826169204459650062413814607154476477489638218765308529364771466203381952973639629414711217439909981759737615842900969298734183365176555104276595244664761051892749642883318228440236132505386912638439189107430852288995577169292812322494868098279691212729206986724772303966368720462700422334186480702571016190344077943375522084983563845299848565790339223897395140107414190610457764255100604835448909099697608829824116963406445955735420796518375706743488800957590163575478455152878005053671820166959505966159285797936295354755127720027456427681480682043362761951835587207845901293779312183841127796593274884825816034309546304422372480239887991158753436863386394089753194318033727880916683084533831564771786994108650847396562587260009409333797096710982290023054173072109085434325955379208393823771150784205712252695014305838325441023110371062923599557776613661329239348716445693628785953060324393412857631468409212148566941439554127128411787088235837098121192013770682647750503836545563744096501353306418759551620337675611830302422840432008935757841408571584743304838779393608228606229303530836492510589067096974674331595833886571466070822235266247345839509386729575897980104215896019485277551832028652956881615679131057719449099163173869360308348930654927262973018063890817417507190013144963283441247348457334803413002956488371032012545129911734677122783235386839970671057589886443166346770938725731436029020456252526981792849294122247544550514818724890695017139198299475245938420483876170183022915758151311025777547693918451134815716478435302031068443227684946445347039902940555511435775888687526006908639276680785614084146807269199357756089261817254546725784208826460224121362462028478234322084264250305745373387205238262363351951886173107217724302127300462337745467423280825168693336261317672348396243921844654799355808149171996265219908391095894788307880343135127071801155037821983251981848933832936796345018540893337060969089098428850323765629716033803792015960980664445812237316159182005127325543655349917714114974191425387254454796504263286197129451706952543372089382822252487081540015104221697269279427158391471055116100798618239159412615502585418160331416700119307407344645344541816457549820364318543186079588125522954578792054560369052256597863557976974205847469691815683894755158002649137447638131346599195585469189024037226762706811441447673001259963850273742675179839430085038251368740939213687197772788605264058350496501255784252505522751158696269703625779521174924409895292881420602933536825410288249997908935219760067254366093091111812493765363498174252174784089919076785181626459307949494272294842707234553588435894765492072165218326831083132104100069431028117923999801228672945464032362968423155368759710710279898939862718893865364898831399850566082918617622538247276084776590155640470978395470713072894181335065639202077562236671596880549224487733067294717804440395948260056805072629227071110390874781501571328594447850887552603783358315007054061296967749457636289911399567858418035688507605432871908763294116848456236354092709599770810466274566993729068936036937383734463869127635751793449969387586989474448614295252642942469924551461749267765804916273289118066593370192454220703365734396295701249387989694864579792225711475914216116329561768936969694411664971269348773810192665283857569808418755117854017877832013832104107916619348227804014012643504712684274395444580615679994411811937148138741241351980233083665149185615762006679499907197010359966423547482713576171351017203908115775859063795076495689316050935570198522339683648454569548521691855841462220256946659642306558030794274817127564986505993450580277128592676991972119707668961153459711582416470800952411178214610167974240535826700700200657655079731713262726992980450283160479687073036219178407436643493695759108964769381376374552067071210251408947772819243586939168277140801144117243389791687619299056237965374423697354273991797454526337932422704752705919346344213453013283765958806137519834562001521083364884427212105696765570708470354536543686362737667545779412857953635677696322974464799756771384523357286047716343589903824313876000914202130314551450588963162719066766672454287052919734699879259336259066106785892781985790923084621046479664827844829093957487598182695273695225232350442860167848205663668934130163764879557175885224634173336806498263101689326791260656479039768024937568904069362079362778519696120699310900747599941240998556440656757224168590896712629128657461823175591849935905417047875763170169005559447235011466721133638377433347907443897266418192071501576927482499786614727449859613267467074164614961652886840027540436188734090310094373780229808137578834372859736732014698382824389632192854053095267681780000292443801608568031201039480620600032141770166594967204875563870382359755799165179172131330396148524056691478270931329407093336091875945050693153149818315575343745848568106049940033868932396833818296848937224189810569851373448976878673088389376007775753972546635196356746156553717417156911207221081102200224595465247626505562893492176729575026870126731725122430888700643373737138375455032324473997049218798434518200705411229786007377232388787658949180227475348645917941802572928200453723952103176028356492240298789469776881616270789226636510919327545896656599262134882227219787056395301813331726409818973026271794756982645323004602803332035308313453973037371940201126119355709730990477444199771172980997660753071738894515879901232241031300430759235005855409216642849615010797668967130247930019497123269934802449757478591635744182506863363395868056840376373958242947930156454986451040398862948377118362259778583126690853770995459312034257758711991354512679021524138160162849861846195099226042052866361769566448063680791934986700724000948538505070780331619149375178353872101786908117967013380992914027646816315524353421552295433452525109338131024743193993606933323267156263395542430345351307296419746985713903825593652705090379210645365724110307143627067002362861427607289578387377486054377218196087815201216205388882604374533067464329307516204497212745265247886090436913596344921687490063756669607386032044137380376174376156321509689881880589353541743684659974405039672495501384013243029854923658967379100416512981823017278662700984704744153732364611916068081056879857884928963383509569945668478626183953747600635930912243442125590811682473215965592244273557175663649247275283541283417141915224273794022222187883219112466006619286903439332525405542361094961294614310102153220080083525270165948837015090496000745673505795772765688776290641227078646489873096314054991908429434578206806425772977476514353385942919736012508808752791680406670437088435737098581121446668294618173347840428895820985521024305291000685700723382569158996518413606833870267723467894206574024467265829455113196420607715542154960308907862352377603829821771814759941287708523577445147201621290052439575027829266401587781173919753518485861211590901505551909878361236007503474144503134715734532699228463424274741349208975244754519194612736028768910106998210142152340216244048784360357290270061127215812584965780138660747990296222761999648954727503179968356878686516135386952941363275476674288310879822052136865309065656016367050811683738688126416489913277276968028219134949073824064271625845451549825580416398086155796011364599406904793504040627345915855197949184895801980801699009727447708125088198381324270842330357841338264423176510021817736574574267047337923118769250382637466444684481544753238580498240279902351580008066200449798151995161791460114458866546594943622160698141174390639756178473870199004799371717757449678929760015683529882169608431991747553777329075551719728596224205390364653260899864297064376530671364966553107065992770196727544849723986032142356765790687745045446698059137117869287785196476600927552684691095501313578252781436591180519089437652554617243509071019204721861646444842568118255587384657450437748337567726118592480027734133464258481266918647575591106419315059826539580607557581765884644477479497364090249260880560037090056585680357731198677053644290504980170594601961253057251073414568574236685113228828247429625516618073765416745406855775381193571427715193651772736129782819922782909058170217137491572676326851301645844678691816323713666070082141016788374356963429171983095246570746633140498288091791622566808959160311575389212436742455300813235714319201428034078486720513585439271381516462542020191776082992259213335923945391682485041159384393947364788812098734731668259812948279782930152240524913358527819802797409817201711303584054432807764309267686817036944893538432482115459323724564214535231811810878364221129749310945239924989992884880840225974618519085365553123221661762132960748042667990284159568197863921313924166562666028970300366867256269034835569938367638024840847815529982384849188640154294715219695635973192403943094912997462292688320635022828726096215131335419159616881058042362770984212888515181087179409191984590586747220329238232950380631655815016488901943993631382608002883402976350782634879643061011764306019862124136665647078797009862995320309132324121739398119979202821374408283298688464659529518583238847579369493137315687959855408596101356428905413722338718327781017541157497434072105075272733385341263781885780883613271272171484369896922372361493031366376833910181924774316590302562249534270175212944330541868597262592994226538723037856611743737218125323979040320292638869442519868063092830408098341835608188694404822303212426581399511705691693168658450954138284467775423377601518875374546005353498931725635844787563086831415828644069592624571987776997266261719695967631619797366671044737657674129996219225991131068182253268835998938419943056723554963976843847078049423248013737859856009854607718625697200248750805950234111452802026134327654863530594756606866346747888169001804639072047133267889328568119559429379496107586367821410996668518804700364370897325364719010757494207476195326498222772686937244461604175942320828698554337563417452803396727037472606355427313914598931714959495225672852544302627734934612584684125626119787493909720439484003277057287247943895038090465740289474714935687869134051838658603873929727916830326926072407462705136898341213933220214318145687856165776519123119312170795744074605004436249341630299024740905346815423226146558221763865341945679057539294252253819638678578379532785444731642716672561135759092527183283364974738294956786334400040201539262329140148046009248327013158332965958921019801110969338797321579372235114669254009908000887832737887978303756960153571755493069650136530940452022642138794322170443701156089214190481736717524112450187402548711202043776186249731535276138332855087738231789707336215691446026094420485903565161376220558335954545861705851017824800916471470185899152295222785360139910349546822354827977386772771757524503278960475021611945921103706097996214333591179948898942814342220602466695659399501995135645161360851244283243390542721901660733002304643478830394644364352921736897863364924608670162427146089238168443166307333289573542774840311491244355042141363608753311038701688383753612994993888704951605546297642699384460915333310554109720381127688946388014883139265655455795710200904766336477514451552026845737162801035630277924776009574805423461407060573925544722846311493207625867074079597257279095520687216290557570655891202285081534144216572066816731300646663213515081776844875118543794895131372199396161818145531124737513410986173691594944408679465889541517707552904376901712430490454953187266965821045779326265495325079611392869204006032782374748608915691934029692177394831017413468868433246976454848946975536597671070946614089832826815282514870829577222809307077770904804686753212712691377109682232871111721475198400231904008139242311095508244079707190281595603747870082658139060536171150052642013883117678385591785725077241834619718059848372945599860007775729321629851980869243664637192430297540468377844609145429051820854018917131477321128700057210698849256189487616041503254482294175571597944792973788117545491787296007247417008571450256664581332008780761081212840139150165827424525934282814481129573926298723401456532847473784062071634376027582316291965172183654994630617541203884921714482841668838240546037117722367526296092284058271622516676797773310591938110158157879096073516190942626641203165948710081617522457616249076500389474144833504379352913089110993456055753471787141129092817645399395015551470873194816072777642589775609668741322077552858572450579866939733832774903315383107727371479353462788200160343324506593211591912582685546835746231259933892523447090617369284395983097239377842776368735380349787911852140419084586407677494154127588441847597637535466106848281418395224749676956424484944214445439344729567571339316696895076409461181123313178658852041590650308872975555601373866613985007761835173678930173525687952789269767630226657132854338813539763087099239663684639110501844038166199844783009421450781436895169760695888794691117817443103108639879926364208361085173825116627547937006519443338822527188903724146512131415320776312697316819209219135811471459168139424451433866574452542233138741529105663017846924147196607675527090824217094517870989827576139929226796145717766615230858258822372135004352343982574717489167527581683561158264610101090423411938897840704702182669332561729921648449873600239488892626735044187204617415989124390616787713125605417576185890785020279542860586087614628666618639490662974610813723577141319448219848692529658571049313005315588677687790013138167505588567826821113905179615008612809761404213250633441307946517209240180988540009273133046479643469529029160724763877066207139696924264012034818006297942467291526596498389347988662541929532837484901693582019580577569343524466910363320000096389093076256334755512678579213156104844191075656171601814223759729557583512820168163533045118627696900350875034822422689553811457087166401012010694830906965664963749588567966194901869781678039141947547361415875325814759759187884025874374389277398251828849749095862951420354716121071767312292416095591255931019012479749053726576006663435769297705606133661152670541472347576504360297204226762072387275275044164283309782364767859437258083160165092794133256392900777005044307909753424216091901182474379431217775284442291219560438667274867517657618426012405009569429420297338331784100035189209086075646683702346291502645707339097826490354645844638781284151601431509744888956477566781356609426610190326016873509904033132337673087940028819045843399646042397502462168163294727156832304188054760871720429680485289764263782720889155985299619184566591155461233481011977721636224256055013842150583602626688951201381841238593842567822886033182367473644471584992450175667017079025987680857514407634070407317888979179567673544361994112681504356265618848921587950901115700852340315072906899004299028412306340948129469777128668988104867573791943971955938624695308781168054498344668736217778206560038856659288191520709041674339328282440625172506873621163617898572606201424866344153716090815307497287060627101886026174978801136040591268692355428978129775162212898573982764180183071569791148913099610687610697348548293640951215128431681517174309136262460944254632365344529138342682020867666825401231739260404689352653780258978908688408093953359217512720390167991908503639379095211085254195882416712868037265717821023541388502387565048367991753573191218410920244491909774546100610118096620596504193755469219444864698739858739931138841284397383247465073233524368046558555130933563866760340686809616187507657840895147150918188960784235582535739836937706637358943805573572968770432554364755621283976453721185669477176430086144477507166459261949926812118171101173348123784203540826923751312189771794876682330426117846716656345892047235003120339801332259965471033680388026262738308737034331727299502354788466518593019137166361716874370404006662770890193658170954672726954786768402989448574251666484319430304731407332586121218156164731965517283205543238919985631859464703564707002182194604677210998706285105533054365623882557249948874012652644346634589957831637940884913522094916659775994013347020157485525062492865404146710980171621848688468924379631698191028343787913920886924151081068640645528363772681511942191589594556787901485386029126720429640676346499405048818008285618686824980162950176636533038606072777144824292532573231359674432789369916129882440217763665662686599872957842334709176771156163674225102537258018479769563292496997994274392032730082837028233154108070581847751207724449191250798633521399702809406257918032294711048415964588315844849810687681654217363175690388919885969187507214971318332568784335714888453765150590408477445647687209979759317855148231015317294186486443053603000135722459411130776363042119568814485784379282609188904552848426378277148952319068841984927977899303828285086718971518126933676614963819575515239940907004904743951848379296612363092652751804629275430503678712164539913046710540224404826766188055663713718629424937983916286586964144966418488367140557107295321965214711617845275127584394405454005433964410389605809239504615439520454930723752914130757589617595514106071721547110704234079312539163394549295859874566585825035602639369677947224756581744188597879226256694266333435672664327277743316031023406931595513186730240386092985867811119281335558785747399498692626216992615721364498800540079270537508231875968555948712982325397971472848399464747097783449403098131696309321984926364403930716020030584151273288437974549512450754080511054037786508870726363091283370911253644293217649812771907694812039321560835415996947685524630613511655379141644866267535208033734892020178014967690228439719166304328469190917899261551454402358129782840990020042883717600507311843269841016093665295540315731263374805787641892383165403482545928781921719874254411018116998656415356412134146010885328276790555841670161992350699189123670609223399394258813297031103956218665012944244656623766715991010481106843999880114588887465040382014610790824937408372604181019956321067881077316904113675460764132520423638004393136632964003672386429353758526700350548076409444520809909435753002460540805541074954547031968956658264563432009983776355638803265946145575770292725883080840281433124739245998698969119139175357190722613647331105415677964518464240362647370848212093402672070240968255957049429198268409908051570730741099944269173363285588505240094826957810383676801939613157956365545282379451885018174164996530928475957950975471595835686370379095377380333712787200696691602876145086878145945454673450058472530871401477918013516984985427938026718963948799747657894622959145845514385621397215658089594602201819095750871896063087237572214593911989506742985461043239027990995228450057927602780787304347353036497762933733556218091116315065385390076668843173273158251010500775137380335340280376422386383196288329982029463118671938550550760654834310371822626654347652232703942040188476609670466435305333568577272232099581167514721214518675075900387946335964637796528167847834323565146152571644332541154750540763799835049128632832849760972530088460602806598056313116097568551436621089297930681729744984117217384268750852908222310677996391955248119063493882767479647190988876747838274992664400945679291777750793980422420770069939153721113506706789445651708075493762960512540453510971675648997421249537093168436740939266294177225437891758919130301665327458915494324766034195155903176768530561457065853325433895328623372049713216531791332238838049183797913260427524446710189009951267682847556894506573798955138750966588325770180559810820365396186284610639862682304036735004849173820339941233493633355349622751488738482875210983791931586917880575871153046743089534051549355347801625892952971218557264350451049140331463992848879867224888931780053409469117004692978458837680929006355759161803433516658472417240568099053381322741475838281523946862118510468469134706081424764438803975579834216840556697933369183174691141090711836444295995274074641234610723256522945396203899911352245161555829651616885857542656791666633753491747085433786941805054747838805326859807388472880663526174711121900639370859250854636542910036703335042125398420276549546593593376318118226989538294591030235299005476877822712162810876322703847895496587801601604779505966158546183245760468626461568258443882239072393026621936021473944862686693402388188264758200370531244266512226727231608745044299764495951714453991749344007114550839367791792663273213124125936754146955644093923800289948262182652582716639433294407465037826230029746214316443882130812686221316369236706473447717332250005961574202766835893077969616886121107409370668932688296617518190309247543895656543704426705200203613954943448962914249780696800859302675081086725651658536408527699573713846287798689093641319550938103236241107934759593968109526600740240818260813786495485393139411877799506739958321640378529960988972421053419638956596166222798874975190554498093959997914765771921718167965377273065493957396692079509258347669343067376318603351079398900372783937410179847671934855243779049604293326568871070377630686736740323283401942371455451372162370654654110607390743262435697602677076940057372492092984756173230047901893850119695809465205133704023453400549321416492587155658588636241510857477059393027365067652012056102118435159511630187481967439992239124331878511926096103224305923639979730783292354844276064918064265949487204018921959246089149157857713898923403717919098700504054284043934911281061530936477409985205352639317290971226373908297898240950648685431565075682595394215676987382385210584022756314181931125563714683697788103140414272713403172913705275938294014944011105727468212022252583344799340458741086045812186073635626385030250853916187708066238252943357004130654355108861624317996267779719122584972002954177263201770506325248980050251533911465340084669728314024738421086444636832003259964560913927466551782670431127435315965549732454523245163215894967908288710326733727106340964202031794015189482258266494959542019473475545736534240832509480009659045456381145222901214309221633727191218388467541627863409311493770958206154802161344139384895244510645944085971946264157146189095162264706826147331762618279166845947615450435935134465803600118597442355164063911061771799329780990107820147559061085279911604802859906097904716255159555824744149467769365961076594878187030674374859130970630539411941805505190343233522680681043505931959631443975112422197715777548152508440582447830422691359576590447146526121483776505826000971038101807251630311641398559530229329682127546686092307558635295008811885042257997392983547054915115087977123747007620485661140525725440675246798765406245560535033436904990126970195040340730924405917771649857336961385771458555882917332167199448093414502441724995618599221687152561493176346173345396152884300910022196614881974236510595568826566143240532381450895193424678791567271377319321270937252481951690729832137134796122303316580750811184512434442489757613752782793682136951555817930142060006718994871753952008942408319607096912719706067203404574980142577172834562008899329123560826985784391765093864926660186046293511046720826058317852395772000902155616933886791375453469143852751247445398698252477308117904367317354670830081033611895506073801127256166413523718240401732864653788998432144228305421501348782464316296037667320759278737948730422625068512475845977966106369484792903649538475777456790211305692624773063564529393069042148061490473732224936649719907332247825987283177558406951154969025951431134159739354162480118734404171507913365492201295733586852736850254004296245307288222485507477883189964865483946278496868692801505601859805249988796413352029526694188010469407167348775638590092020296944332790418707590583373961213469941156559138292707428275058586149469683863133907071697411786912293640876133737103820783955216536437254052003371470732668274082736644304657681612793377107326580165339317177939716014777927941776219591485483797043270985206465909037531644024233329316210773936760384651696740140107546276226363264856320587401849641081200817083478403192656364322455691983996305551561335820562621660052569789161820888351003621889403153111330751174858531088196982467498136140865612742258078287349769320323548648096438167096293919771245134802030414936331005392804426853301722907860184924146874978204853769801599205332816245646010161777592695178523688842511051987977556559206653085876736358595283950008534705688309369185159639599833020787700249482886044480408884884441392525152745583589692774541707602540287093001573984648498189317101297120064666533000962346154219451099180612199730424166346491752646697781649342686694553190943465081301570522801550245181871742261347719609645340953315907802997018797079543943514976693209129889420659573048341688856042808625670995069303755407734371141242565401212862584382405373913946636962078692163824206829468329422863905290447810354054452495231703135844222239016039233901702173518114502105276446155680352152098008090382564776354234818931694691198932142431169210000089930321279481910045952956341656946177132516875656766176920646831241150835564260362499490884421363273935988352055917725375025631232555269025074838671138477195828039230254777997088933093246313733990075492012612708229843406336757260986060298500625318318918544998221234760596489357593207743717962107310675010575836795361210619538044209559267345957883762725127776630601583945139897820136531947338979877183985250250162938702029949865019262023133629181287225480035210915363451634655626774785616269161919167148955890302701237735612253862950773123264061303374789204939763758550408708141170920012774653770191972702333105044375113640065296833380543065903095253018494727764014794981112931610353960673677370790104142101489815852044149376311226999869446174129775575477456247283449109174789472482102518153781922614670095407818697071008355761268895319799131796494071676975129647820376540171384816160284604351309152693647984440653830349697253380132075990049435900019178547676758745469222989523089155411075151164999326253770329766258374743219528752832449521232501625013221448838971103225496484208068685477517762984683546506938095750192410869584294557121599707642959367044344326371487811801219407283321901627990881629051024737555576509915866251080316294706091074044055135237188654367673309567860370451656659704140243626242293707224157226329523675838677434382793794414472932694994702347294816356077063375908771972758298568931554064477437103083710154896197724284049592409427996638572695176839362626798041401106090302020713689110983363933842299366304396177808145841640771298667494957668822852714487462514081983519498886245881906547053850824963881963680505917969548437325431025628260602323934029127928459483140459680730088300280511124101466896084746937740301456090804276901058171314415420387003771851408164794158741781240069680235181544273865514531132072446472102830657912040212002189733644675818240621939443978877545383532308429734511211810718996774263029057909753582213163180371581315001612036632621664941842128525896183614436038458289728419015998792226935985484469807912098003352732547439696902115465075716673667582297423125048186897094041880178549372019664744624214421460114366341723801588747196961094284503990370557835762643973001137911396058301584849191812349907541320572251829492641827069193658307206557977143828661597600246348246722226016130812891778302662637864191968188958501839818420939635141011664345161874211921271656639025825100062809925259459571000017001730009688700077576865897349703133861468233493713966919916461347278306333526443344015574622918874967266526416748458356597678765035394785890863092092939751595587308211397737789222928362958593454369864832382844395183823668023142127037835391242667911759617423437027999135399571459819322067696215468466091216827842707815912568821690015306131851860578098997279197612324568018953565096177766969438911916385027300650332970657436074870012553049596691020559982790462926241464234359240896361734618881641854166918262467426242624467620640806736150837513723193093627683298542404200301788904394462134042294165398407618232129685986308659219819360064542643899686219556263074195487786137921579822232680596413954906318467782019416004563834673943987555878088007258674147780589262567261551086582744180407941984573744622684103043975207651194084942882112793969347668543584429332196617201584500341948572310486515894099806326366229499595580193113127996309864885839729734293241751777252771795910125510619627443516096599299973273164586168930722956095103964187449244760326791165902062512191412460553682854422943599096263759691153181750122235977432136286033402224051929103736805359520925277782810186844404895760427878512674959601166610087079239481965254212514619482063951299801740104717014388393385564331525735795015265322525605864807859032765311265480785746953598763454966130161797751801398649861101732644501438152387375729591816470753293723507740849610092696801687683219034676433104507120111235995040651186016676725003410764571371931820636361288275773899019708626983804820724422278872134012847232783328242295457343369235339144818622414741789858296154135920765309807838307988604222991126318290082744592693839504006655366407222195228367869697071634969637113603982141028654983726309358625172143264789743935424733042572232037613032200747636169643198361697513093947941324512052745126326917610679976964439787871398221976171436352412862769647915249230822671269272005641103967265172727882979504831007125387613883861474285699286459570442514814787574969968236333483327996231365206647972188581174032692166066290995261128705638162091368431697121306855806492047774340315600255944940658524951685537220485451672083362141725651082120677996280760096864589849332453762245053202563242624428214665722893438966386184605597243642005445698513166664716972138744151587143601970538465257377280657213534560696761211956474759086751506089205458971651117820506774199495642324988457783551017544042532637706464051106715157593874698222213013150054819452782702576169208715805992826492003766249904126294084987564048788376916370107388772678713632074509823443684411775168272137849717049506437476362577529096225931932642240344546739000051829764549067170982025050859069431201213524237690444189142927942829214721647879571078279771519182988476493291284819199483532526592188972238288054567013161338682418117527394512559879357958800655957284978838122697770546454689267836552758367363700007939541596608289132650984243622559932513600039892852006471237235494232495761352646977420692671867871812100814098991191697998251701983369623482878310167057774459791227765198119280135926266192772213925865086630328811046646081542593524153336107739791301006467842743229445212052101434487713070603050883806047156242893447629572735170459992411870054210779434814302356104509878399842971938810706999263369097878031113738079212634953855399535092310702580532763138648759176306036120100066453555646959604548443592082518415377287391510585929933893402096906640620339967028531042595451935211600180490233067680141184685062890848281047445715249077094024871466216944326746379969629830070875110144870456225029332893379361001138412213184244717948252380943929475318293725831438395239873066523542967327343278546151538932402223462303688812744617318869277261694550346899818001793596562058053573922424564843874579862731056723868837415041565627736706628937564336838637144542029584968397958863948543342933993667972382598166710323545523199515106413052135414378839907072145001476291156499541249454469928767485255227894652358835853876148350197898777992298583493410229707334207705541541337301844304636553722477010200732508879021688486242191489273932299030832984768123485121828218361305447259748517447993645121351021841851031363140151358756319099808376003854822690041259973632693044882998295065163680751349447008876730104674102330653368352736224973652049114338076791007679111360861987992418543472407579158591287474036375707501835139062238845072032386636156993404585301743195422912414168710376234185069081964173938985106003013100083194706208497648314094918139359338234517249089612362259274013980759987896929405485605710885183614538080653492752377175575361777245461410719507063149374683548024734274367650841686603676457418961839370029257394079618185199331724479254861935677239114410895740886064723009279428474167138943559520872549472366201736304755247628177827964201021766505958201208363049052685245663374264976602839923507410626457428552802596070731157949162486077139240192194776278623372472553070604234386663957440091699412741700084036203944960590949962933919496772119562844447763265378108707622413481583298989719124772561920800385555135132000005710170184380337892870398952164437403397957065839044381448866515642264892568895575298562322553497054381250203033688500845479173149482688750860846189867073557886019128152981395569764515763188803750146813661643215643204282822921133150857096040525526238874663072065909011901825859431431529923123622464154947464938835260328834756749295068640310364950903496539652330421648432455120770809823303832945640147451200986478076349597213904670217540076483185380945052792308235471287724485935123696596155602016383646213080718298597107211919925780681807859384144015566251415520930095357550460399142412654942858076717936107964235598194372543302341756408967954097342329099426616076129786110035700687267040881144427538250176645203111413280218779036446004133349880144351016635270510960732943179409352878214132164065820760302211445755518344212915242553435343134577991287948508296307585445731124724924839031048786101819749633009895403111978163163405304291455957420730546892577596110884335342067122437526438350996863352606300824237108409985628723024079678933422716360753299704533506511774249728920248166450542065324993979001521930008698072041295020363575764912940568967110238658970457281562384923720673522012041598073912918906507497097398949398717049376299697319550170617231001415090648315734448116336694263228590025690087880947173828921078470877738566587641519738042708256329802443980190567731672159270376171509638576869261261106592224636087339359641787828736300292139896452970226749503710246243819851306648703762098918214680773417471803298395357542572799918158025672464062141995068149015671240245776812969507154738723486500038424329380542874974093702920922407297947818615996363439331474979242009445472482310671736499220987076850919050863526440651537025882091056419528162092358647929929357069314908225986176942907478576786963081756612444273055787833103992588094744882748983921547762174585852768345725701280851164138161229558015954639783445958739967992074084427408270199161976830684179270156986928030482547940474193022445038418165459876785089196443789749076500562375032675299304904296307024558528484586831072297814948334197026310833029515545138006405327367783491006506571152145949003213005074225807526201617612430745753932040932175185563477312743077015688728137959768645102678848468283251779425732195584118185351144294163851680932743054161539903881918354474822292755391896401736368100155489388540484886428620788496118358822215109499541566725099105692523838346428331168660688036867789865565486748187658371248043644257340216005457356252512580444930313270823456626547831947290879676337338146004436980570576178795743801744870864402138327655243419672640123051473836615271860203336755947298425726797073226349037029222897537018283894695595061139574794151987525469035524287999560764549390403404902015518160416197171069310512464877982452012966441344899164674028098289839373924899444332120763310970459656269345412254464019307661201824669733108843757627899190389941702382532725349745717590227568073480324352602354361352153617839983265325262862363417918665476648531387932947607059546620114480159678460745496682054930334596195948302115259339419301141291010948536292908463985906815828871450790458655535703167074456116226640112682291615924688235544095413160127257095479496487084806600634226518831197365515211483335093193669873276153599795086155124155532538021642182571625513363715831383179883391870313470652206210287837879257993655439336132125801268005085320916231530697734280539935939418579476656466693704407523493585993321993151714246669845144305574723891880231465265671892107873300221703481130377257224305835302936391604167891145814331477255225441997925554077334713003968995976004279142992966258499763909870352937896915775507893710599582357193611893
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;
}
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()
}
Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4
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)
Jag Àr en optimist; det Àr aldrig sÄ dÄligt sÄ att det inte kan bli sÀmre.
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.
The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."
- IgÄr Microsoft förenklar Windows 11-uppgradering 36
- 6 / 5 Nintendo krÀver att Github rensar emulator-kod 45
- 6 / 5 Efter kritikstormen â inget PSN-krav för Helldivers 2 55
- 5 / 5 Nu gÄr det att mÀta internethastigheten direkt i Microsoft Edge 18
- 5 / 5 Microsoft optimerar Utforskaren och Aktivitetshanteraren 30
- Hur mycket minne tar din setup i "idle"?36
- Bilder pÄ ditt senaste inköp (2024) [inga produktbilder]609
- Ryzen 5 7600x eller 7 7800x3d?3
- Mannen bakom Lockbit avslöjad17
- SweCyklers1502
- Nytt rykte: RTX 5080 kommer före 509035
- Nytt gamingtangentbord runt 2000:-16
- Custom tangentbord med low-profile switchar6
- Köp Samsungs 114 tums TV â fĂ„ en till pĂ„ köpet25
- Kan vi snacka lite GPU temps?8
- SĂ€ljes GTX 1060 Strix Gaming
- Köpes Sökes Am4 motherboard billigt.
- SÀljes Lenovo Yoga 9 Ultra 14" med OLED 4K skÀrm
- SĂ€ljes Akko 5087 RGB â Steam Engine Edition
- SĂ€ljes Moderkort, CPU i7-12700, 16GB RAM, 500GB SSD
- SĂ€ljes Canon PowerShot SX20 IS â kompaktkamera
- Köpes BÀrbar Dator + SkÀrm + TrÄdlös tangentbord/mus
- SÀljes LG C3 42" OLED 4K Gaming TV 120 Hz G-Sync 1 ms sÀljes eller bytes mot monitor
- SÀljes Acer predator x34GS gamingskÀrm 180 Hz
- SĂ€ljes Acer Predator X38P IPS 175hz G-Sync
- SweClockers Noob-byggarguide Del 1: Kapitel 11
- Köp Samsungs 114 tums TV â fĂ„ en till pĂ„ köpet25
- Nytt rykte: RTX 5080 kommer före 509035
- Veckans frÄga: Har du uppgraderat till OLED-skÀrm?123
- Snart kan du shoppa pÄ Amazon via Prime Video12
- StrömsnÄlt, utbytbart minne med LPCAMM217
- Mannen bakom Lockbit avslöjad17
- Nya Google Pixel 8a Àr snÀll mot plÄnboken77
- Rekordtunn Ipad Pro fÄr M4-krets74
- Prispressat mejselkit Àr Testlabbets favorit33
Externa nyheter
Spelnyheter frÄn FZ
- Dragon Age: Dreadwolf kan slÀppas i Är idag
- Xbox- och "AAAA"-spelet Perfect Dark uppges ha problem idag
- "Fantastisk live service" sÀger EA:s vd om nÀsta Battlefield idag
- Redfall-dlc som folk betalat för skrotas, istÀllet "tillgodo"-erbjudande idag
- Vroom! Svenskutvecklade DCS-planet F-4 Phantom slÀpps i maj idag