🌟 Advent of Code (AoC) 2022 🌟

PermalÀnk
Medlem ★
●

🌟 Advent of Code (AoC) 2022 🌟

TrÄd frÄn 2016.
TrÄd frÄn 2018.
TrÄd frÄn 2019.
TrÄd frÄn 2020.
TrÄd frÄn 2021.

Tomten behöver Ă€n en gĂ„ng vĂ„r hjĂ€lp att rĂ€dda julen ✹

Tack @gbroll för pÄminnelsen om att det Àr dags för 2022 Ärs AoC-trÄd.

INSTRUKTIONER

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

InlÀggsform

Citat:

Dag:
SprÄk:
Lösning:

Om du vill dela med dig av kod eller tips pÄ hur man löser dagens uppgift, anvÀnd [spoiler]-taggar.

Ett bra tips!

[code]Kod innanför code-taggar[/code]

Dold text

EXEMPEL

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

Jag var sÄ exalterad över att fÄ komma igÄng att jag tillredde kaffet pÄ fel sÀtt.... Aja.

Tabbade mig rejÀlt med ett indenteringsfel... Jag skrev först

def solution_1(input): prev_depth = 0 num_inc = 0 for v1 in input: if v1 > prev_depth: num_inc += 1 prev_depth = v1 return num_inc - 1

Notera nÀst sista raden... jag tÀnkte att djupet bara skulle uppdateras med avseende pÄ tidigare djupaste djupet; men i texten stÄr det ju tydligt att vi alltid bryr oss om senaste djupet.

Dold text
Visa signatur

:(){ :|:& };:

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

PermalÀnk
●

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

KÀndes som en ganska snÀll första uppgift i Är

import std / [strutils, algorithm, math] proc getCalories(input: string): seq[int] = for elf in input.split("\n\n"): var calories: int for line in elf.splitLines: calories += parseInt(line) result.add calories proc part1(input: string) = let cals = getCalories(input) echo "Part 1: ", max(cals) proc part2(input: string) = var cals = getCalories(input) cals.sort(Descending) echo "Part 2: ", sum(cals[0..2]) when isMainModule: let input = readFile("input.txt") part1(input) part2(input)

Dold text
PermalÀnk
Medlem ★
●

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

Dumma Wastl roterade tydligen cookies nÄgon gÄng under veckan, för nÀr jag skulle köra mitt fetch-script blev jag promptad att logga in. Jag spenderade flera dyrbara minuter innan jag tillslut gjorde som "folk" och bara kopierade input frÄn hemsidan...

Bra första uppgift, tycker jag. Det som tog tid (förutom fadÀsen ovan) var att splitta input pÄ rÀtt sÀtt.

def solution_1(input): max_cal = 0 for e in input: max_cal = max((sum(map(int, e.split()))), max_cal) return max_cal def solution_2(input): elfs = list() for e in input: elfs.append(sum(map(int, e.split()))) return sum(sorted(elfs, reverse=True)[:3])

Dold text
Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem
●

Dag 1
SprÄk: Golang

Lösning:

Vet inte varför jag börjar, kommer aldrig slutföra AoC i Är heller, men men.

Golang (lÀs jag) levererar som vanligt massa kod

package main import ( "bufio" "fmt" "os" "sort" "strconv" ) func getPartOne(numbers [][]int) int { max := 0 for elf := range numbers { sum := getSum(numbers[elf]) if sum > max { max = sum } } return max } func getSum(cals []int) int { sum := 0 for cal := range cals { sum += cals[cal] } return sum } func getPartTwo(numbers [][]int) int { aggregated := make([]int, 0) for elf := range numbers { sum := getSum(numbers[elf]) aggregated = append(aggregated, sum) } sort.IntSlice(aggregated).Sort() aggLen := len(aggregated) return aggregated[aggLen-1] + aggregated[aggLen-2] + aggregated[aggLen-3] } func getNumbers(filename string) [][]int { file, err := os.Open(filename) if err != nil { panic(err) } defer file.Close() scanner := bufio.NewScanner(file) numbers := make([][]int, 1) index := 0 for scanner.Scan() { row := scanner.Text() val, err := strconv.Atoi(row) if err != nil { index++ numbers = append(numbers, make([]int, 0)) continue } numbers[index] = append(numbers[index], val) } return numbers } func main() { fmt.Println("Part one: ", getPartOne(getNumbers("../input.txt"))) fmt.Println("Part two: ", getPartTwo(getNumbers("../input.txt"))) }

Dold text
PermalÀnk
Medlem ★
●

Dag 1
SprÄk: JS (Node)

Lösning:

Kommer nog inte heller slutföra, men det Àr alltid kul att börja.
Första dagarna klarar man utan nÄgon större tidsÄtgÄng

import { input } from '../input/day1.js'; const array = (input) => input.split('\n').map(n => parseInt(n)); export const solutionA = () => { const nums = array(input); let highest = -1; let sum = 0; for (const n of nums) { if (!n) { if (sum > highest) highest = sum; sum = 0; } else sum += n; } console.log(highest); } export const solutionB = () => { const nums = array(input); let highest = -1; let sum = 0; const sums = []; for (const n of nums) { if (!n) { sums.push(sum); sum = 0; } else sum += n; } sums.sort((a, b) => b - a); console.log(sums[0] + sums[1] + sums[2]); }

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

TrÄd frÄn 2016.
TrÄd frÄn 2018.
TrÄd frÄn 2019.
TrÄd frÄn 2020.
TrÄd frÄn 2021.

Tomten behöver Ă€n en gĂ„ng vĂ„r hjĂ€lp att rĂ€dda julen ✹

Tack @gbroll för pÄminnelsen om att det Àr dags för 2022 Ärs AoC-trÄd.

INSTRUKTIONER

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

InlÀggsform
EXEMPEL

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

Jag var sÄ exalterad över att fÄ komma igÄng att jag tillredde kaffet pÄ fel sÀtt.... Aja.

Tabbade mig rejÀlt med ett indenteringsfel... Jag skrev först

def solution_1(input): prev_depth = 0 num_inc = 0 for v1 in input: if v1 > prev_depth: num_inc += 1 prev_depth = v1 return num_inc - 1

Notera nÀst sista raden... jag tÀnkte att djupet bara skulle uppdateras med avseende pÄ tidigare djupaste djupet; men i texten stÄr det ju tydligt att vi alltid bryr oss om senaste djupet.

Dold text

Är jag blind eller saknas lĂ€nken till problemen?

PermalÀnk
Medlem ★
●
Skrivet av medbor:

Är jag blind eller saknas lĂ€nken till problemen?

Vi Àr bÄda blinda!

Visa signatur

Modermodem frÄn ONOFF och bildskÀrmsutrustning frÄn Electrolux. US Robotics 28.8K telefonuppringd internetförbindelse. Har en förkÀrlek för tysk tjejpop.

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: Python 3

[sum(sorted(sum(map(int,e.split())) for e in open("input01").read().split('\n\n'))[-n:]) for n in [1,3]]

Dold text
Gjorde om till one-liner
PermalÀnk
Medlem
●
Skrivet av HappySatan:

Vi Àr bÄda blinda!

https://adventofcode.com/

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: C#

var elfBackpacks = new List<int>(); var currElf = 0; input .ToLines(removeEmpty: false) .ToList() .ForEach((val) => { if (val == "") { elfBackpacks.Add((currElf)); currElf = 0; }else currElf += Int32.Parse(val); }); var partOne = elfBackpacks.Max(); var partTwo = elfBackpacks.OrderDescending().Take(3).Sum();

** ToLines() Àr min egna metod som splittar pÄ newline...

Dold text
Kommentar
Visa signatur

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

PermalÀnk
Medlem
●

day1
sprÄk: python

with open("day1.txt", "r") as file: f = file.read() f = f.splitlines() _list = [] count = 0 for number in f: if number == "": _list.append(count) count = 0 else: number = int(number) count += number _list.sort() tot = _list[-1] + _list[-2] + _list[-3] print(_list[-1]) print(tot)

Dold text
PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: C#
Kvalité: Kompilerar

Console.WriteLine("Mickur's Advent of Code 2022 - Day 1!"); // Setup var elves = new List<int>(); var currentElfCalories = 0; foreach (var line in File.ReadLines("input.txt")) if (string.IsNullOrWhiteSpace(line)) { elves.Add(currentElfCalories); currentElfCalories = 0; } else { currentElfCalories += int.Parse(line); } if (currentElfCalories > 0) elves.Add(currentElfCalories); // Note: There are better ways to get the top elves than this. But I don't care, this code is simple! I also assume that the input is correctly formatted and that there are always at least three elves. elves.Sort((a, b) => { if (a < b) { return 1; } if (a > b) { return -1; } return 0; }); // Part One: Find elf carrying the most Console.WriteLine($"Part 1: The elf carrying the most calories has {elves[0]} calories"); // Part Two: Find top 3 elves carrying the most Console.WriteLine($"Part 2: The three elves that are carrying the most calories have {elves[0] + elves[1] + elves[2]} calories total");

Dold text

Optimerad kod

Console.WriteLine("Mickur's Advent of Code 2022 - Day 1!"); // Setup var currentElfCalories = 0; var gold = 0; var silver = 0; var bronze = 0; foreach (var line in File.ReadLines("input.txt")) if (string.IsNullOrWhiteSpace(line)) { // Are we top 3!? if (currentElfCalories > bronze) { // Do we beat gold? if (currentElfCalories >= gold) { bronze = silver; silver = gold; gold = currentElfCalories; } // Or do we beat silver? else if (currentElfCalories >= silver) { bronze = silver; silver = currentElfCalories; } else { bronze = currentElfCalories; } } currentElfCalories = 0; } else { // Micro-optimization, GOTTA GO FAST! // currentElfCalories += int.Parse(line); // Old, super slow code! var lineValue = 0; foreach (var c in line) lineValue = lineValue * 10 + (c - '0'); currentElfCalories += lineValue; } // Part One: Find elf carrying the most Console.WriteLine($"Part 1: The elf carrying the most calories has {gold} calories"); // Part Two: Find top 3 elves carrying the most Console.WriteLine($"Part 2: The three elves that are carrying the most calories have {gold + silver + bronze} calories total");

Dold text

Edit: Missad spoiler-tagg
Edit 2: BĂ€ttre kod!

Visa signatur

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

PermalÀnk
Medlem
●

Dag: 1
SprÄk: C#

public static void AdventOfCodeDay1() { string[] elfAndCalories = input().Split("\r\n\r\n"); int[] calorieSumPerElf = new int[elfAndCalories.Length]; int counter = 0; foreach (string summingCalories in elfAndCalories) { string[] tmp = summingCalories.Split("\r\n"); int sum = 0; for (int i = 0; i < tmp.Length; i++) { if (tmp[i] != "") { sum += int.Parse(tmp[i]); } } calorieSumPerElf[counter] = sum; counter++; } int elfWithMostCalories = calorieSumPerElf.Max(x => x); Console.WriteLine(elfWithMostCalories); Array.Sort(calorieSumPerElf); Array.Reverse(calorieSumPerElf); int sumTopThree = calorieSumPerElf[0] + calorieSumPerElf[1] + calorieSumPerElf[2]; Console.WriteLine(sumTopThree); }

Dold text
PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: Rust

fn main() { let input = include_str!("./input.txt"); let mut sum_vec = Vec::new(); sum_vec.push(0); for line in input.lines() { if line.is_empty() { sum_vec.push(0); } else { let sum_vec_len = sum_vec.len(); sum_vec[sum_vec_len - 1] += line.parse::<usize>().unwrap(); } } sum_vec.sort(); println!("Solution 1: {}", sum_vec[sum_vec.len() - 1]); println!("Solution 2: {}", sum_vec[sum_vec.len() - 1] + sum_vec[sum_vec.len() - 2] + sum_vec[sum_vec.len() - 3]); }

Dold text

Är vĂ€ldigt ringrostig, sĂ„ Ă€r absolut inte smidigaste sĂ€ttet att göra det pĂ„.
Men, ignorerar inte vÀldigt mÄnga lösningar sista gruppen siffror? Inputfilen avslutas inte med \r\n, sÄ om man bara letar efter tom rad eller liknande sÄ kommer man inte hantera sista gruppen.

PermalÀnk
Medlem ★
●

Dag 1:
SprÄk F#:
Kvalité: Har inte gjort nÄgot med F# sen förra AoC.

open System.IO let task' = let input = File.ReadAllLines "input.txt" |> List.ofSeq let rec group lines acc cur = match lines with | x::""::y -> group y ((cur + (x |> int))::acc) 0 | [] -> (cur::acc) | x::y -> group y acc (cur + (x|> int)) group input [] 0 let task1 = task' |> List.max let task2 = task' |> List.sort |> List.rev |> List.take 3 |> List.sum printfn $"task 1: %i{task1}" printfn $"task 2: %i{task2}"

Dold text
Visa signatur

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

PermalÀnk
●

Dag 1
SprÄk: Java
NivÄ pÄ koden: Det pratar vi inte om.. glömde bort att collections finns för en sekund.

package aoc_template; import java.io.*; import java.util.*; public class Aoc_template { public static void main(String[] args) { List<Integer> cals = new ArrayList<>(); List<Integer> cals_sorted = new ArrayList<>(); try { File file=new File("C:/aoc_input/01/input.txt"); FileReader fr=new FileReader(file); BufferedReader br=new BufferedReader(fr); StringBuffer sb=new StringBuffer(); String line; // Initiate total_cals int total_cals = 0; while((line=br.readLine())!=null) { // As long as there is no blank lines, fill up total_cals if (!"".equals(line)){ total_cals = (Integer.parseInt(line)) + total_cals; } // If there is a blank line, sum it up and att to cals list! // Then reset the counter else if ("".equals(line)) { cals.add(total_cals); total_cals = 0; } } fr.close(); } catch(IOException e) { e.printStackTrace(); } // Why not do it the hard way ? #lovelife int high_num = 0; // Lol idk why i did this. for (int i = 0; i<cals.size();i++) { if (high_num < cals.get(i)) { high_num = cals.get(i); } } // I just got an idea, when i got to second part ............ Collections.sort(cals); // Well , it's working on my computer int top1 = high_num; int top2 = cals.get(cals.size() - 2); int top3 = cals.get(cals.size() - 3); int total_top3 = top1 + top2 + top3; // And the winner is System.out.println("Highest cal is : " + high_num); System.out.println("Top 3 carrying: " + total_top3); } }

Dold text
Visa signatur

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

PermalÀnk
Medlem ★
●

Dag 1
SprÄk: C#
Vi fÄr se hur lÀnge jag orkar hÀnga pÄ i Är.

namespace Day1; internal class Program { static void Main(string[] args) { using var sr = new StreamReader("input.txt"); var elves = new List<int>(); var elf = 0; while (!sr.EndOfStream) { var line = sr.ReadLine(); if (!string.IsNullOrWhiteSpace(line)) { elf += int.Parse(line); } else { elves.Add(elf); elf = 0; } } elves.Add(elf); var top3 = elves.OrderDescending().Take(3); Console.WriteLine(top3.First()); Console.WriteLine(top3.Sum()); } }

Dold text
Visa signatur

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

PermalÀnk
Medlem ★
●

Dag 1
SprÄk: Java

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

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

Dold text

HÀr Àr komplett lösning i Java:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;

public class Day1 {
private static final String FILE_NAME = "C:\\DL\\input.txt";

public static void main(String[] args) {
try {
new Day1();
}
catch (Exception e) {
e.printStackTrace();
}
}

public Day1() throws IOException {
FileReader fr = new FileReader(new File(FILE_NAME));
BufferedReader br = new BufferedReader(fr); //creates a buffering character input stream  

int elf = 1;
int totalCalories = 0;
SortedMap<Integer, List<Integer>> elfCaloriesMap = new TreeMap<>();
String line;
List<Integer> elfList = null;
try {
while ((line = br.readLine()) != null) {
if (line.length() == 0) {
// Put summary for this elf in map
if (elfCaloriesMap.containsKey(totalCalories)) { // duplicate?
elfList = elfCaloriesMap.get(totalCalories);
elfList.add(elf++);
} else {
elfList = new ArrayList<>();
elfList.add(elf++);
elfCaloriesMap.put(totalCalories, elfList);
}
totalCalories = 0;
} else {
totalCalories += Integer.parseInt(line);
}
}
}
finally {
br.close();
}

// SortedMap will put highest sum (=key) as last entry
int maxCaloriesKeyAndSum = elfCaloriesMap.lastKey();
elfList = elfCaloriesMap.get(maxCaloriesKeyAndSum);
System.out.println(String.format("Elf No: %s carries most calories: %d",
elfList, maxCaloriesKeyAndSum));

int minCaloriesKeyAndSum = elfCaloriesMap.firstKey();
elfList = elfCaloriesMap.get(minCaloriesKeyAndSum);
System.out.println(String.format("Elf No: %s carries least calories: %d (bonus answer)",
elfList, minCaloriesKeyAndSum));

System.out.println("Total elves: " + (elf-1));
}
}

Dold text
La till koden ocksÄ.
PermalÀnk
Medlem ★
●
Skrivet av jaqob:

Dag: 1
SprÄk: Rust

fn main() { let input = include_str!("./input.txt"); let mut sum_vec = Vec::new(); sum_vec.push(0); for line in input.lines() { if line.is_empty() { sum_vec.push(0); } else { let sum_vec_len = sum_vec.len(); sum_vec[sum_vec_len - 1] += line.parse::<usize>().unwrap(); } } sum_vec.sort(); println!("Solution 1: {}", sum_vec[sum_vec.len() - 1]); println!("Solution 2: {}", sum_vec[sum_vec.len() - 1] + sum_vec[sum_vec.len() - 2] + sum_vec[sum_vec.len() - 3]); }

Dold text

Är vĂ€ldigt ringrostig, sĂ„ Ă€r absolut inte smidigaste sĂ€ttet att göra det pĂ„.
Men, ignorerar inte vÀldigt mÄnga lösningar sista gruppen siffror? Inputfilen avslutas inte med \r\n, sÄ om man bara letar efter tom rad eller liknande sÄ kommer man inte hantera sista gruppen.

Nu nÀr du sÀger det, min lösning ignorerar sista raden vet jag med mig

PermalÀnk
●

Dag: 1
SprÄk: C#

private static void Main(string[] args) { List<Elf> elves = GetElvesFromFile(); Elf elfWithMostCalories = elves.OrderByDescending(x => x.CalorySum).First(); List<Elf> topThreeElvesWithMostCalories = elves.OrderByDescending(x => x.CalorySum).Take(3).ToList(); Console.WriteLine($"The elf carrying the most calories is no {elves.IndexOf(elfWithMostCalories) + 1} and he has {elfWithMostCalories.CalorySum} calories."); Console.WriteLine($"Top 3 elves with the most calories have together {topThreeElvesWithMostCalories.Sum(x => x.CalorySum)} calories."); } private static List<Elf> GetElvesFromFile() { string[] lines = File.ReadAllLines("day1.txt"); var elves = new List<Elf>(); var calories = new List<int>(); foreach (string line in lines) { if (string.IsNullOrEmpty(line)) { elves.Add(new Elf { BackPack = calories.ToArray() }); calories = new List<int>(); } else { calories.Add(int.Parse(line)); if (line == lines.Last()) elves.Add(new Elf { BackPack = calories.ToArray() }); } } return elves; } private class Elf { public int[] BackPack { get; set; } public int CalorySum { get { return this.BackPack.Sum(); } } }

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

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

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

Dold text

Nej, om detta kunde ske hade det stÄtt i problembeskrivningen.

Visa signatur

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

PermalÀnk
Medlem ★
●
Skrivet av kode:

Nej, om detta kunde ske hade det stÄtt i problembeskrivningen.

Det uppstÄr ju. TvÄ av summorna Àr dubletter. Nu rÄkar det inte vara den högsta summan, men det hade kunnat vara det.
Men visst, om uppgiften gÄr ut pÄ att ta fram svaret en gÄng för just det hÀr datat - och man kan strunta i alla felfall sÄ visst. Men det Àr inte sÄ man ska lÀra ut kodning IMHO.

PermalÀnk
●
Skrivet av Barsk66:

Det uppstÄr ju. TvÄ av summorna Àr dubletter. Nu rÄkar det inte vara den högsta summan, men det hade kunnat vara det.
Men visst, om uppgiften gÄr ut pÄ att ta fram svaret en gÄng för just det hÀr datat - och man kan strunta i alla felfall sÄ visst. Men det Àr inte sÄ man ska lÀra ut kodning IMHO.

SvÄrtolkat dock.

I och med att det visst kan vara sÄ att dubbletterna bÀr samma vikt, sÄ blir det ju fortfarande det högsta Àven om det Àr dubletter?
Samma sak, Àr det 3 som bÀr lika mycket sÄ blir det ju ÀndÄ dessa 3 som man slÄr ihop.

Nu stÄr det ju precis som ovan skriver inget i beskrivningen om detta, dÀrför kan man bortse frÄn det , men förstÄr vad du menar , men samtidigt fÄr man ju se till vad uppgiften avser.

Visa signatur

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

PermalÀnk
Medlem ★
●
Skrivet av Barsk66:

Dag 1
SprÄk: Java

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

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

Dold text

SÄ lÀnge programmet inte gÄr sönder i den situationen och svaret överensstÀmmer med vad som efterfrÄgades sÄ tycker jag att det verkar skevt att kalla det för en bugg.

Att du Àven sÀger att det Àr fel pÄ problemformuleringen tycker jag faktiskt i nÄgon mÄn ocksÄ indikerar att det förmodligen inte Àr att betrakta som en bugg om man inte specialhanterat det scenariot; det Àr ju ÀndÄ det nedskrivna problemet som ska lösas och till skillnad frÄn verkligheten (ofta iaf) sÄ finns ju heller ingen motpart att lyfta eventuella brister i kravspecen pÄ temat "vore det inte bÀttre om ...", "men vad ska hÀnda om ...", osv till.

Dvs, sÄ som problemformuleringen ser ut sÄ tycker jag att det verkar som en helt rimlig lösning att svara med en godtyckligt vald nisse bland de som delade det högsta vÀrdet, om det Àr flera.

Jag kan till och med gÄ sÄ lÄngt att eftersom de sÀger "In case the Elves get hungry and need extra snacks, they need to know which Elf to ask" sÄ kanske det rentav Àr dÄligt om de inte fÄr ett entydigt svar om vilken nisses mat de skall Àta, det kanske leder till ett evigt kÀbbel och sÄ gÄr hela julen Ät helvete?
Bara som en motpol till att det sjÀlvklart borde implementeras annorlunda Àn de flesta gjort, den tolkning som dessutom ligger nÀrmast problemformuleringen.

Dold text

Skrivet av kode:

Nej, om detta kunde ske hade det stÄtt i problembeskrivningen.

Att det beskrivna scenariot *kan ske* stÄr vÀl utom tvivel, dÀremot borde eventuell önskad specialhantering ha indikerats om den faktiskt var ett krav.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

PermalÀnk
●

Dag 1
SprÄk: C#

static int Day1() { string[] list = File.ReadAllLines(@Files/list.txt); Dictionary<int, int> dict = new(); int elf = 1; for (int i = 0; i < list.Length; i++) { if (string.IsNullOrEmpty(list[i])) { elf++; continue; } else if (!dict.ContainsKey(elf)) { dict.Add(elf, 0); dict[elf] = int.Parse(list[i]); continue; } else dict[elf] += int.Parse(list[i]); } return dict.Select(x => x.Value).Max(); //part 1 return dict.OrderByDescending(x => x.Value).Take(3).Sum(x => x.Value); //part 2 }

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

Det uppstÄr ju. TvÄ av summorna Àr dubletter. Nu rÄkar det inte vara den högsta summan, men det hade kunnat vara det.
Men visst, om uppgiften gÄr ut pÄ att ta fram svaret en gÄng för just det hÀr datat - och man kan strunta i alla felfall sÄ visst. Men det Àr inte sÄ man ska lÀra ut kodning IMHO.

LÄt mig vara tydligare dÄ. Av de möjliga indata som genererats för uppgiften finns det inte en enda uppsÀttning dÀr nÄgon dublett Àr topp 3 mest kalorier. Det Àr inget som *rÄkar* vara sÄ. Det har tagits höjd för detta vid genereringen av indata. Om inte hade det stÄtt i uppgiften.

Visa signatur

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

PermalÀnk
Medlem ★
●
Skrivet av Barsk66:

Det uppstÄr ju. TvÄ av summorna Àr dubletter. Nu rÄkar det inte vara den högsta summan, men det hade kunnat vara det.
Men visst, om uppgiften gÄr ut pÄ att ta fram svaret en gÄng för just det hÀr datat - och man kan strunta i alla felfall sÄ visst. Men det Àr inte sÄ man ska lÀra ut kodning IMHO.

Uppgiften gÄr ut pÄ att mata in rÀtt svar. That's it.
Sen kan var och en utöka det med vad man kÀnner för och vad man vill fÄ ut av det. De allra flesta som deltar skulle jag nog ÀndÄ sÀga redan Àr professionella utvecklare sÄ att hÄlla pÄ med felhantering ligger nog inte högt pÄ nÄgons lista. Att listan innehÄller dubbletter kommer nog komma upp i en senare uppgift och orsaka fel hos dem som inte tÀnker pÄ det.

Vissa tÀvlar i leaderboarden (morgonpigga jÀvlar).
Vissa försöker skriva den mest optimerade koden (minst kod, snabbast, minst minne etc)
MÄnga inklusive mig anvÀnder AoC för ta en titt pÄ ett nytt sprÄk istÀllet för att skriva "hello world" och "bibliotek system" igen för tusende gÄngen.

Visa signatur

He who hasn't hacked assembly language as a youth has no heart. He who does so as an adult has no brain.
~John Moore

PermalÀnk
Medlem
●

Dag: 1
SprÄk: Dyalog APL

d←(+/⍎š)š{⍔⊆⍚(⊂'')â‰ąÂšâ”}⊃⎕NGET'1.txt' 1 ⌈/d ⍝ del1 +/3↑d[⍒d] ⍝ del2

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

SvÄrtolkat dock.

I och med att det visst kan vara sÄ att dubbletterna bÀr samma vikt, sÄ blir det ju fortfarande det högsta Àven om det Àr dubletter?
Samma sak, Àr det 3 som bÀr lika mycket sÄ blir det ju ÀndÄ dessa 3 som man slÄr ihop.

Nu stÄr det ju precis som ovan skriver inget i beskrivningen om detta, dÀrför kan man bortse frÄn det , men förstÄr vad du menar , men samtidigt fÄr man ju se till vad uppgiften avser.

Skrivet av evil penguin:

SÄ lÀnge programmet inte gÄr sönder i den situationen och svaret överensstÀmmer med vad som efterfrÄgades sÄ tycker jag att det verkar skevt att kalla det för en bugg.

Att du Àven sÀger att det Àr fel pÄ problemformuleringen tycker jag faktiskt i nÄgon mÄn ocksÄ indikerar att det förmodligen inte Àr att betrakta som en bugg om man inte specialhanterat det scenariot; det Àr ju ÀndÄ det nedskrivna problemet som ska lösas och till skillnad frÄn verkligheten (ofta iaf) sÄ finns ju heller ingen motpart att lyfta eventuella brister i kravspecen pÄ temat "vore det inte bÀttre om ...", "men vad ska hÀnda om ...", osv till.

Dvs, sÄ som problemformuleringen ser ut sÄ tycker jag att det verkar som en helt rimlig lösning att svara med en godtyckligt vald nisse bland de som delade det högsta vÀrdet, om det Àr flera.

Jag kan till och med gÄ sÄ lÄngt att eftersom de sÀger "In case the Elves get hungry and need extra snacks, they need to know which Elf to ask" sÄ kanske det rentav Àr dÄligt om de inte fÄr ett entydigt svar om vilken nisses mat de skall Àta, det kanske leder till ett evigt kÀbbel och sÄ gÄr hela julen Ät helvete?
Bara som en motpol till att det sjÀlvklart borde implementeras annorlunda Àn de flesta gjort, den tolkning som dessutom ligger nÀrmast problemformuleringen.

Dold text

Att det beskrivna scenariot *kan ske* stÄr vÀl utom tvivel, dÀremot borde eventuell önskad specialhantering ha indikerats om den faktiskt var ett krav.

Skrivet av kode:

LÄt mig vara tydligare dÄ. Av de möjliga indata som genererats för uppgiften finns det inte en enda uppsÀttning dÀr nÄgon dublett Àr topp 3 mest kalorier. Det Àr inget som *rÄkar* vara sÄ. Det har tagits höjd för detta vid genereringen av indata. Om inte hade det stÄtt i uppgiften.

Skrivet av Anaii:

Uppgiften gÄr ut pÄ att mata in rÀtt svar. That's it.
Sen kan var och en utöka det med vad man kÀnner för och vad man vill fÄ ut av det. De allra flesta som deltar skulle jag nog ÀndÄ sÀga redan Àr professionella utvecklare sÄ att hÄlla pÄ med felhantering ligger nog inte högt pÄ nÄgons lista. Att listan innehÄller dubbletter kommer nog komma upp i en senare uppgift och orsaka fel hos dem som inte tÀnker pÄ det.

Vissa tÀvlar i leaderboarden (morgonpigga jÀvlar).
Vissa försöker skriva den mest optimerade koden (minst kod, snabbast, minst minne etc)
MÄnga inklusive mig anvÀnder AoC för ta en titt pÄ ett nytt sprÄk istÀllet för att skriva "hello world" och "bibliotek system" igen för tusende gÄngen.

Ok, ok! Jag förstÄr era invÀndningar och jag förstÄr att uppgiften var att hitta den högsta summan, inte vem det var. Det som fick mig lite pÄ "fel spÄr" möjligen var just formuleringen:
"In case the Elves get hungry and need extra snacks, they need to know which Elf to ask". Och för att veta vem sÄ ledde det till att jag tog höjd för det i min lösning. Sen att de inte krÀvde det i svaret sÄg jag ju inte förrÀn senare (och tÀnkte inte pÄ det dÄ). Det blir ju faktiskt lite ologiskt att man vet att nÄn har en viss högsta summa, men inte vem. Vem ska man frÄga?
Men om nÄn vill se en lösning som ju tar hÀnsyn till det sÄ finns det i min kod ovan.

PermalÀnk
Medlem
●
Skrivet av GLaDER:

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

Dumma Wastl roterade tydligen cookies nÄgon gÄng under veckan, för nÀr jag skulle köra mitt fetch-script blev jag promptad att logga in. Jag spenderade flera dyrbara minuter innan jag tillslut gjorde som "folk" och bara kopierade input frÄn hemsidan...

Bra första uppgift, tycker jag. Det som tog tid (förutom fadÀsen ovan) var att splitta input pÄ rÀtt sÀtt.

def solution_1(input): max_cal = 0 for e in input: max_cal = max((sum(map(int, e.split()))), max_cal) return max_cal def solution_2(input): elfs = list() for e in input: elfs.append(sum(map(int, e.split()))) return sum(sorted(elfs, reverse=True)[:3])

Dold text

Tjenare!
Tycker din lösning var elegant Men jag undrar hur din variabel input ser ut hÀr, vad har du gjort med din innan den skickas till funktionerna?

Visa signatur

AMD 7950x | Asus ROG X670E GENE | MSI RTX 4090 Suprim X l 32GB Corsair DDR5 l 980 Pro 2tb | Corsair AX1600i | NZXT h400