🌟 Advent of Code (AoC) 2020 🌟

PermalÀnk
Medlem ★
●

SÄ hÀr ser max lÀsbarhet ut utan kommentarer, motsatsen till OneLiners.
C# .Net 5

public static string Run1() { int _Day = 2; string[] inputData = InputData.GetInputArrString(_Day); bool foundSolution = true; int validCount = 0; foreach (string item in inputData) { string[] parts = item.Split(":"); string[] rule = parts[0].Split(" "); string[] counts = rule[0].Split("-"); int from = Helper.toInt(counts[0].Trim()); int to = Helper.toInt(counts[1].Trim()); string character = rule[1].Trim(); string pwd = parts[1].Trim(); int count = pwd.Length - pwd.Replace(character, "").Length; if (count>=from && count<=to) { validCount++; } } if (foundSolution) { return validCount.ToString(); } return "FAIL"; } public static string Run2() { int _Day = 2; string[] inputData = InputData.GetInputArrString(_Day); bool foundSolution = true; int validCount = 0; int invalidCount = 0; foreach (string item in inputData) { string[] parts = item.Split(":"); string[] rule = parts[0].Split(" "); string[] counts = rule[0].Split("-"); int pos1 = Helper.toInt(counts[0].Trim()); int pos2 = Helper.toInt(counts[1].Trim()); string character = rule[1].Trim(); string pwd = parts[1].Trim(); bool pos1v = pwd.Substring(pos1 - 1, 1) == character; bool pos2v = pwd.Substring(pos2 - 1, 1) == character; if (pos1v ^ pos2v) { validCount++; } else { invalidCount++; } } if (foundSolution) { return validCount.ToString(); } return "FAIL"; }

Dold text
PermalÀnk
Medlem ★
●

One-liner i Python igen. Denna gÄng med förklaringar. Börja lÀngst in

from collections import Counter from numpy import sum from re import match # 5) Sum up all the pairs # 4) Build a list with a pair of true/false for both conditions print(sum([(lo <= c and c <= hi, (s[lo] == l) + (s[hi] == l) == 1) # Compute lo and hi limit, the letter, occureances of the letter, and padded string for lo,hi,l,c,s in [(int(m[1]), int(m[2]), m[3], Counter(m[4])[m[3]], ' ' + m[4]) # Extract different parts of the line for m in [re.match(r'(\d+)-(\d+) (\w): (\w+)', l) # 1) For all lines in input for l in open("input")]]], axis=0))

Dold text
Stavfel i kommentar
PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: c#

Inga försök att göra nÄgot snyggt denna gÄng, löstes pÄ nÄgon minut...

static async Task Main(string[] args) { var lines = await File.ReadAllLinesAsync("input.txt"); Part1(lines); Part2(lines); } static void Part1(string[] lines) { Console.WriteLine("--- Part #1 ---"); var valid = 0; foreach (var line in lines) { var parts = line.Split(' '); var minmax = parts[0].Split('-').Select(int.Parse).ToArray(); var character = parts[1].Trim(':').Single(); var password = parts[2]; var matches = password.Count(x => x == character); if (matches >= minmax[0] && matches <= minmax[1]) { valid++; } } Console.WriteLine(valid); } static void Part2(string[] lines) { Console.WriteLine("--- Part #2 ---"); var valid = 0; foreach (var line in lines) { var parts = line.Split(' '); var positions = parts[0].Split('-').Select(int.Parse).ToArray(); var character = parts[1].Trim(':').Single(); var password = parts[2]; if (password[positions[0] - 1] == character && password[positions[1] - 1] != character || password[positions[0] - 1] != character && password[positions[1] - 1] == character) { valid++; } } Console.WriteLine(valid); }

Dold text
Skrivet av Mordekai:

Jag hatar oneliners with a passion...

Du ser inte att det Àr en rolig utmaning ibland?

PermalÀnk
Medlem ★
●

FÄr se hur lÀnge man kan klara sig pÄ bash/awk..

part1$ <in tr '-' ' ' | tr -d ':' | awk '{ split($4, s, ""); c = 0; for (i in s) { if (s[i] == $3) { c += 1 } } if (c >= $1 && c <= $2) { print } }' | wc -l part2$ <in tr '-' ' ' | tr -d ':' | awk '{ split($4, s, ""); c = 0; if (s[$1] == $3) { c += 1 } if (s[$2] == $3) { c += 1 } if (c == 1) { print } }' | wc -l

Dold text
Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

PermalÀnk
Medlem ★
●

Jag kan inte F#, men jag försöker iallafall. Jag mottager gÀrna kommentarer frÄn nÄgon hejare pÄ F# om nÄgot inte Àr sÀrskilt idiomatiskt.

Dag 1:

open System.IO let day1_1 list target = let listSet = Set.ofList list let factor = list |> List.where(fun i -> listSet.Contains(target-i)) |> List.head (factor * (target-factor)) let rec combine n list = //Copied from https://stackoverflow.com/a/1231711 match n, list with | 0, _ -> [[]] | _, [] -> [] | k, (x::xs) -> List.map ((@) [x]) (combine (k-1) xs) @ combine k xs let day1_2 input target = let factors = combine 3 input |> List.where (fun x -> x|> List.sum = target) |> List.head factors |> List.fold (fun x y-> x * y) 1 [<EntryPoint>] let main argv = let input = File.ReadAllLines "input.txt" |> List.ofArray |> List.map (fun x-> x |> int) printfn "%i %i" (day1_1 input 2020) (day1_2 input 2020) 0 // return an integer exit code

Dold text

Dag 2:

open System.IO type PasswordRule = { Letter:char; minOccurs:int; maxOccurs:int } type PasswordRow = PasswordRule * string let parseRow (row:string):PasswordRow = let parseRule (rule:string) = let parts = rule.Split ' ' let char = parts.[1].[0] let occurs = (parts.[0]).Split '-' let min = occurs.[0] |> int let max = occurs.[1] |> int {Letter=char; minOccurs=min; maxOccurs=max} let parts = row.Split ':' let rule = parseRule parts.[0] let password = (parts.[1]) (rule,password) let verifyRow ((rule,password):PasswordRow):bool = let {minOccurs = min; maxOccurs = max; Letter=char;} = rule; let chars = password.ToCharArray() |> List.ofSeq |> List.filter (fun c -> c = char) |> List.length chars >= min && chars <= max let verifyRow_2 ((rule,password):PasswordRow):bool = let {minOccurs = min; maxOccurs = max; Letter=char;} = rule; (password.[min] = char || password.[max] = char) && (password.[min] <> password.[max]) [<EntryPoint>] let main argv = let input = File.ReadLines "input.txt" let calculateValidPasswords verifier = (input |> List.ofSeq |> List.map (fun l -> l |> parseRow |> verifier) |> List.filter id |> List.length) printfn "Part 1: %i" (calculateValidPasswords verifyRow) printfn "Part 2: %i" (calculateValidPasswords verifyRow_2) 0 // return an integer exit code

Dold text
Visa signatur

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

PermalÀnk
Medlem ★
●
Skrivet av hultron:

Du ser inte att det Àr en rolig utmaning ibland?

Jag har aldrig gjort det i hela mitt liv men det kan absolut bero pĂ„ att jag suger pĂ„ det ocksĂ„. Jag Ă€lskar att stega igenom kod, inte bara för att hitta buggar men Ă€ven för att se datat jag behandlar. Ännu vĂ€rre Ă€r andras kod, regex och LINQ suger jag pĂ„ av samma anledning. Kanske nĂ„gon form av lĂ€sförstĂ„elseproblem.

PermalÀnk
Datavetare ★
●

Dag: 2
SprÄk: Swift
Lösning: GitHub

Som vanligt lÀr vissa delar Äterkomma vilket betyder att man bör ha nÄgot form av bibliotek för vanliga hjÀlpfunktioner. Konceptuellt enkelt, djÀvulen Àr i detaljerna och fick sÀtta mig att lÀsa pÄ hur man gör nÄgot sÄdant i Swift (som jag anvÀnder för första gÄngen hÀr i AoC2020).

Man kan sammanfatta det som att Swift Àr vÀldigt tight integrerat med git... Fick först klagomÄl pÄ att mitt hjÀlpbibliotek inte uppfyllde versionskravet frÄn min applikation, hade bara slÀngt in det jag trodde var rÀtt sÄ krÀvde minst 1.0.0. Visade sig att man mÄste git-tag sina bibliotek med version, i detta fall löste taggen "1.0.0" det hela.

Fram till nu har det varken blivit MacOS eller XCode/VSCode, har gjort de tvÄ första dagarna med Swift installerad under Ubuntu 20.04 och editerat med Emacs. Testade nu att köra med VSCode, fungerar fint Àven med debugger!
Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

PermalÀnk
Medlem ★
●

@Yoshman tips pÄ instÀllning i vscode som jag precis fick reda pÄ av en kollega:

"debug.toolBarLocation": "docked"

PermalÀnk
Medlem ★
●
Skrivet av Yoshman:

Som vanligt lÀr vissa delar Äterkomma vilket betyder att man bör ha nÄgot form av bibliotek för vanliga hjÀlpfunktioner. Konceptuellt enkelt, djÀvulen Àr i detaljerna och fick sÀtta mig att lÀsa pÄ hur man gör nÄgot sÄdant i Swift (som jag anvÀnder för första gÄngen hÀr i AoC2020).

This!

Jag satt tvÄ/tre kvÀllar innan AoC 2020 startade och skrev lösningar till AoC 2019 just för att fÄ till grejer som:

Nu har jag vÀl insett att jag inte kommer nÄ nÄgra topplistor mha Go, iaf, men pÄ morgnarna vill jag inte sitta och felsöka varför eller varför inte man ska ha multipla go.mod-filer i olika mappar

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Datavetare ★
●

AngÄende one-liners. Finns mÄnga lÀgen dÀr list-comprehension, closures och kedjade högre ordnings funktioner Àr otroligt anvÀndbart.

Personligen tycker jag man mÄste hÄlla det pÄ vÀldigt enkel nivÄ, för blir vÀldigt snabbt "write-only code" med dessa kraftfulla konstruktioner. Ibland kan det bara rÀcka med att namnge en closure för att "oneliner" ska gÄ frÄn "WTF?" till "ah, det Àr ju uppenbart vad den gör".

Risken ligger i att man har full kontext i huvudet nÀr man skriver saker och Àr förförande att saker blir sÄ kompakt. Men man fÄr fundera lite pÄ hur saker ska se ut för nÄgon som inte har den fulla kontexten, annars hamnar man ibland i lÀget dÀr man efter en tid fÄr lÀgga massa tid pÄ att bena ut saker man sjÀlv skrivit...

Som med allt Àr det en balansgÄng. Att namnge saker genom lyfta ut Àven rÀtt enkla saker till separata funktioner alt. namnge closures genom att binda dem till en lokal variabel kan göra att man enkelt kan lÀsa vad som hÀnder likt ett naturligt sprÄk. Att lyfta ut saker pÄ det sÀttet brukar ocksÄ underlÀtta för debuggers att visualisera programflödet (kanske bara för oss som inte lÀrt oss att skriva 100 % buggfri kod Àn ).

Skrivet av hultron:

@Yoshman tips pÄ instÀllning i vscode som jag precis fick reda pÄ av en kollega:

"debug.toolBarLocation": "docked"

Tackar!

Fanns till och med ett Ànnu bÀttre alternativ, kör med tangentbordet. En av sakerna jag saknar nÀr jag inte kör debuggern i Emacs Àr den totala kontroll man har över allt direkt via kommandon och tangenter, i praktiken Àr det bara gdb som fungerar klockrent med Emacs. Swift krÀver LLDB, den integrera vÀldigt bra med VSCode
Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

PermalÀnk
Medlem ★
●

Jahopp, dags o damma av powershell-kunskaperna dÄ. Har nog inte skrivit en rad powershell sen förra Ärets AoC dÀr jag beskade med till dag 7 i alla fall. Har mest pillat en del med Javascript under Äret men kör vidare pÄ powershell för jag kÀnner mig mest bekvÀm med det

Kommer inte vara nÄgra fina eller optimerade lösningar. AnvÀnder vanligtvis inte powershell, eller programmering heller för den delen, för att lösa den hÀr typen av problem. Men det hÀr Àr ett roligt koncept i alla fall

Dag: 1
SprÄk: Powershell

$exps = Get-Content 'input.txt'; $size = $exps.Count; for ($i = 0; $i -lt $size; $i++) { for ($j = $i; $j -lt $size; $j++) { if ([int]$exps[$i] + [int]$exps[$j] -eq 2020) { $ans = [int]$exps[$i] * [int]$exps[$j]; } } } Write-Host "Day1-1: $ans"; $ans = 0; for ($i = 0; $i -lt $size; $i++) { if ($ans -ne 0) {break;} for ($j = $i; $j -lt $size; $j++) { for ($k = $j; $k -lt $size; $k++) { if ([int]$exps[$i] + [int]$exps[$j] + [int]$exps[$k] -eq 2020) { $ans = [int]$exps[$i] * [int]$exps[$j] * [int]$exps[$k]; break; } } } } Write-Host "Day1-2: $ans";

Dold text

Dag: 2
SprÄk: Powershell

$pswds = Get-Content 'input.txt'; $valid = 0; foreach ($pswd in $pswds) { $parts = $pswd.Split(" "); $limits = $parts[0].Split("-"); $group = $parts[2].ToCharArray() | Group-Object -AsHashTable -AsString $charCount = $group[$parts[1].TrimEnd(":")].Count; if ($charCount -ge $limits[0] -and $charCount -le $limits[1] ) { $valid++; } } Write-Host "Day2-1 valid passwords: $valid"; $valid = 0; foreach ($pswd in $pswds) { $parts = $pswd.Split(" "); $positions = $parts[0].Split("-"); $pos1 = $positions[0]; $pos2 = $positions[1]; $key = $parts[1].TrimEnd(":"); $password = $parts[2].ToCharArray() if ($password[$pos1 - 1] -eq $key -XOR $password[$pos2 - 1] -eq $key) { $valid++; } } Write-Host "Day2-2 valid passwords: $valid";

Dold text
Visa signatur

StationÀra | Define 7 Compact | RM750x White | X570S AERO G | Ryzen 5 5600x | NH-D15 Chromax | Flare X 4x8GB 3200MHz | RTX 4070 Super | MP600 1TB | 980 1TB | A2000 1TB | 970 EVO 500GB | 850 EVO 500GB |
Acer X34A + 2x Dell U2719D | Wave 1 | Arctis Nova Pro Wireless |
Laptop | Macbook Air M1 2020 | 16GB | 256GB |
3dkatten.se

PermalÀnk
Medlem
●

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

package main import ( "bufio" "fmt" "os" "strconv" "strings" ) // Policy - type Policy struct { Min int Max int Letter string Password string } func checkPolicyPartOne(policies []Policy) int { result := 0 for _, policy := range policies { count := len(strings.Split(policy.Password, policy.Letter)) - 1 if count >= policy.Min && count <= policy.Max { result++ } } return result } func checkPolicyPartTwo(policies []Policy) int { result := 0 for _, policy := range policies { if policy.Min <= 0 || policy.Max > len(policy.Password) { continue } minLetter := policy.Password[policy.Min-1 : policy.Min] maxLetter := policy.Password[policy.Max-1 : policy.Max] count := 0 if minLetter == policy.Letter { count++ } if maxLetter == policy.Letter { count++ } if count == 1 { result++ } } return result } func getInt(val string) int { result, _ := strconv.Atoi(val) return result } func getInput() []string { file, _ := os.Open("../input.txt") defer file.Close() scanner := bufio.NewScanner(file) var passwords []string for scanner.Scan() { passwords = append(passwords, scanner.Text()) } return passwords } func getPolicies(rows []string) []Policy { var policies []Policy for _, row := range rows { minEnd := strings.Index(row, "-") min := getInt(row[:minEnd]) row = row[minEnd+1:] maxEnd := strings.Index(row, " ") max := getInt(row[:maxEnd]) row = row[maxEnd+1:] letter := row[:1] password := row[3:] policies = append(policies, Policy{ Letter: letter, Password: password, Min: min, Max: max, }) } return policies } func main() { rows := getInput() polices := getPolicies(rows) fmt.Println("PartOne", checkPolicyPartOne(polices)) fmt.Println("PartTwo", checkPolicyPartTwo(polices)) }

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

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

package main import ( "bufio" "fmt" "os" "strconv" "strings" ) // Policy - type Policy struct { Min int Max int Letter string Password string } func checkPolicyPartOne(policies []Policy) int { result := 0 for _, policy := range policies { count := len(strings.Split(policy.Password, policy.Letter)) - 1 if count >= policy.Min && count <= policy.Max { result++ } } return result } func checkPolicyPartTwo(policies []Policy) int { result := 0 for _, policy := range policies { if policy.Min <= 0 || policy.Max > len(policy.Password) { continue } minLetter := policy.Password[policy.Min-1 : policy.Min] maxLetter := policy.Password[policy.Max-1 : policy.Max] count := 0 if minLetter == policy.Letter { count++ } if maxLetter == policy.Letter { count++ } if count == 1 { result++ } } return result } func getInt(val string) int { result, _ := strconv.Atoi(val) return result } func getInput() []string { file, _ := os.Open("../input.txt") defer file.Close() scanner := bufio.NewScanner(file) var passwords []string for scanner.Scan() { passwords = append(passwords, scanner.Text()) } return passwords } func getPolicies(rows []string) []Policy { var policies []Policy for _, row := range rows { minEnd := strings.Index(row, "-") min := getInt(row[:minEnd]) row = row[minEnd+1:] maxEnd := strings.Index(row, " ") max := getInt(row[:maxEnd]) row = row[maxEnd+1:] letter := row[:1] password := row[3:] policies = append(policies, Policy{ Letter: letter, Password: password, Min: min, Max: max, }) } return policies } func main() { rows := getInput() polices := getPolicies(rows) fmt.Println("PartOne", checkPolicyPartOne(polices)) fmt.Println("PartTwo", checkPolicyPartTwo(polices)) }

Dold text

Kul med en till Go-lösning! Tycker vi gjort typ lika samma.

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem
●
Skrivet av GLaDER:

Kul med en till Go-lösning! Tycker vi gjort typ lika samma.

Ja de Àr lika. SÄg att du anvÀnder Strings.Count vilket jag inte visste fanns :p. Ska uppdatera min lokala kopia!

PermalÀnk
●

Dag: 2
SprÄk: C# (LINQ)

public class Day2 { private static readonly Regex _pwdRegex = new Regex(@(?<min>\d*)-(?<max>\d*)\s(?<char>\w):\s(?<password>\w*), RegexOptions.Compiled); private static readonly string[] _lines = File.ReadAllLines("puzzles/day2/2a.txt"); public void Run1() { var valid = (from line in _lines let match = _pwdRegex.Match(line) let min = int.Parse(match.Groups["min"].Value) let max = int.Parse(match.Groups["max"].Value) let pwdChar = match.Groups["char"].Value[0] let password = match.Groups["password"].Value let occurrence = password.Count(c => c.Equals(pwdChar)) where occurrence >= min && occurrence <= max select pwdChar ).Count(); Console.WriteLine($"1: Valid passwords {valid}"); } public void Run2() { var valid = (from line in _lines let match = _pwdRegex.Match(line) let min = int.Parse(match.Groups["min"].Value) let max = int.Parse(match.Groups["max"].Value) let pwdChar = match.Groups["char"].Value[0] let password = match.Groups["password"].Value where (password[min - 1] == pwdChar || password[max - 1] == pwdChar) && password[min - 1] != password[max - 1] select pwdChar ).Count(); Console.WriteLine($"2: Valid passwords {valid}"); } }

Dold text

Kul att borsta av lite kunskaper som inte anvÀnds sÄ ofta

PermalÀnk
Medlem ★
●
Skrivet av GLaDER:

This!

Jag satt tvÄ/tre kvÀllar innan AoC 2020 startade och skrev lösningar till AoC 2019 just för att fÄ till grejer som:

Jag Àr avis, fattar inte hur jag ska kunna anvÀnda min facebookinloggning och OAuth2 för att fÄ min data. Eller snor du bara ditt eget sessionid?

PermalÀnk
Skrivmaskin ★
●

Tanken var att skramla ihop lite C++-kunskaper genom att försöka köra AoC, men det blev alldeles för jobbigt och tidskrÀvande Det fÄr bli ett sprÄkbyte nÀr skolan tar julledigt, varför lite enklare lösningar i Python vikarierar nu i början. MÄlet Àr att stöpa om dessa till mer kompakta, korrekta och lÀttvarierade alternativ framöver ocksÄ, för att bredda de ganska grundlÀggande kunskaperna.

Dag: 1
SprÄk: Python

Dag 1

summation = 2020 inputs = [] split_index = 0 line = 123 file1 = open('input.txt', 'r') line = file1.readline() while line: inputs.append(int(line.split('\n')[0])) line = file1.readline() file1.close() inputs.sort() for a in range(len(inputs)): if inputs[a] >= (summation/2): split_index = a break """for b in range(split_index-1): del 1 for c in range(split_index, len(inputs)): if (inputs[b]+inputs[c]) == summation: print inputs[b]*inputs[c] break""" for b in range(len(inputs)): #del 2 for c in range(len(inputs)): for d in range(len(inputs)): if inputs[b] + inputs[c] + inputs [d] == summation: print(inputs[b] * inputs[c] * inputs [d]) break

Visa mer

Dag: 2
SprÄk: Python

Dag 2

import re inputs = [] OKPW = 0; file1 = open('input2.txt', 'r') line = file1.readline() while line: temp= line.split('\n')[0] inputs.append(re.split(' |, |:|, |-|', temp)) line = file1.readline() file1.close() """for a in inputs: PART 1 counter = 0 for b in a[4]: if b == a[2]: counter += 1 if (counter <= int(a[1])) and (counter >= int(a[0])): OKPW += 1""" for a in inputs: #PART 2 if (a[4][int(a[0])-1] == a[2]) != (a[4][int(a[1])-1] == a[2]): OKPW += 1 print(OKPW)

Visa mer
PermalÀnk
Medlem ★
●
Skrivet av Mordekai:

Jag Àr avis, fattar inte hur jag ska kunna anvÀnda min facebookinloggning och OAuth2 för att fÄ min data. Eller snor du bara ditt eget sessionid?

Är pĂ„ telefonen, men kolla readme i repot. AnvĂ€nder min cookie frĂ„n hemsidan.

Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem
●

Trevligt att man kan hitta en adventskalender som inte innebĂ€r att man ska vara rolig och skriva massa rim för att vinna saker, eller behöva proppa i sig massa choklad Än sĂ„ lĂ€nge har detta varit pĂ„ helt rĂ€tt nivĂ„ för mig att lyckas med utmaningarna och hoppas man hĂ„ller det uppe och kanske lĂ€r sig nĂ„got nytt.

Kommer inte dela med mig av kod, för jag fulkodar sÄ det heter duga, och lÀmnar massa debugg-rester kvar i koden mest för att kunna kontrollera vart det gÄr fel i mina tankebanor, men jag delar gÀrna med mig av huvudsakliga tankebanor sÄ kan folk fÄ tÀnka sjÀlva. Och tack gode gud för Google

Dag: 1
SprÄk: php
Lösning: LÀste in input-filen till en array, och körde en dubbel for loop för att kontrollera summorna pÄ tal 0-99 med tal 0-99, orkade
och dÀr summan blev 2020 sparade vi for-loop vÀrdet och multiplicerade talen. Nackdel att för det rÀtta svaret fÄr jag bÀgge talen, dvs x+y & y+x.

För utamning 2 utökade jag med en for-loop, mycket mer data att hantera och svaret kommer ut som x+y+z & x+z+y & y+x+z & y+z+x& z+x+y & z+y+x

För slutresultatet och svaret spelar det ingen roll, men utrÀkningskraftsmÀssigt Àr det katastrof

Dag: 2
SprÄk: php
Lösning : Börjar med att dela upp input filen i dess bestÄndsdelar, Àven detta i en array, för att sedan kunna skapa en if-statement som kontrollerar om antalet tecken stÀmmer överrens med antalet förekommester i strÀngen. för att avsluta med en $x++.
Del 2 av lösningen fick jag modifiera för att först ta hÀnsyn till noll index vilket spökade för mig.
RÀknandet sker i en if-sats dÀr jag anvÀnde mig av vÀrdet pÄ lÄg/hög för att söka i strÀng om tecken x & y Àr identiska, detta ger vÀrde false och gÄr vidare och kontrollerar om x eller y Àr korrekta, vilket ger $x++;

Visa signatur

Galleri: Super Mario i 44880-bitar
💕💕💕💕

PermalÀnk
Medlem ★
●

Dag: 2
SprÄk: C#

Fick ta hjĂ€lp av att titta pĂ„ en lösning hĂ€r i trĂ„den för att inse att jag var tvungen att byta ut nĂ„gra "+" mot "-". För mig tar de hĂ€r problem 1-2h att lösa men hoppas pĂ„ att fĂ„ ihop nĂ„gon stjĂ€rna till innan det blir för svĂ„rt. Är sjukt frustrerande att veta att jag skulle kunna lösa nĂ„got mycket snabbare i python men jag hĂ„ller fast vid C#.

static void Main() { StreamReader reader = new StreamReader("C:\\Users\\willh\\AoC2020Input\\2.txt"); List<string> input = new List<string>(); string line; while ((line = reader.ReadLine()) != null) { input.Add(line); } Console.WriteLine("First solution"); SolutionOne(input); Console.WriteLine("Second solution"); SolutionTwo(input); Console.ReadKey(); } static void SolutionOne(List<string> input) { int count = 0; foreach (string item in input) { string[] candidate = item.Split(' '); int min = Int32.Parse(candidate[0].Split('-')[0]); int max = Int32.Parse(candidate[0].Split('-')[1]); char letter = char.Parse(candidate[1].Substring(0, 1)); int amount = candidate[2].Split(letter).Length - 1; if (amount >= min && amount <= max) { count += 1; } } Console.WriteLine(count); } static void SolutionTwo(List<string> input) { int count = 0; foreach (string item in input) { string[] candidate = item.Split(' '); int first = Int32.Parse(candidate[0].Split('-')[0]) - 1; int second = Int32.Parse(candidate[0].Split('-')[1]) - 1; char letter = char.Parse(candidate[1].Substring(0, 1)); char letterInPosOne; char letterInPosTwo; try { letterInPosOne = char.Parse(candidate[2].Substring(first, 1)); } catch (Exception) { letterInPosOne = '-'; } try { letterInPosTwo = char.Parse(candidate[2].Substring(second, 1)); } catch (Exception) { letterInPosTwo = '-'; } if (letterInPosOne == letter ^ letterInPosTwo == letter) { count += 1; } } Console.WriteLine(count); }

Dold text
Visa signatur

PrimÀr: R9 3900X | ASUS X570-F Gaming | NH-D15 | 64GB@3200MHz | RTX 3080 10GB | Seasonic 850W | Fractal Define R6 |
Gamla bettan: i5 750@3.8GHz | 8GB | HD5770 | Corsair VS 550W | FD R2 |

PermalÀnk
Medlem ★
●

Började 2019 pÄ detta men höll nog bara ut nÄgra dagar innan jag gav upp. Nytt försök iÄr igen dÀr jag tÀnker spendera mer tid pÄ det. Mina programmeringskunskaper behöver underhÄllas helt enkelt.

Kör pÄ python iÄr dÄ det Àr vÀldigt troligt att det kommer vara primÀr sprÄket under mitt exjobb.

Dag 1
Gick smidigt utan nÄgra större problem

Dag 2
Framför allt fÄ ordning pÄ inputen för att lösa del 1, del 2 satt jag fast med lÀnge och det blev till att kika pÄ lösningar i trÄden för att komma vidare.

Visa signatur

🎼 ⇱ R7 5800X3D ‱ MSI B450 Gaming Pro Carbon ‱ 64 GB Vengeance LPX ‱ Sapphire Nitro+ 7900 XT
⌚ ⇱ AKB Vero ‱ Mekanisk Fjell ‱ HHKB Hybrid Type-S
đŸ–± ⇱ MX Master 3S ‱ Xlite V2
🔈 ⇱ DT 1990 Pro ‱ HD6XX ‱ JDS Labs Element 3

PermalÀnk
Hedersmedlem ★
●

Lite sent ute det hÀr Äret! Men nu har jag fÄtt Dag 1 och Dag 2 lösta. Mitt valda sprÄk Àr Powershell, och dessa lösningar och framtida kommer lÀggas upp pÄ Github: https://github.com/pv2b/aoc2020

Min första lösning för Dag 1 var nog lite vÀl överarbetad nÀr jag tÀnker efter. Det rÀckte egentligen gott och vÀl med nÀstlade for-loopar och en bruteforce-lösning som alla andra hade gjort, istÀllet för som jag, göra en komplicerad lösning som försöker vara O(n^(k-1)) dÀr k Àr antalet termer. D.v.s. min Part1 Àr O(n) och min Part2 Àr O(n^2).

SÄdÀr i efterhand sÄ tror jag att en bÀttre och mer lösning Àn en massa sets fram och tillbaka hade varit att istÀllet sortera listorna och göra binÀra sökningar genom dem. Tror faktiskt jag ska prova den approachen.

Edit: En lösning för Dag 1 med binÀra sökningar och utan flödeskontroll med exception-hantering visade sig vara bÄde renare och mycket snabbare!

Min lösning för Dag 2 var ju superenkel i jÀmförelse.

PermalÀnk
Medlem
●

För er som löser problemen i Python finns detta paket:
https://pypi.org/project/advent-of-code-data/
Mha det kommer man igÄng med sjÀlva problemlösandet lite snabbare

PermalÀnk
Medlem ★
●

Nytt sprÄk men jag gillar det Àn sÄ lÀnge. Jag började idag men det kÀndes ÀndÄ som att jag inte behövde brÄka med syntaxen lika mycket som med andra sprÄk? Jag gör sÀkert en massa saker som en van GolanganvÀndare ser ner pÄ men sÄ Àr det. Tar tacksamt emot tips
Dag: 2
SprÄk: Go
Lösning:

package main import ( "bufio" "fmt" "io/ioutil" "log" "os" "strconv" "strings" ) func check(e error) { if e != nil { panic(e) } } func main() { dat, err := ioutil.ReadFile("filename") check(err) fmt.Print(string(dat)) counter, err := readLines("filename") if err != nil { log.Fatalf("readlines: %s", err) } fmt.Printf("This is fulfilled %d number of times", counter) } func readLines(path string) (int, error) { file, err := os.Open(path) if err != nil { return 0, err } defer file.Close() var counter int var booleancounter bool scanner := bufio.NewScanner(file) for scanner.Scan() { lineStr := scanner.Text() booleancounter = intoParts(lineStr) if booleancounter { counter++ booleancounter = false } } return counter, scanner.Err() } func intoParts(password string) bool { var limits []int possiblevalues := strings.Split(password, ": ") firststring := strings.Split(possiblevalues[0], " ") pass := possiblevalues[1] letter := firststring[1] stringlimits := strings.Split(firststring[0], "-") tempstuff, _ := strconv.Atoi(stringlimits[0]) tempstuff2, _ := strconv.Atoi(stringlimits[1]) limits = append(limits, tempstuff) limits = append(limits, tempstuff2) return passwordVerificationPart2(limits, pass, letter) // change to Part1 for part1 } func passwordVerificationPart1(limits []int, password string, letter string) bool { res := strings.Count(password, letter) fulfillsRequirement := false if res >= limits[0] { if res <= limits[1] { fulfillsRequirement = true } } return fulfillsRequirement } func passwordVerificationPart2(position []int, password string, letter string) bool { fulfillsRequirement := false pos1 := position[0] - 1 pos2 := position[1] - 1 count := 0 if string(password[pos1]) == letter { count++ } if string(password[pos2]) == letter { count++ } if count == 1 { fulfillsRequirement = true } return fulfillsRequirement }

Dold text
PermalÀnk
Medlem ★
●

Kör ocksÄ hÄrt med att lÀra lite Go, avskyr sprÄket det lilla jag gjort

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

func main() { // day 2 f, err := os.Open("files\\day2") if err != nil { log.Fatal(err) } defer f.Close() scanner := bufio.NewScanner(f) var a []string for scanner.Scan() { a = append(a, scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } var pattern = `^(\d+)-(\d+)\s(\w)$` var compiledRegex = regexp.MustCompile(pattern) var matchedCount = 0 var indexOccuredCount = 0 for _, v := range a { var split = strings.Split(v, ":") var submatches = compiledRegex.FindAllStringSubmatch(split[0], -1) var min, _ = strconv.Atoi(submatches[0][1]) var max, _ = strconv.Atoi(submatches[0][2]) var charMatch = submatches[0][3] var rightsideRegexp = regexp.MustCompile(charMatch) amount := rightsideRegexp.FindAllStringSubmatch(split[1], -1) var indexOccurence = rightsideRegexp.FindAllStringSubmatchIndex(split[1], -1) minHit := false maxHit := false for _, v := range indexOccurence { if v[0] == min { minHit = true } else if v[0] == max { maxHit = true } } if minHit && !maxHit { indexOccuredCount++ } if !minHit && maxHit { indexOccuredCount++ } matched := len(amount) >= min && max >= len(amount) if matched { matchedCount++ } fmt.Println("Leftside:", split[0], "Rightside:", split[1], "Min:", min, "Max:", max, "character To Match:", charMatch, "matched:", matched, "indexOccur:", indexOccurence) } fmt.Println("Matched Total: ", matchedCount, "Did not match: ", 1000 - matchedCount, "Index occurence Count: ", indexOccuredCount) }

Dold text
Visa signatur

9950X3D - 3090 - 2x48GB 6000@30

PermalÀnk
Medlem
●

Dag: 3
SprÄk: Golang
Lösning:

package main import ( "bufio" "fmt" "os" ) // Position - type Position struct { X int Y int } // Slope - type Slope struct { Right int Down int } func checkTrees(rows []string, slope Slope) int { position := Position{ X: 0, Y: 0, } count := 0 height := len(rows) width := len(rows[0]) for position.Y < height-1 { position.X += slope.Right position.Y += slope.Down if string(rows[position.Y][position.X%width]) == "#" { count++ } } return count } func getRows() []string { file, _ := os.Open("../input.txt") defer file.Close() scanner := bufio.NewScanner(file) var rows []string for scanner.Scan() { rows = append(rows, scanner.Text()) } return rows } func main() { rows := getRows() fmt.Println("PartOne", checkTrees(rows, Slope{Right: 3, Down: 1})) oneOne := checkTrees(rows, Slope{ Right: 1, Down: 1, }) threeOne := checkTrees(rows, Slope{ Right: 3, Down: 1, }) fiveOne := checkTrees(rows, Slope{ Right: 5, Down: 1, }) sevenOne := checkTrees(rows, Slope{ Right: 7, Down: 1, }) oneTwo := checkTrees(rows, Slope{ Right: 1, Down: 2, }) fmt.Println("PartTwo", oneOne*threeOne*fiveOne*sevenOne*oneTwo) }

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

Dag: 2
SprÄk: Go
Lösning: GitHub

Glöm inte att kika in pÄ vÄr leaderboard: 115994-59705230

Idag fick jag verkligen lida av att jag anvÀnder ett (för mig) nytt sprÄk.

Tydligen Àr bokstaven string[i] en byte, och den fÄr man inte jÀmföra med strÀngen "a". DÄ gav jag mig i kast med att anvÀnda strings.Compare(), men den returnerar ju int, sÄ dÄ fick jag skriva om andra delar av koden istÀllet...

Hua hua. Inte en svÄr uppgift i sig. FÄr vÀl helt enkelt förlika mig med tanken att jag inte kommer vara högst pÄ nÄgra leaderboards i Är.

Dold text

Dag: 3
SprÄk: Go
Lösning: GitHub

Glöm inte att kika in pÄ vÄr leaderboard: 115994-59705230

Vilken skitmorgon. Jag löste problemet "i huvut" direkt.

  1. LÀs in som en [][]string för att kunna iterera smidigt (tog 4 minuter att skriva)

  2. Loopa nedÄt och Ät höger, anvÀnd mod för att "gÄ över till nÀsta grid"

  3. Gör lösningen flexibel, för Part 2 kommer sÀkert handla om att variera input size eller fÀrdvÀg

SÄ satt jag dÀr, med rad 35 i koden ovan...

r = (r + right) % len(grid[0]) # index out of bounds r = (r + right) % len(grid[0])-1 # fel svar r = (r + right) % len(grid[0]-1) # fel svar r = (r + right) % len(grid[0]-2) # fel svar

Nu började jag bli irriterad och la sÀkert 30 minuter pÄ att skriva testkoden och kod för att printa progress. Jag förstod verkligen inte varför det inte fungerade. Tillslut tröttnade jag och skrev om raden.

r = (r + right) % len(grid[0]) # RÄTT -- men jag skrev ju det frĂ„n början!?

Jag mÄste ha gjort fel med down-biten i mitt absolut första försök, och missat att det var dÀr index-felet var. Vansinnigt irriterande...........

Aja, Part 2 var ju enkel iaf....

Dold text
Visa signatur

:(){ :|:& };:

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

PermalÀnk
Medlem ★
●

NÄgonstans har jag lyckats misslyckas med 2:a uppgiften, för trött, har bara sovit 2 timmar. 1:an rÀtt och ger samma delsvar i uppgift 2, troligen blir nÄgot fel nÀr jag hoppar tvÄ rader ner, orkade bara stega nÄgra rader, sÄg rÀtt ut.
Karma till den som ser vad jag gjort fel.

public class Main { public static string Run1() { int _Day = 3; int x = 0; int y = 0; int treecount = 0; string[] inputData = InputData.GetInputArrString(_Day); while (y<inputData.Length) { if (inputData[y].Substring(x,1)=="#") { treecount++; } x = (x + 3) % (inputData[y].Length); y = y + 1; } return treecount.ToString(); } public static string Run2() { int _Day = 3; string[] inputData = InputData.GetInputArrString(_Day); CoordSteps[] steps = new CoordSteps[] { new CoordSteps(1, 1), new CoordSteps(3, 1), new CoordSteps(5, 1), new CoordSteps(7, 1), new CoordSteps(1, 2) }; int[] treeCounts = new int[] { 0, 0, 0, 0, 0 }; int factor = 1; for (int i = 0; i < steps.Length; i++) { int x = 0; int y = 0; int treecount = 0; while (y < inputData.Length) { if (inputData[y].Substring(x, 1) == "#") { treecount++; } x = (x + steps[i].x) % (inputData[y].Length); y = y + steps[i].y; } factor = factor * treecount; treeCounts[i] = treecount; } return factor.ToString(); } } public class CoordSteps { public int x; public int y; public CoordSteps(int _x, int _y) { x = _x; y = _y; }

Dold text
PermalÀnk
Medlem
●
Skrivet av Mordekai:

NÄgonstans har jag lyckats misslyckas med 2:a uppgiften, för trött, har bara sovit 2 timmar. 1:an rÀtt och ger samma delsvar i uppgift 2, troligen blir nÄgot fel nÀr jag hoppar tvÄ rader ner, orkade bara stega nÄgra rader, sÄg rÀtt ut.
Karma till den som ser vad jag gjort fel.

public class Main { public static string Run1() { int _Day = 3; int x = 0; int y = 0; int treecount = 0; string[] inputData = InputData.GetInputArrString(_Day); while (y<inputData.Length) { if (inputData[y].Substring(x,1)=="#") { treecount++; } x = (x + 3) % (inputData[y].Length); y = y + 1; } return treecount.ToString(); } public static string Run2() { int _Day = 3; string[] inputData = InputData.GetInputArrString(_Day); CoordSteps[] steps = new CoordSteps[] { new CoordSteps(1, 1), new CoordSteps(3, 1), new CoordSteps(5, 1), new CoordSteps(7, 1), new CoordSteps(1, 2) }; int[] treeCounts = new int[] { 0, 0, 0, 0, 0 }; int factor = 1; for (int i = 0; i < steps.Length; i++) { int x = 0; int y = 0; int treecount = 0; while (y < inputData.Length) { if (inputData[y].Substring(x, 1) == "#") { treecount++; } x = (x + steps[i].x) % (inputData[y].Length); y = y + steps[i].y; } factor = factor * treecount; treeCounts[i] = treecount; } return factor.ToString(); } } public class CoordSteps { public int x; public int y; public CoordSteps(int _x, int _y) { x = _x; y = _y; }

Dold text

Fel indata pÄ sista..

Nvm, jag har nog inte heller sovit.

PermalÀnk
Medlem ★
●

Dag 3 gick nÀstan att klara med en Python one-liner. Jag fick köra filinlÀsningen separat, men sedan gick det att ta i ett uttryck. Men nu mÄste jag erkÀnna att det börjar bli write-only-kod. 2:1-steget gjorde att jag fick trixa lite men enumerate och skalfaktorer.

from numpy import prod slope = ["".join([line.strip()]*75) for line in open("input")] print([prod([sum([slope[y][x * xs] == '#' for x,y in enumerate(range(0, len(slope), ys))]) for ys, xl in enumerate(l) for xs in xl]) for l in [[[], [3]], [[], [1,3,5,7], [1]]]])

Dold text