🌟 Advent of Code (AoC) 2022 🌟

PermalÀnk
Medlem
●

Dag: 1
SprÄk: C#
Lösning: Github (Riktig ful lösning)

Visa signatur

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

PermalÀnk
Medlem ★
●

Dag 1, Kotlin

fun dag1(x: Int) = input.split("\n\n").map { elf -> elf.lines().sumOf { snack -> snack.toInt() } }.sortedDescending().subList(0, x).sum() println("Del 1: ${dag1(1)} och del 2: ${dag1(3)}")

Dold text
Visa signatur

i5-7600k . GTX 1080 . 16 GB

PermalÀnk
●

Dag: 1
SprÄk: Haskell

Kul att det Àr igÄng igen. Förra Äret kom jag till dag 9 tror jag. I Är ska jag försöka komma lÀngre och dessutom anstrÀnga mig att hÄlla lösningarna korta och lÀttlÀsta!

-- The program expects the input on stdin, ie -- $ ./solve < input import Data.List main = interact solve solve :: String -> String solve input = "Problem 1: " ++ show (maximum list) ++ "\n" ++ "Problem 2: " ++ show (sum $ take 3 (reverse $ sort list)) ++ "\n" where list = makeList (lines input) makeList :: [String] -> [Int] makeList [] = [] makeList elves = sum (map read firstElf):makeList restOfTheElves where firstElf = takeWhile (/="") elves restOfTheElves = dropWhile (=="") (dropWhile(/="") elves)

(AnvÀnder "highlight" som finns i apt för syntaxfÀrgning.)

Dold text
PermalÀnk
Medlem
●

Dag 1: Jag har tÀnkt rÀtt lÀnge att man borde ta och lÀra sig skriva rust nÄn gÄng so AoC Àr vÀl ett ypperligt tillfÀlle Jag har alltid varit lite rÀdd för att rust inte skulle lÄta en ignorera felkollar man inte ville hantera men det gick ju. HÀr Àr min första rustkod iaf:

use std::io::prelude::*; use itertools::Itertools; fn main() { let stdin = std::io::stdin(); let lines: Vec<String> = stdin.lock().lines().flatten().collect(); let res: Vec<i64> = lines.into_iter() // Group by empty lines .group_by(|elt| (*elt).is_empty()).into_iter() // parse and sum each group .map(|(_, group)| group.map(|elt| elt.parse::<i64>()).flatten().sum()) // sort results (largest first) .sorted().rev().collect(); let top3: i64 = res[..3].iter().sum(); println!("{} {}", res[0], top3); }

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

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?

Tack

Jag har "bara" delat upp input pÄ \n\n, sÄ jag fÄr en lista med varje nisses rader för sig. Kika pÄ lÀnken i inlÀgget sÄ kan du se allting. Titta sÀrskilt pÄ utils.parse dÀr jag har en drös med parse-funktioner.

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●

Dag: 1
SprÄk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim elfs As New List(Of Integer) Dim currentElf As Integer = 0 Using reader As New StreamReader("input.txt") While Not reader.EndOfStream Dim currentLine As String = reader.ReadLine() If Not String.IsNullOrWhiteSpace(currentLine) Then currentElf += Integer.Parse(currentLine) Else elfs.Add(currentElf) currentElf = 0 End If End While End Using elfs.Sort() elfs.Reverse() Console.WriteLine("Part 1: Most calories: " & elfs(0)) Console.WriteLine("Part 2: Top 3: " & elfs(0) + elfs(1) + elfs(2)) End Sub End Module

Dold text
PermalÀnk
Medlem ★
●

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

Mycket tid har gÄtt Ät till att tvinga hjÀrnan att sluta tÀnka imperativt.

Visa signatur

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

PermalÀnk
●

Dag: 1
SprÄk: C#
Lösning:

static void Main(string[] args) { var splitArray = Input.TextInput.Split(Environment.NewLine + Environment.NewLine); var sumList = new List<int>(); for (var i = 0; i < splitArray.Length; i++) { var individualIntArray = Array.ConvertAll(splitArray[i].Split(Environment.NewLine), x => int.Parse(x)); sumList.Add(individualIntArray.Sum()); } sumList = sumList.OrderByDescending(x => x).ToList(); Console.WriteLine($"Answer 1: {sumList.First()}"); Console.WriteLine($"Answer 2: {sumList.Take(3).Sum()}"); }

Dold text
PermalÀnk
Skrivmaskin ★
●

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

#include <iostream> #include <fstream> #include <string> #include <iomanip> #include <vector> #include <algorithm> #include <numeric> using namespace std; //part 1 int main() { string filename{"input.txt"}; ifstream ifs{filename}; vector<int> elves{}; string line{}; int temp{}; getline(ifs, line); do { if (line == "") { elves.push_back(temp); temp = 0; getline(ifs, line); } temp += stoi(line); } while (getline(ifs,line)); cout << *max_element(elves.begin(), elves.end()) << endl; //part 2 sort(elves.begin(), elves.end(), greater<int>()); cout << accumulate(elves.begin(), elves.begin()+3, 0) << '\n'; }

Dold text

Jag Äterupptar fjolÄrets misslyckade försök att tentaplugga genom AOC. Pga alldeles för lite tid har bÄde C++ och den missade kursen hittills fÄtt alldeles för lite kÀrlek och det mÀrks nÀr jag mÄste lÀgga en timme pÄ att fÄ inlÀsningen rÀtt Förhoppningsvis slÀpper den vÀrsta ringrosten om nÄgra dagar

PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: C#
Kvalité: Kompilerar och ger rÀtt svar!

Console.WriteLine("Mickur's Advent of Code 2022 - Day 2!"); // Setup var points = 0; const int rockValue = 1; const int paperValue = 2; const int scissorValue = 3; const int lossValue = 0; const int drawValue = 3; const int winValue = 6; // Part One: Second column is what you're going to play foreach (var line in File.ReadLines("input.txt")) switch (line[0]) { // Enemy plays rock case 'A': switch (line[2]) { // You play rock case 'X': points += rockValue + drawValue; break; // You play paper case 'Y': points += paperValue + winValue; break; // You play scissor case 'Z': points += scissorValue + lossValue; break; } break; // Enemy plays paper case 'B': switch (line[2]) { // You play rock case 'X': points += rockValue + lossValue; break; // You play paper case 'Y': points += paperValue + drawValue; break; // You play scissor case 'Z': points += scissorValue + winValue; break; } break; // Enemy plays scissor case 'C': switch (line[2]) { // You play rock case 'X': points += rockValue + winValue; break; // You play paper case 'Y': points += paperValue + lossValue; break; // You play scissor case 'Z': points += scissorValue + drawValue; break; } break; } Console.WriteLine(points); // Part Two: Seconds column is the result of the game points = 0; foreach (var line in File.ReadLines("input.txt")) switch (line[0]) { // Enemy plays rock case 'A': switch (line[2]) { // You should lose case 'X': points += scissorValue + lossValue; break; // You should draw case 'Y': points += rockValue + drawValue; break; // You should win case 'Z': points += paperValue + winValue; break; } break; case 'B': switch (line[2]) { // You should lose case 'X': points += rockValue + lossValue; break; // You should draw case 'Y': points += paperValue + drawValue; break; // You should win case 'Z': points += scissorValue + winValue; break; } break; case 'C': switch (line[2]) { // You should lose case 'X': points += paperValue + lossValue; break; // You should draw case 'Y': points += scissorValue + drawValue; break; // You should win case 'Z': points += rockValue + winValue; break; } break; } Console.WriteLine(points);

Dold text

Edit: Lite kodpill

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
●

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

Ganska trevlig uppgift idag, men jag misslyckades med att predicta vad part 2 skulle vara sÄ jag generaliserade part 1 pÄ fel saker och koden blev ganska lÄng xD.

include prelude import std / strscans type Hand = enum Rock, Paper, Scissor let loseTable = {Rock: Paper, Scissor: Rock, Paper: Scissor}.toTable let winTable = {Rock: Scissor, Scissor: Paper, Paper: Rock}.toTable proc readInputPart1(input: string, leftMap, rightMap: Table[char, Hand]): tuple[left: seq[Hand], right: seq[Hand]] = for line in input.splitLines: let (success, l, r) = scanTuple(line, "$c $c") assert success result.left.add leftMap[l] result.right.add rightMap[r] proc gameScore(opponent, me: Hand): int = let shapeScore = {Rock: 1, Paper: 2, Scissor: 3}.toTable result = shapeScore[me] if me == opponent: result += 3 elif winTable[me] == opponent: result += 6 proc part1(input: string) = let leftTab = {'A': Rock, 'B': Paper, 'C': Scissor}.toTable let rightTab = {'X': Rock, 'Y': Paper, 'Z': Scissor}.toTable let (opponent, me) = readInputPart1(input, leftTab, rightTab) var score = 0 for i in 0 .. me.high: score += gameScore(opponent[i], me[i]) echo "Part 1: ", score proc readInputPart2(input: string, leftMap: Table[char, Hand]): tuple[left: seq[Hand], right: seq[Hand]] = for line in input.splitLines: let (success, l, r) = scanTuple(line, "$c $c") assert success let opponent = leftMap[l] result.left.add opponent if r == 'X': result.right.add winTable[opponent] elif r == 'Y': result.right.add opponent elif r == 'Z': result.right.add loseTable[opponent] else: assert false proc part2(input: string) = let leftTab = {'A': Rock, 'B': Paper, 'C': Scissor}.toTable let (opponent, me) = readInputPart2(input, leftTab) var score = 0 for i in 0 .. me.high: score += gameScore(opponent[i], me[i]) echo "Part 2: ", score when isMainModule: let input = readFile("input.txt") part1(input) part2(input)

Dold text
PermalÀnk
Medlem
●

Dag: 2
SprÄk: Java
Lösning:

import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.Map; public class Application { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .GET() .uri(URI.create("https://adventofcode.com/2022/day/2/input")) .header("Cookie", "session=changeme") .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); String body = response.body(); var lut = Map.of( "A X", 1 + 3, "A Y", 2 + 6, "A Z", 3 + 0, "B X", 1 + 0, "B Y", 2 + 3, "B Z", 3 + 6, "C X", 1 + 6, "C Y", 2 + 0, "C Z", 3 + 3 ); var lut2 = Map.of( "A X", 3 + 0, "A Y", 1 + 3, "A Z", 2 + 6, "B X", 1 + 0, "B Y", 2 + 3, "B Z", 3 + 6, "C X", 2 + 0, "C Y", 3 + 3, "C Z", 1 + 6 ); int score = 0; for (String line : body.split("\n")) { score += lut2.get(line); } } }

Dold text
Visa signatur

flippy @ Quakenet

PermalÀnk
Medlem
●

Dag: 2
SprÄk: Java
Lösning:

import java.io.*; import java.util.*; public class DayTwo { public static void main(String[] args) { List<Character> opponent = new ArrayList<>(); List<Character> response = new ArrayList<>(); try { File file = new File("C:\\AoC 22\\inputDay2.txt"); FileReader filereader = new FileReader(file); BufferedReader bufferedreader = new BufferedReader(filereader); String line; while((line = bufferedreader.readLine()) != null) { opponent.add(line.charAt(0)); response.add(line.charAt(2)); } filereader.close(); } catch(IOException e) { e.printStackTrace(); } /* * A is for Rock X * B for Paper Y * C for Scissor Z * * 1 point for Rock * 2 point for Paper * 3 point for Scissor * * + outcome of round * 0 point if you lost * 3 point if it was a draw * 6 point if you won */ int points = 0; for(int i = 0; i < opponent.size(); i++) { if(response.get(i) == 'X') { points = points + 1; if(opponent.get(i) == 'A') points = points + 3; else if(opponent.get(i) == 'C') points = points + 6; } if(response.get(i) == 'Y') { points = points + 2; if(opponent.get(i) == 'A') points = points + 6; else if(opponent.get(i) == 'B') points = points + 3; } if(response.get(i) == 'Z') { points = points + 3; if(opponent.get(i) == 'B') points = points + 6; else if(opponent.get(i) == 'C') points = points + 3; } } System.out.println("part 1 points: " + points); /* * X is for lose * Y is for draw * Z is for win * * A is for Rock * B for Paper * C for Scissor * * 1 point for Rock * 2 point for Paper * 3 point for Scissor * * + outcome of round * 0 point if you lost * 3 point if it was a draw * 6 point if you won */ int pointsNew = 0; for(int i = 0; i < opponent.size(); i++) { if(response.get(i) == 'X') { if(opponent.get(i) == 'A') pointsNew = pointsNew + 3; else if(opponent.get(i) == 'B') pointsNew = pointsNew + 1; else pointsNew = pointsNew + 2; } if(response.get(i) == 'Y') { if(opponent.get(i) == 'A') pointsNew = pointsNew + 1 + 3; else if(opponent.get(i) == 'B') pointsNew = pointsNew + 2 + 3; else pointsNew = pointsNew + 3 + 3; } if(response.get(i) == 'Z') { if(opponent.get(i) == 'A') pointsNew = pointsNew + 2 + 6; else if(opponent.get(i) == 'B') pointsNew = pointsNew + 3 + 6; else pointsNew = pointsNew + 1 + 6; } } System.out.println("part 2 points: " + pointsNew); } }

Dold text
PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: JS (Node)

import { input } from '../input/day2.js'; const readInput = (input) => input.split('\n'); const rows = readInput(input); export const solutionA = () => { let hash = { 'A X': 1 + 3, //rock rock 'A Y': 2 + 6, //rock paper 'A Z': 3 + 0, //rock scissor 'B X': 1 + 0, //paper rock 'B Y': 2 + 3, //paper paper 'B Z': 3 + 6, //paper scissor 'C X': 1 + 6, //scissor rock 'C Y': 2 + 0, //scissor paper 'C Z': 3 + 3, //scissor scissor } let points = 0; for (const row of rows) { points += hash[row]; } console.log(points); } export const solutionB = () => { let hash = { 'A X': 3 + 0, //rock scissor 'A Y': 1 + 3, //rock rock 'A Z': 2 + 6, //rock paper 'B X': 1 + 0, //paper rock 'B Y': 2 + 3, //paper paper 'B Z': 3 + 6, //paper scissor 'C X': 2 + 0, //scissor paper 'C Y': 3 + 3, //scissor scissor 'C Z': 1 + 6, //scissor rock } let points = 0; for (const row of rows) { points += hash[row]; } console.log(points); }

Dold text
PermalÀnk
Medlem ★
●

Dag 2
SprÄk: C#
Kommentarer:

Är skoj att göra pattern matching, Ă€ven om jag nog egentligen hellre gör det efter frukost I efterhand gjorde jag den yttre matchingen pĂ„ första delen av input samt skrev additionerna istĂ€llet för summan direkt för lite bĂ€ttre lĂ€slighet.

Dold text

Lösning:

namespace Day2; internal class Program { static void Main(string[] args) { using var sr = new StreamReader("input.txt"); int pt1score = 0; int pt2score = 0; while (!sr.EndOfStream) { var line = sr.ReadLine()!.Split(' '); pt1score += pt1_calc(line); pt2score += pt2_calc(line); } Console.WriteLine($"Part 1 = {pt1score}"); Console.WriteLine($"Part 2 = {pt2score}"); int pt1_calc(string[] strings) { return strings[0] switch { "A" => strings[1] switch { "X" => 1 + 3, "Y" => 2 + 6, "Z" => 3 + 0, _ => 0 }, "B" => strings[1] switch { "X" => 1 + 0, "Y" => 2 + 3, "Z" => 3 + 6, _ => 0 }, "C" => strings[1] switch { "X" => 1 + 6, "Y" => 2 + 0, "Z" => 3 + 3, _ => 0 }, _ => 0 }; } int pt2_calc(string[] strings) { return strings[0] switch { "A" => strings[1] switch { "X" => 3 + 0, "Y" => 1 + 3, "Z" => 2 + 6, _ => 0 }, "B" => strings[1] switch { "X" => 1 + 0, "Y" => 2 + 3, "Z" => 3 + 6, _ => 0 }, "C" => strings[1] switch { "X" => 2 + 0, "Y" => 3 + 3, "Z" => 1 + 6, _ => 0 }, _ => 0 }; } } }

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

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

Ganska rak och enkel uppgift, men det gÀllde att hÄlla tungan i rÀtt mun.

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: Knackig F#

open System.IO type Shape = | Rock | Paper | Scissor type Outcome = | Win | Lose | Draw let scoreHand hand1 hand2 = match (hand1,hand2) with | Rock, Paper -> Win | Rock, Scissor -> Lose | Paper, Rock -> Lose | Paper, Scissor -> Win | Scissor, Rock -> Win | Scissor, Paper -> Lose | _ -> Draw let getHand hand outcome = match (hand, outcome) with | x, Draw -> x | Rock, Win -> Paper | Rock, Lose -> Scissor | Paper, Win -> Scissor | Paper, Lose -> Rock | Scissor, Win -> Rock | Scissor, Lose -> Paper let scoreOutcome result = match result with | Win -> 6 | Draw -> 3 | Lose -> 0 let scoreShape shape = match shape with | Rock -> 1 | Paper -> 2 | Scissor -> 3 let parseShape r = match r with | "A" -> Rock | "B" -> Paper | "C" -> Scissor | "X" -> Rock | "Y" -> Paper | "Z" -> Scissor let parseOutcome r = match r with | "X" -> Lose | "Y" -> Draw | "Z" -> Win let task' parser1 parser2 = File.ReadAllLines "input.txt" |> Seq.map (fun s -> let parts = s.Split(" ") (parser1 parts[0], parser2 parts[1])) let task1 = task' parseShape parseShape |> Seq.map(fun (h1,h2) -> scoreShape h2 + (scoreHand h1 h2 |> scoreOutcome)) |> Seq.sum let task2 = task' parseShape parseOutcome |> Seq.map(fun (h,o) -> ((getHand h o |> scoreShape) + scoreOutcome o)) |> Seq.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 2
SprÄk: Java

package aoc_template; import java.io.*; import java.util.*; public class Aoc_template { public static void main(String[] args) { List<String> my_play = new ArrayList<>(); List<String> opp_play = new ArrayList<>(); // Rock int score_rock = 1; // Paper int score_paper = 2; // Scissors int score_scissor = 3; // Score for win int score_win = 6; // Score for draw int score_draw = 3; // Score for lose int score_lose = 0; // Total score int total_score = 0; int total_score_two = 0; try { File file=new File("C:/aoc_input/02/input.txt"); FileReader fr=new FileReader(file); BufferedReader br=new BufferedReader(fr); StringBuffer sb=new StringBuffer(); String line; while((line=br.readLine())!=null) { String opponent_side = line.substring(0,1); String my_side = line.substring(2,3); my_play.add(my_side); opp_play.add(opponent_side); } fr.close(); } catch(IOException e) { e.printStackTrace(); } /////////////////////////////////////////// START PART 1 ///////////////////////////////////////////////////// /* My side X = ROCK Y = PAPER Z = SCISSORS Opponent side A = ROCK B = PAPER C = SCISSORS */ for (int i = 0; i<my_play.size();i++) { switch(opp_play.get(i)) { case "A": // Rock if (my_play.get(i).equals("X")) { // DRAW WITH ROCK total_score = total_score + score_rock + score_draw; } if (my_play.get(i).equals("Y")) { // WIN WITH PAPER total_score = total_score + score_paper + score_win; } // LOSE WITH SCISSORS if (my_play.get(i).equals("Z")) { total_score = total_score + score_scissor + score_lose; } break; case "B": // Paper if (my_play.get(i).equals("Y")){ // DRAW WITH PAPER total_score = total_score + score_paper + score_draw; } if (my_play.get(i).equals("Z")) { // WIN WITH SCISSORS total_score = total_score + score_scissor + score_win; } // LOSE WITH ROCK if (my_play.get(i).equals("X")) { total_score = total_score + score_rock + score_lose; } break; case "C": // Scissors // Eqaul with scissors if (my_play.get(i).equals("Z")) { total_score = total_score + score_scissor + score_draw; } // Win with rock if (my_play.get(i).equals("X")) { total_score = total_score + score_rock + score_win; } // Lose with paper if (my_play.get(i).equals("Y")) { total_score = total_score + score_paper + score_lose; } break; } } /////////////////////////////////////////// END PART 1 ////////////////////////////////////////////////////// /////////////////////////////////////////// START PART 2 //////////////////////////////////////////////////// /* If i get Y = draw If i get X = lose If i get Z = win My side X = ROCK Y = PAPER Z = SCISSORS Opponent side A = ROCK B = PAPER C = SCISSORS */ for (int i = 0; i<my_play.size();i++){ switch (my_play.get(i)) { case "Y": // Y = DRAW if (opp_play.get(i).equals("A")){ total_score_two = total_score_two + score_rock + score_draw; } if (opp_play.get(i).equals("B")) { total_score_two = total_score_two + score_paper + score_draw; } if (opp_play.get(i).equals("C")){ total_score_two = total_score_two + score_scissor + score_draw; } break; case "X": // X = LOSE if (opp_play.get(i).equals("A")) { total_score_two = total_score_two + score_lose + score_scissor; } if (opp_play.get(i).equals("B")){ total_score_two = total_score_two + score_lose + score_rock; } if (opp_play.get(i).equals("C")) { total_score_two = total_score_two + score_lose + score_paper; } break; case "Z": // Z = WIN if ((opp_play.get(i).equals("A"))) { total_score_two = total_score_two + score_paper + score_win; } if (opp_play.get(i).equals("B")) { total_score_two = total_score_two + score_scissor + score_win; } if (opp_play.get(i).equals("C")) { total_score_two = total_score_two + score_rock + score_win; } break; } } /////////////////////////////////////////// END PART 2 ///////////////////////////////////////////////////// // Print the scores System.out.println("Score part 1: " + total_score); System.out.println("Score part 2: " + total_score_two); } }

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: 2
SprÄk: Kotlin

fun part2Day2(lines: List<String>): Int { var score = 0 for (line in lines) { score += when (line[2]) { 'Z' -> 6 'Y' -> 3 else -> 0 } val shift = when (line[2]) { 'X' -> -1 'Y' -> 0 else -> 1 } score += when (line[0]) { 'A' -> (300 + shift) % 3 + 1 'B' -> (301 + shift) % 3 + 1 else -> (302 + shift) % 3 + 1 } } return score } fun part1Day2(lines: List<String>): Int { var score = 0 for (line in lines) { score += when (line[0] - line[2] + 23) { 0 -> 3 -1, 2 -> 6 else -> 0 } score += when (line[2]) { 'X' -> 1 'Y' -> 2 'Z' -> 3 else -> 0 } } return score }

Dold text

Älskar verkligen Kotlins "when". SĂ„ mycket finare Ă€n Javas switchar.

Visa signatur

i5-7600k . GTX 1080 . 16 GB

PermalÀnk
Medlem ★
●
Skrivet av johanandersson:

Dag: 2
SprÄk: Kotlin

fun part2Day2(lines: List<String>): Int { var score = 0 for (line in lines) { score += when (line[2]) { 'Z' -> 6 'Y' -> 3 else -> 0 } val shift = when (line[2]) { 'X' -> -1 'Y' -> 0 else -> 1 } score += when (line[0]) { 'A' -> (300 + shift) % 3 + 1 'B' -> (301 + shift) % 3 + 1 else -> (302 + shift) % 3 + 1 } } return score } fun part1Day2(lines: List<String>): Int { var score = 0 for (line in lines) { score += when (line[0] - line[2] + 23) { 0 -> 3 -1, 2 -> 6 else -> 0 } score += when (line[2]) { 'X' -> 1 'Y' -> 2 'Z' -> 3 else -> 0 } } return score }

Dold text

Älskar verkligen Kotlins "when". SĂ„ mycket finare Ă€n Javas switchar.

Python har nÄgot liknande sen 3.10, det heter match statements.

PermalÀnk
Medlem ★
●

Dag:2
SprÄk: Python (som jag aldrig anvÀnd innan)

Som vanligt följer jag KISS principen:

def day2(): input_list = open("data\\day2.txt").read().split("\n") part1_score = 0 part2_score = 0 win = 6 draw = 3 loss = 0 rock = 1 paper = 2 scissors = 3 for game_round in input_list: match game_round: case "A X": part1_score += draw + rock part2_score += loss + scissors case "A Y": part1_score += win + paper part2_score += draw + rock case "A Z": part1_score += loss + scissors part2_score += win + paper case "B X": part1_score += loss + rock part2_score += loss + rock case "B Y": part1_score += draw + paper part2_score += draw + paper case "B Z": part1_score += win + scissors part2_score += win + scissors case "C X": part1_score += win + rock part2_score += loss + paper case "C Y": part1_score += loss + paper part2_score += draw + scissors case "C Z": part1_score += draw + scissors part2_score += win + rock print(part1_score) print(part2_score) #Execution time (ms): 0.5049000028520823

Dold text
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 ★
●
Skrivet av pine-orange:

Python har nÄgot liknande sen 3.10, det heter match statements.

Jag har testat det lite, men ska det gÄ att anvÀnda för assignment pÄ samma fina sÀtt?

Visa signatur

i5-7600k . GTX 1080 . 16 GB

PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: Python (oneliner)

print([sum([(lambda x,y,f: "XYZXY"["BCA".find(x):].find(f(x, y)) * 3 + " XYZ".find(f(x, y)))(*e, f) for e in [p.split() for p in open("input02").read().split('\n')]]) for f in [ lambda x, y: y, lambda x, y: "XYZXY"["BCA".find(x) + "XYZ".find(y)]]])

Dold text
PermalÀnk
Medlem
●

Dag: 2
SprÄk: C#
Lösning: Github

FortsÀtter med hemsk kod bara för att lösa problemet. I Är Àr mest att klara sÄ mÄnga som möjligt. (Som varje Är)

Kodar inte dagligen lÀngre. Och innan var det mest PHP.

Visa signatur

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

PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: Rust

GÄr att göra mycket smartare saker, men eftersom man inte visste vad del tvÄ skulle handla om sÄ var det svÄrt att optimera innan.

Visst, det Àr enklare att koda detta i Python eller JS, men för att vara ett sÄ pass lÄgnivÄsprÄk Àr Rust vÀldigt trevligt

fn calculate_score1(opponent: char, you: char) -> usize { return if you == 'X' { 1 + if opponent == 'A' { 3 } else if opponent == 'C' { 6 } else { 0 }} else if you == 'Y' { 2 + if opponent == 'A' { 6 } else if opponent == 'B' { 3 } else { 0 }} else if you == 'Z' { 3 + if opponent == 'B' { 6 } else if opponent == 'C' { 3 } else { 0 }} else { 0 }; } fn calculate_score2(opponent: char, result: char) -> usize { return if result == 'Z' { 6 + if opponent == 'A' { 2 } else if opponent == 'B' { 3 } else if opponent == 'C' { 1 } else { 0 }} else if result == 'Y' { 3 + if opponent == 'A' { 1 } else if opponent == 'B' { 2 } else if opponent == 'C' { 3 } else { 0 }} else if result == 'X' { 0 + if opponent == 'A' { 3 } else if opponent == 'B' { 1 } else if opponent == 'C' { 2 } else { 0 }} else { 0 }; } fn main() { let input = include_str!("./input.txt"); let mut total_score1 = 0; let mut total_score2 = 0; for line in input.lines() { total_score1 += calculate_score1(line.chars().nth(0).unwrap(), line.chars().nth(2).unwrap()); total_score2 += calculate_score2(line.chars().nth(0).unwrap(), line.chars().nth(2).unwrap()); } println!("Total Score 1 {}", total_score1); println!("Total Score 2 {}", total_score2); } }

Dold text
PermalÀnk
●

Dag: 2
SprÄk: Haskell

Modulo, modulo. Hemskt mycket modulo!

-- The program expects the input on stdin, ie -- $ ./solve < input import Data.List (elemIndex) main = interact solve solve :: String -> String solve input = "Problem 1: " ++ show score1 ++ "\n" ++ "Problem 2: " ++ show score2 ++ "\n" where score1 = foldr score 0 (map shapes (lines input)) score2 = foldr score 0 (map shapes2 (lines input)) score :: (Int, Int) -> Int -> Int score (oppShape, myShape) acc = acc + myShape + gameScore oppShape myShape where gameScore opp me = 3*mod (1+mod (3+me-opp) 3) 3 shapes :: String -> (Int, Int) shapes s = (shape $ head s, shape $ last s) shapes2 :: String -> (Int, Int) shapes2 s = (shape $ head s, 1 + mod (shape (head s) + shape (last s)) 3) shape :: Char -> Int shape c = case elemIndex c "ABCXYZ" of Just i -> 1 + mod i 3 _ -> 0

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

Dold text
PermalÀnk
●
Skrivet av Ingetledigtnamn:

Dag: 2
SprÄk: Python (oneliner)

print([sum([(lambda x,y,f: "XYZXY"["BCA".find(x):].find(f(x, y)) * 3 + " XYZ".find(f(x, y)))(*e, f) for e in [p.split() for p in open("input02").read().split('\n')]]) for f in [ lambda x, y: y, lambda x, y: "XYZXY"["BCA".find(x) + "XYZ".find(y)]]])

Dold text

NÀr man ser en one-liner nÀr man gjort det i Java pÄ 194 rader isch (iofs kommentarer inkluderat) sÄ förstÄr man hur mycket lÀttare allt gÄr att göra :')

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: 2
SprÄk: C#

private (int partOne, int partTwo) Solve(string input) { (int playerOnePoints, int playerTwoPoints) GetPoints(char p1, char p2, bool forceOutcome = false) { int p1a = (int)p1 - 64; // 1,2,3 int p2a = (int)p2 - 87; // 1,2,3 if (forceOutcome) // part two { p2a = p2a switch { 1 => p1a switch { 1 => 3, 2 => 1, 3 => 2, _ => 0 }, /*loss*/ 2 => p1a, /* draw */ 3 => p1a switch { 1 => 2, 2 => 3, 3 => 1, _ => 0 }, /*win*/ _ => 0 }; } switch (p1a - p2a) { case 1: case -2:/*win p1*/ return (p1a + 6, p2a + 0); case -1: case 2: /*win p2*/ return (p1a + 0, p2a + 6); default: case 0: /*draw*/ return (p1a + 3, p2a + 3); } } var collectionOfPoints = input .ToLines() .Select( line => /* tuple with partOne, partTwo points */ (GetPoints(line[0], line[2]).playerTwoPoints, GetPoints(line[0], line[2], forceOutcome: true).playerTwoPoints) ).ToList(); var result_1 = collectionOfPoints.Select(players => players.Item1).Sum(); var result_2 = collectionOfPoints.Select(players => players.Item2).Sum(); return (result_1, result_2); }

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

Dold text
Visa signatur

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

PermalÀnk
●

Är mest en plojgrej men bestĂ€mde mig för att visualisera alla matcherna man fick i inputen med hjĂ€lp av emojis och en wrapper för P5.js i Nim. Om nĂ„gon Ă€r intresserad kan dom se den hĂ€r. Den animerar varje match separat pĂ„ ett stort grid och visar emojis som representerar dom olika valen (sten, sax, pĂ„se) samt utfallet i matchen (grön bock för vinst, streck för oavgjort, rött kryss för förlust).

PermalÀnk
Medlem
●

Dag 2 Java.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; public class Day2 { public static void main(String[] args) throws IOException { //a rock, b paper, c scissor int xRock = 1; int yPaper = 2; int zScissors = 3; int win = 6; int tie = 3; int pointCounter1 = 0; int pointCounter2 = 0; Path filePath = Path.of("src/input02.txt"); String day2Content = Files.readString(filePath); ArrayList<String> guideList = new ArrayList<>(); StringBuilder builder = new StringBuilder(); for (int i = 0; i < day2Content.length(); i++) { if (day2Content.charAt(i) != ('\n')) { builder.append(day2Content.charAt(i)); } else { guideList.add(builder.toString()); builder = new StringBuilder(); } } for (String one : guideList) { switch (one) { case "A X" -> pointCounter1 += (xRock + tie); case "A Y" -> pointCounter1 += (yPaper + win); case "A Z" -> pointCounter1 += zScissors; case "B X" -> pointCounter1 += xRock; case "B Y" -> pointCounter1 += (yPaper + tie); case "B Z" -> pointCounter1 += (zScissors + win); case "C X" -> pointCounter1 += (xRock + win); case "C Y" -> pointCounter1 += yPaper; case "C Z" -> pointCounter1 += (zScissors + tie); } } for (String two : guideList) { switch (two) { case "A X" -> pointCounter2 += zScissors; case "A Y" -> pointCounter2 += (tie + xRock); case "A Z" -> pointCounter2 += (win + yPaper); case "B X" -> pointCounter2 += xRock; case "B Y" -> pointCounter2 += (tie + yPaper); case "B Z" -> pointCounter2 += (win + zScissors); case "C X" -> pointCounter2 += yPaper; case "C Y" -> pointCounter2 += (tie + zScissors); case "C Z" -> pointCounter2 += (win + xRock); } } System.out.println(pointCounter1); System.out.println(pointCounter2); } }

Dold text
Visa signatur

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

Macbook pro 14 M1