🌟 Advent of Code (AoC) 2022 🌟

Permalänk
Medlem

Dag: 6
Språk: Dyalog APL
Ganska kort och enkel uppgift så jag passade på att skriva en lite längre detaljerad beskrivning av hur APL koden fungerar. Uppdaterade även dag 4 med en kortare lösning. Finns även en beskrivning av hur den koden fungerar.

4 14{1-⍨⍺+⍸<\⍺=≢¨⍺∪/⍵}¨⊃⎕NGET'6.txt'1

Dold text

Beskrivning:

APL interpreteras från höger till vänster. Går att köra koden online på https://tryapl.org

4 14{1-⍨⍺+⍸<\⍺=≢¨⍺∪/⍵}¨⊃⎕NGET'6.txt'1

⊃⎕NGET'6.txt'1

Läser in filen och plockar ut första elementet som är innehållet i filen. Resultatet är en array innehållande en textarray. Resten av beskrivningen kommer använda testdata istället för att kunna visa kortare output från dyalog.

test←⊂'bvwbjplbgvbhsrlpgdmjqwftvncz' test ┌────────────────────────────┐ │bvwbjplbgvbhsrlpgdmjqwftvncz│ └────────────────────────────┘

4 14{1-⍨⍺+⍸<\⍺=≢¨⍺∪/⍵}¨test ┌─┬──┐ │5│23│ └─┴──┘

{1-⍨⍺+⍸<\⍺=≢¨⍺∪/⍵}

En dfn eller anonym funktion. Funktioner i apl kan ta en (monadisk) eller två (dyadisk) arrayer som argument. Monadiska funktioner har argumentet till höger (f Y) och dyadiska har argument på båda sidorna (X f Y). { } används för att skapa en dfn. För att komma åt argumenten till funktionen använder man ⍺ - alpha för vänster argument och ⍵ - omega för höger argument. X {⍺ ⍵} Y är alltså samma sak som att skriva X Y. 1 {⍺+⍵+⍺+⍵} 2 blir 1 + 2 + 1 + 2.

4 14{⍺∪/⍵}¨test ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────··· │┌───┬────┬────┬────┬────┬────┬────┬───┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐│┌──────────┬──────────┬──────────┬─────··· ││bvw│vwbj│wbjp│bjpl│jplb│plbg│lbgv│bgv│gvbh│vbhs│bhsr│hsrl│srlp│rlpg│lpgd│pgdm│gdmj│dmjq│mjqw│jqwf│qwft│wftv│ftvn│tvnc│vncz│││bvwjplghsr│vwbjplghsr│wbjplgvhsr│bjplg··· │└───┴────┴────┴────┴────┴────┴────┴───┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘│└──────────┴──────────┴──────────┴─────··· └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────···

f / X är en operatör. Operatörer i apl tar andra funktioner som argument. De finns i både monadisk och dyadisk form. Monadiska operatörer tar funktionen som vänster argument. f/ "reduce" är samma sak som reduce/foldr/foldRight i andra språk. +/1 2 3 4 = 1+2+3+4 = 10. f / X "reduce" kan även modifieras med ytterligare ett argument till vänster Is f / X för att få funktionen n-wise reduce (windowed/sliding reduce). Is anger storleken på fönstret. 2+/1 2 3 4 (parvis) = 1+2 2+3 3+4 = 3 5 7.
∪ Y "unique" plockar ut de unika elementen ur arrayen Y. ∪'aabccc' = 'abc'
{⍺∪/⍵} är en funktion som kör unique på fönster av storlek ⍺ (vänster argument) element på arrayen ⍵ (höger argument).

4 14{≢¨⍺∪/⍵}¨test ┌─────────────────────────────────────────────────┬───────────────────────────────────────────┐ │3 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4│10 10 10 9 10 10 11 12 13 14 14 14 14 14 14│ └─────────────────────────────────────────────────┴───────────────────────────────────────────┘

≢ 'tally" antalet element i vektorn. ≢'abcd' = 4

4 14{⍺=≢¨⍺∪/⍵}¨test ┌─────────────────────────────────────────────────┬─────────────────────────────┐ │0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1│0 0 0 0 0 0 0 0 0 1 1 1 1 1 1│ └─────────────────────────────────────────────────┴─────────────────────────────┘

Vilka element har samma storlek som den valda fönsterstorleken. apl använder 1/0 som true/false

4 14{<\⍺=≢¨⍺∪/⍵}¨test ┌─────────────────────────────────────────────────┬─────────────────────────────┐ │0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0│0 0 0 0 0 0 0 0 0 1 0 0 0 0 0│ └─────────────────────────────────────────────────┴─────────────────────────────┘

Bara det första sanna värdet som är intressant.
f\Y "Scan" ytterligare en operatör. ungefär samma som scanl/scanLeft i andra språk. <\Y kör en scan med "less than" som funktion på arrayen Y. Resultatet blir lite annorlunda än i andra språk när man använder en icke-associativ funktion eftersom apl tolkas från höger till vänster. <\0 1 0 1= (0) (0<1) (0<(1 <0)) (0<(1<(0<1))) = 0 1 0 0.

4 14{⍸<\⍺=≢¨⍺∪/⍵}¨test ┌─┬──┐ │2│10│ └─┴──┘

⍸ Y "where" om Y är en boolesk array får man tillbaka en array innehållande alla index satta till 1 (true) ⍸1 0 1 0 = 1 3

4 14{⍺+⍸<\⍺=≢¨⍺∪/⍵}¨test ┌─┬──┐ │6│24│ └─┴──┘

Eftersom man vill ha fram index efter markören behöver man addera fönsterstorleken ⍺.

4 14{1-⍨⍺+⍸<\⍺=≢¨⍺∪/⍵}¨test ┌─┬──┐ │5│23│ └─┴──┘

-1 för att korrigera off-by-1 fel. APL använder som standard 1 som startindex. (går att ändra till 0, ⎕IO←0)
X f⍨ Y "commute" är en operatör som byter plats på argumenten till funktionen. X f⍨ Y = Y f X.
APL tolkas från höger till vänster. 6+4-1 = 6+(4-1), 6+4÷2 = 6+(4÷2). För att slippa skriva parenteser (6+4)-1, (6+4)÷2 så kan man byta plats på argumenten 6+4-1 = 1-⍨6+4, 6+4÷2 = 2÷⍨6+4.
Går att skriva om 1-⍨ till ¯1+ (addera -1) om man föredrar den stilen.

Dold text
Permalänk
Medlem

Dag: 6
Språk: Go
Lösning:

Försöker idag att använda mera funktioner och snygga upp koden lite. Första delen blev "ful" men andra delen är jag ganska nöjd med.

package main import ( "fmt" "os" ) func first4Unique(inputString string) int { for i, _ := range inputString { if i < 4 { continue } if inputString[i-1] != inputString[i-2] && inputString[i-1] != inputString[i-3] && inputString[i-1] != inputString[i-4] && inputString[i-2] != inputString[i-3] && inputString[i-2] != inputString[i-4] && inputString[i-3] != inputString[i-4] { return i } } return 0 } func checkUnique(onlyUnique []rune, ch rune) int { //Check for duplicates for i, v := range onlyUnique { if v == ch { return i } } return -1 } func startMarkerPos(inputString string) int { //Create an array of unique runes var onlyUnique []rune //Loop through the input string for i, ch := range inputString { //If the rune is in the array, remove everything including the first instance of it if checkUnique(onlyUnique, ch) != -1 { onlyUnique = onlyUnique[checkUnique(onlyUnique, ch)+1:] } //Add the rune to the array onlyUnique = append(onlyUnique, ch) //Check if we are done if len(onlyUnique) == 14 { return i + 1 } } return 0 } func main() { input, _ := os.ReadFile("input.txt") inputString := string(input) fmt.Println(first4Unique(inputString)) fmt.Println(startMarkerPos(inputString)) }

Dold text
Visa signatur

Citera så hittar jag tillbaks och kan ge svar.

Permalänk
Medlem

Dag: 6 (igen)
Språk: C# denna gång
Vi kör AoC på jobbet, så vi jämförde våra resultat, däribland min F#-lösning från imorse:

| Method | groupSize | Mean | Error | StdDev | |------------------ |---------- |-----------:|---------:|---------:| | zyberzeroCSharp | 4 | 5.195 μs | 0.049 μs | 0.04 μs | | zyberzeroFsharp | 4 | 209.1 us | 2.34 us | 2.19 us | | person1First | 4 | 248.9 μs | 4.16 μs | 3.68 μs | | person2 | 4 | 246.5 μs | 2.20 μs | 1.84 μs | | person1OneLine | 4 | 298.2 μs | 5.79 μs | 5.41 μs | |-------------------|-----------|------------|----------|----------| | zyberzeroCSharp | 14 | 11.422 μs | 0.140 μs | 0.12 μs | | person2 | 14 | 1,056.0 μs | 18.92 μs | 23.93 μs | | person1First | 14 | 1,062.4 μs | 20.83 μs | 26.34 μs | | person1OneLine | 14 | 1,159.1 μs | 22.73 μs | 35.39 μs | | zyberzeroFsharp | 14 | 1,715.8 us | 17.56 us | 16.42 us |

Det här är benchmark-koden. Inputdatat är redan i ett fält, data, som sträng. Uint för att jag tänkte först att det kanske var mer performant att skippa brancherna i den inre loopen och köra PopCount på seenChars, och kolla om det var lika många bittar satta som det skulle vara i gruppen. Det var det inte, i fallet med 14 så tog den ca 25 µs att köra istället för den här på runt 11 µs.

var input = data.AsSpan(); for (var i = 0; i < input.Length - groupSize; i++) { uint seenChars = 0x00; for (var j = 0; j < groupSize; j++) { uint charMask = (uint)1 << (input[i+j] - 'a'); if ((seenChars & charMask) > 0) break; seenChars |= charMask; if (j == groupSize - 1) return i + groupSize; } } return -1;

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 zyberzero:

Dag: 6
Språk: F#, idag endast 5 rader - inkl I/O och en blankrad

let findFirstUnique cnt row = (row |> Seq.windowed cnt |> (Seq.findIndex (fun c-> (Set.ofSeq c |> Set.count) = cnt))) + cnt let input = System.IO.File.ReadAllText "input.txt" printfn "Task 1: %i" (findFirstUnique 4 input) printfn "Task 2: %i" (findFirstUnique 14 input)

Dold text

haha, tänkte posta min egen f# men den känns överflödig efter denna. Min är på betydligt fler rader

Jag är så lat så jag skriver bara allt i en lång sekvens, sedan när jag äntligen får svaret så droppar jag allt och fortsätter med mitt liv.

Permalänk
Medlem
Skrivet av GLaDER:

Dag: 6
Språk: Python 3
Lösning: GitHub

Idag gick det än en gång upp för mig varför jag inte är så snabb på sådana här uppgifter.

Jag tror det har att göra med exponering. Jag behöver lusläsa texten för att förstå vad jag ska göra, men trots att jag läste texten förstod jag inte att:

  • Man skulle returnera positionen för slutet av markören (så fick off-by-4-fel två gånger).

  • Man skulle titta på buffern mha ett glidande fönster. Jag trodde uppgiften var att returnera "så fort du sett 4 olika tecken".

Men men, jag ser det som personlighetsträning det är bra att det går lite dåligt ibland.

Dold text

Nu var det ju inte en avancerad uppgift men ändå kul att vi har exakt samma lösning

def find_marker(text, size): for x in range(len(text)): if len(set(text[x:x+size])) == size: print(x+size) break

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 sandos:

haha, tänkte posta min egen f# men den känns överflödig efter denna. Min är på betydligt fler rader

Jag är så lat så jag skriver bara allt i en lång sekvens, sedan när jag äntligen får svaret så droppar jag allt och fortsätter med mitt liv.

Det är inte alls överflödigt, jag kan inte F# (jag har gjort delar av AoC de senaste tre åren, men inget annat) så jag kanske lär mig något nytt Om du kikar på mina tidigare lösningar så lär de ha en hel del outnyttjad förbättringspotential...

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 zyberzero:

Dag: 6 (igen)
Språk: C# denna gång
Vi kör AoC på jobbet, så vi jämförde våra resultat, däribland min F#-lösning från imorse:

| Method | groupSize | Mean | Error | StdDev | |------------------ |---------- |-----------:|---------:|---------:| | zyberzeroCSharp | 4 | 5.195 μs | 0.049 μs | 0.04 μs | | zyberzeroFsharp | 4 | 209.1 us | 2.34 us | 2.19 us | | person1First | 4 | 248.9 μs | 4.16 μs | 3.68 μs | | person2 | 4 | 246.5 μs | 2.20 μs | 1.84 μs | | person1OneLine | 4 | 298.2 μs | 5.79 μs | 5.41 μs | |-------------------|-----------|------------|----------|----------| | zyberzeroCSharp | 14 | 11.422 μs | 0.140 μs | 0.12 μs | | person2 | 14 | 1,056.0 μs | 18.92 μs | 23.93 μs | | person1First | 14 | 1,062.4 μs | 20.83 μs | 26.34 μs | | person1OneLine | 14 | 1,159.1 μs | 22.73 μs | 35.39 μs | | zyberzeroFsharp | 14 | 1,715.8 us | 17.56 us | 16.42 us |

Det här är benchmark-koden. Inputdatat är redan i ett fält, data, som sträng. Uint för att jag tänkte först att det kanske var mer performant att skippa brancherna i den inre loopen och köra PopCount på seenChars, och kolla om det var lika många bittar satta som det skulle vara i gruppen. Det var det inte, i fallet med 14 så tog den ca 25 µs att köra istället för den här på runt 11 µs.

var input = data.AsSpan(); for (var i = 0; i < input.Length - groupSize; i++) { uint seenChars = 0x00; for (var j = 0; j < groupSize; j++) { uint charMask = (uint)1 << (input[i+j] - 'a'); if ((seenChars & charMask) > 0) break; seenChars |= charMask; if (j == groupSize - 1) return i + groupSize; } } return -1;

Dold text

Måste hitta hakan jag tappade någonstans. Borde ta tag i att lära mig jobba direkt med bitar.

Edit: Var väldigt snarlik min egen lösning förutom hur man håller reda på unika värden. Var lätt att implementera i min egen lösning. Och snabbt går det!

Före och efter!

| Method | neededUniquesInARow | Mean | Error | StdDev | Median | Allocated | |------------ |-------------------- |-----------:|----------:|----------:|-----------:|----------:| | Solution | 4 | 30.119 us | 0.6015 us | 1.5311 us | 30.575 us | 232 B | | BitSolution | 4 | 2.735 us | 0.0091 us | 0.0085 us | 2.735 us | - | | Solution | 14 | 67.880 us | 1.2734 us | 1.1289 us | 68.039 us | 392 B | | BitSolution | 14 | 6.057 us | 0.1174 us | 0.1304 us | 6.011 us | - | | Solution | 16 | 132.197 us | 2.5510 us | 2.3862 us | 132.721 us | 392 B | | BitSolution | 16 | 12.902 us | 0.2798 us | 0.8250 us | 12.373 us | - |

Dold text
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: 6
Språk: VB.Net

Imports System.IO Module Program Sub Main(args As String()) Dim input = File.ReadAllText("input.txt") Console.WriteLine("Part1: " & findIndex(input, 4)) Console.WriteLine("Part1: " & findIndex(input, 14)) End Sub Function findIndex(input As String, markerLength As Integer) As Integer Dim window(markerLength - 1) As String For i = 0 To input.Length - 1 Step 1 window(i Mod markerLength) = input(i) If i >= markerLength - 1 And window.Distinct().Count = markerLength Then Return i + 1 End If Next Return -1 End Function End Module

Dold text
Permalänk
Medlem

Dag: 6
Språk: C
Lösning:

#include <stdio.h> #include <stdlib.h> int findUnique(char *data, int count) { static char * start; int i, j; if (!start) start = data; if (*data == '\0' || *data == '\n') return 0; for (i = 0;i < count - 1; i++) { for (j = i + 1; j < count; j++) { if (data[i] == data[j]) return findUnique(&data[1], count); } } return (int) ((data - start) + count); } int main() { FILE *f; char *line = NULL; ssize_t len = 0; f = fdopen(0, "r"); if (getline(&line, &len, f) < 0) printf("No input"); printf("Start of packet:\t%d\n", findUnique(line, 4)); printf("Start of message:\t%d\n", findUnique(line, 14)); free(line); fclose(f); }

Dold text
Missade först att det fanns en del 2. Lade till lösning för den.
Permalänk
Medlem
Skrivet av fatbob:

Dag: 6
Språk: C
Lösning:

#include <stdio.h> #include <stdlib.h> int check(char *data) { static char * start; if (!start) start = data; if (*data == '\0' || *data == '\n') return 0; if (data[0] == data[1] || data[0] == data[2] || data[0] == data[3] || data[1] == data[2] || data[1] == data[3] || data[2] == data[3]) return check(&data[1]); else return (int) ((data - start) + 4); } int main() { FILE *f; char *line = NULL; ssize_t len = 0; f = fdopen(0, "r"); if (getline(&line, &len, f) < 0) printf("No input"); printf("%d\n", check(line)); free(line); }

Dold text

Hur löser du andra delen? Om jag inte tänker fel borde det väl bli (14 välj 2) = 91 kombinationen att kolla?

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Medlem

Någon mer som får skriva tid för AoC? Vi har fått 30 minuter per dag

Permalänk
Medlem
Skrivet av johanandersson:

Hur löser du andra delen? Om jag inte tänker fel borde det väl bli (14 välj 2) = 91 kombinationen att kolla?

Jo missade det först... Gör detta med en tvååring som stökar runt samtidigt Lade till lösning i originalinlägget. Fick bli en loop, vet inte om den är helt optimal.

Permalänk
Medlem
Skrivet av johanandersson:

Hur löser du andra delen? Om jag inte tänker fel borde det väl bli (14 välj 2) = 91 kombinationen att kolla?

Två for loopar löser det. Kod som genererar kod

Permalänk
Medlem

Dag 5 Java.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; public class day5 { public static void main(String[] args) throws IOException { Path filePath = Path.of("src/input05.txt"); ArrayList<String> day5ContentList; day5ContentList = fileToList(filePath); ArrayList<ArrayDeque<Character>> cratePiles = new ArrayList<>(); ArrayDeque<Character> one = new ArrayDeque<>(); ArrayDeque<Character> two = new ArrayDeque<>(); ArrayDeque<Character> three = new ArrayDeque<>(); ArrayDeque<Character> four = new ArrayDeque<>(); ArrayDeque<Character> five = new ArrayDeque<>(); ArrayDeque<Character> six = new ArrayDeque<>(); ArrayDeque<Character> seven = new ArrayDeque<>(); ArrayDeque<Character> eight = new ArrayDeque<>(); ArrayDeque<Character> nine = new ArrayDeque<>(); ArrayList<String> instructionsList = getStrings(day5ContentList); ArrayList<Instruction> instructions = instructions(instructionsList); cratePiles.add(one); cratePiles.add(two); cratePiles.add(three); cratePiles.add(four); cratePiles.add(five); cratePiles.add(six); cratePiles.add(seven); cratePiles.add(eight); cratePiles.add(nine); addCratesToCratePiles(day5ContentList, cratePiles); //moveTheCrates(cratePiles, instructions); moveTheCrates2(cratePiles, instructions); System.out.println(getFirstCrate(cratePiles)); } private static String getFirstCrate(ArrayList<ArrayDeque<Character>> cratePiles) { StringBuilder builder = new StringBuilder(); for (ArrayDeque<Character> cratePile : cratePiles) { builder.append(cratePile.getFirst()); } return builder.toString(); } private static void moveTheCrates(ArrayList<ArrayDeque<Character>> cratePiles, ArrayList<Instruction> instructions) { for (Instruction instruction : instructions) { for (int j = 0; j < instruction.move; j++) { cratePiles.get(instruction.to - 1).addFirst(cratePiles.get(instruction.from - 1).getFirst()); cratePiles.get(instruction.from - 1).removeFirst(); } } } private static void moveTheCrates2(ArrayList<ArrayDeque<Character>> cratePiles, ArrayList<Instruction> instructions) { ArrayDeque<Character> temp = new ArrayDeque<>(); for (Instruction instruction : instructions) { for (int j = 0; j < instruction.move; j++) { temp.addFirst(cratePiles.get(instruction.from - 1).getFirst()); cratePiles.get(instruction.from - 1).removeFirst(); } for (int j = 0; j < instruction.move; j++) { cratePiles.get(instruction.to - 1).addFirst(temp.getFirst()); temp.removeFirst(); } } } private static ArrayList<Instruction> instructions(ArrayList<String> instructionsList) { ArrayList<Instruction> instructions = new ArrayList<>(); for (String s : instructionsList) { Instruction instruction = new Instruction(); for (int j = 0; j < s.length(); j++) { String[] tempArray = s.split(","); instruction.move = Integer.parseInt(tempArray[0]); instruction.from = Integer.parseInt(tempArray[1]); instruction.to = Integer.parseInt(tempArray[2]); } instructions.add(instruction); } return instructions; } private static ArrayList<String> getStrings(ArrayList<String> day5ContentList) { ArrayList<String> instructionsList = new ArrayList<>(); for (int i = 10; i < day5ContentList.size(); i++) { String temp = day5ContentList.get(i); temp = temp.replace("move ", ""); temp = temp.replace(" from ", ","); temp = temp.replace(" to ", ","); instructionsList.add(temp); } return instructionsList; } private static void addCratesToCratePiles(ArrayList<String> day5ContentList, ArrayList<ArrayDeque<Character>> deques) { for (int i = 0; i < 8; i++) { for (int j = 0; j < day5ContentList.get(i).length(); j++) { if (day5ContentList.get(8).charAt(j) == '1' && day5ContentList.get(i).charAt(j) != ' ') deques.get(0).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '2' && day5ContentList.get(i).charAt(j) != ' ') deques.get(1).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '3' && day5ContentList.get(i).charAt(j) != ' ') deques.get(2).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '4' && day5ContentList.get(i).charAt(j) != ' ') deques.get(3).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '5' && day5ContentList.get(i).charAt(j) != ' ') deques.get(4).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '6' && day5ContentList.get(i).charAt(j) != ' ') deques.get(5).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '7' && day5ContentList.get(i).charAt(j) != ' ') deques.get(6).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '8' && day5ContentList.get(i).charAt(j) != ' ') deques.get(7).add(day5ContentList.get(i).charAt(j)); else if (day5ContentList.get(8).charAt(j) == '9' && day5ContentList.get(i).charAt(j) != ' ') deques.get(8).add(day5ContentList.get(i).charAt(j)); } } } private static ArrayList<String> fileToList(Path filePath) throws IOException { String content = Files.readString(filePath); StringBuilder builder = new StringBuilder(); ArrayList<String> tempList = new ArrayList<>(); for (int i = 0; i < content.length(); i++) { if (content.charAt(i) != ('\n')) { builder.append(content.charAt(i)); } else { tempList.add(builder.toString()); builder = new StringBuilder(); } } return tempList; } } class Instruction{ int move; int from; int to; @Override public String toString() { return "Instruction{" + "move=" + move + ", from=" + from + ", to=" + to + '}'; } }

Dold text

Dag 6 Java.

import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.IntStream; public class day6 { public static void main(String[] args) throws IOException { String content = Files.readString(Path.of("src/input06.txt")); int part1 = 4; int part2 = 14; System.out.println(findDistinctChars(content, part2)); } private static int findDistinctChars(String content, int numberOfChars) { int firstHit = IntStream.range(numberOfChars, content.length()) .filter(s -> content.substring(s, s+ numberOfChars).chars().distinct().count() == numberOfChars) .findFirst().getAsInt(); return numberOfChars + firstHit; } }

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

Permalänk
Medlem
Skrivet av Mats Myntsamlare:

Dag 3, Uppgift 2:
Språk: Python

Lite tråkig lösning kanske men it gets the job done.

with open("3.txt") as f: data = f.read().splitlines() data = [ord(({*a} & {*b} & {*c}).pop()) for a, b, c in zip(*[data[n::3] for n in [0, 1, 2]])] sum(s - (96 if s > 96 else 38) for s in data)

Dold text

Känner mig ganska ödmjuk efter att ha sett denna lösningen..

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

Permalänk
Medlem

Dag: 6
Språk: Scala/Java19
Testade att skriva en vektoriserad variant i Scala/Java19. På en intel nuc i7-8559U så tar del 1 ~0.8μs och del 2 ~6μs utan io. Inte kollat vad som går "långsamt" ännu. Men t.ex. så saknas popcnt i AVX2.
Jag skrev ingen kod för att ta hand om svansen så programmet är inte korrekt för alla fil/fönsterstorlekar..

[info] Benchmark (windowSize) Mode Cnt Score Error Units [info] FindMarkerBenchmark.findMarkerVectorized 4 avgt 5 0,729 ± 0,021 us/op [info] FindMarkerBenchmark.findMarkerVectorized 14 avgt 5 5,623 ± 0,267 us/op

object Day06: def findMarker(memSeg: MemorySegment, size: Long, windowSize: Int): Int = val bs = ByteVector.SPECIES_PREFERRED val is = IntVector.SPECIES_PREFERRED val sv = ByteVector.broadcast(bs, 'a'.toInt.toByte) val cv = IntVector.broadcast(is, windowSize) val ov = IntVector.broadcast(is, 1) var i = 0 var curr = ByteVector.fromMemorySegment(bs, memSeg, i, ByteOrder.nativeOrder()).sub(sv) while i < size - bs.length() do val next = ByteVector.fromMemorySegment(bs, memSeg, i + bs.length(), ByteOrder.nativeOrder()).sub(sv) var iv0 = ov.lanewise(VectorOperators.LSHL, curr.convert(VectorOperators.B2I, 0)) var iv1 = ov.lanewise(VectorOperators.LSHL, curr.convert(VectorOperators.B2I, 1)) var iv2 = ov.lanewise(VectorOperators.LSHL, curr.convert(VectorOperators.B2I, 2)) var iv3 = ov.lanewise(VectorOperators.LSHL, curr.convert(VectorOperators.B2I, 3)) val iv2copy = iv2 val iv3copy = iv3 var wv0 = iv0 var wv1 = iv1 var j = 0 while j < windowSize - 1 do iv0 = iv0.slice(1, iv1) iv1 = iv1.slice(1, iv2) if windowSize <= 4 then iv2 = iv2.slice(1) else iv2 = iv2.slice(1, iv3) if windowSize > 8 then iv3 = iv3.slice(1) wv0 = wv0.lanewise(VectorOperators.XOR, iv0) wv1 = wv1.lanewise(VectorOperators.XOR, iv1) j += 1 var cv0 = wv0.lanewise(VectorOperators.BIT_COUNT).compare(VectorOperators.EQ, cv) var cv1 = wv1.lanewise(VectorOperators.BIT_COUNT).compare(VectorOperators.EQ, cv) if cv0.anyTrue() then return i + cv0.firstTrue() + windowSize else if cv1.anyTrue() then return i + is.length() + cv1.firstTrue() + windowSize iv0 = iv2copy iv1 = iv3copy iv2 = ov.lanewise(VectorOperators.LSHL, next.convert(VectorOperators.B2I, 0)) iv3 = ov.lanewise(VectorOperators.LSHL, next.convert(VectorOperators.B2I, 1)) wv0 = iv0 wv1 = iv1 j = 0 while j < windowSize - 1 do iv0 = iv0.slice(1, iv1) iv1 = iv1.slice(1, iv2) if windowSize <= 4 then iv2 = iv2.slice(1) else iv2 = iv2.slice(1, iv3) if windowSize > 8 then iv3 = iv3.slice(1) wv0 = wv0.lanewise(VectorOperators.XOR, iv0) wv1 = wv1.lanewise(VectorOperators.XOR, iv1) j += 1 cv0 = wv0.lanewise(VectorOperators.BIT_COUNT).compare(VectorOperators.EQ, cv) cv1 = wv1.lanewise(VectorOperators.BIT_COUNT).compare(VectorOperators.EQ, cv) if cv0.anyTrue() then return i + is.length() * 2 + cv0.firstTrue() + windowSize else if cv1.anyTrue() then return i + is.length() * 3 + cv1.firstTrue() + windowSize curr = next i += bs.length() -1 def main(args: Array[String]): Unit = val filePath = """6.txt""" val path = Path.of(filePath) val fileSize = Files.size(path) val memSession = MemorySession.openConfined() val memSeg = FileChannel.open(path).map(FileChannel.MapMode.READ_ONLY, 0, fileSize, memSession) println(findMarker(memSeg, fileSize, 4)) println(findMarker(memSeg, fileSize, 14)) memSession.close()

Dold text
Tog bort en helt felaktig fusk optimering (går snabbt om man bara gör halva jobbet och har tur)..
Permalänk
Medlem

Får korrekt svar på testdata, men vägrar ge mig rätt på själva input. Jag blir galen.

Edit: Kan på riktigt inte hitta vad som blir galet, snart ger jag upp

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
Datavetare

Dag: 7
Språk: Go

package main import "fmt" type filesystem map[string]*directory type directory struct { dirs filesystem files []file size int } type file struct { size int } func makeDir() *directory { return &directory{filesystem{}, []file{}, 0} } func fillDirSize(d *directory) { dirSz := 0 for _, f := range d.files { dirSz += f.size } for _, d := range d.dirs { fillDirSize(d) dirSz += d.size } d.size = dirSz } func parseFilesystem(input []string) *directory { rootFs := makeDir() i := 1 parseDir(rootFs, input, &i) fillDirSize(rootFs) return rootFs } func parseDir(d *directory, input []string, row *int) { var sz int var name string for *row < len(input) { cmd := input[*row] *row++ if cmd == "$ ls" || cmd[:3] == "dir" { continue } if cmd == "$ cd .." { return } if _, err := fmt.Sscanf(cmd, "$ cd %s", &name); err == nil { newDir := makeDir() d.dirs[name] = newDir parseDir(newDir, input, row) } else if _, err := fmt.Sscanf(cmd, "%d %s", &sz, &name); err == nil { (*d).files = append(d.files, file{sz}) } else { panic("Failed to parse input") } } } func visitDirs(d directory, visitor func(directory)) { for _, subDir := range d.dirs { visitDirs(*subDir, visitor) } visitor(d) } func (d directory) sumSizeWithLimit(maxSize int) int { sum := 0 visitDirs(d, func(d directory) { if d.size <= maxSize { sum += d.size } }) return sum } func (d directory) bestFitForCap(total, required int) int { used := d.size free := total - used needToFreeUp := required - free bestFit := used visitDirs(d, func(d directory) { if d.size >= needToFreeUp && bestFit > d.size { bestFit = d.size } }) return bestFit } func day7(input []string) { fs := parseFilesystem(input) fmt.Println(fs.sumSizeWithLimit(100000)) fmt.Println(fs.bestFitForCap(70000000, 30000000)) } func init() { Solutions[7] = day7 }

Lösning
Visa signatur

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

Permalänk

Dag: 7
Språk: Python

I dag var jag tvungen att byta version på Ubuntu i WSL för att få Python 3.10. Denna uppgift blev så mycket enklare med match...

from collections import defaultdict import os contains = defaultdict(lambda:[]) sizes = defaultdict(lambda:0) def read_dirs(pwd = ""): for l in open("input07").readlines(): match l.strip().split(): case ['$', 'cd', d]: match d: case "..": pwd = os.path.dirname(pwd) case d: pwd = os.path.join(pwd, d) case ['$', 'ls']: pass case ['dir', d]: contains[pwd].append(os.path.join(pwd, d)) case [size, _]: sizes[pwd] += int(size) def add_subdirs(d): for i in contains[d]: add_subdirs(i) sizes[d] += sizes[i] read_dirs() add_subdirs("/") print(sum([sizes[d] for d in sizes if sizes[d] < 100000]), min([s for s in sizes.values() if 70000000 - sizes['/'] + s >= 30000000]))

Dold text
Permalänk
Medlem

Okej, jag ber er om lite hjälp här. Hur mycket off är jag på del 1? Jag får 1232219 som svar med denna input.

Jga har steppat igenom koden och jag hittar inga problem, så vet inte om det är jag som misstolkar något eller om det blir något parsingfel. Funkade som sagt på testdatat.

$ cd / $ ls dir dpbwg dir dvwfscw dir hccpl dir jsgbg dir lhjmzsl 63532 mwvbpw.mmg 239480 npj dir pngs dir qhs 303649 shvgmwn.vhv 236905 sjrrgd.phh dir sntcp dir sqs $ cd dpbwg $ ls dir dgh 100731 dpbwg dir rpwnv $ cd dgh $ ls 197049 lhjmzsl.hzj $ cd .. $ cd rpwnv $ ls 10702 qsgv.fmf $ cd .. $ cd .. $ cd dvwfscw $ ls dir bvg dir fbfjs 115450 gjftb.mgd dir gsmnprgz dir hdwdcvv dir mhjtrlqz 75437 qsctddrw 171722 qsgv.zqz $ cd bvg $ ls 56335 cgtzb.szt 139481 shvgmwn.vhv 255200 wzqlgr.mhl $ cd .. $ cd fbfjs $ ls 252977 hmcj 256083 mbgfn.pmh dir qsgv $ cd qsgv $ ls 271506 dchsdfz.bbg 202650 hmcj 32623 lqgmfcp 57614 mgp.fbn 220895 qwzqrrq.wjf $ cd .. $ cd .. $ cd gsmnprgz $ ls dir dzcsldzw dir hrjmfd dir lcwv dir sdp 62355 zrncdmd.lmj $ cd dzcsldzw $ ls dir hmcj $ cd hmcj $ ls 151947 hgtzldbg $ cd .. $ cd .. $ cd hrjmfd $ ls dir drjlhbqf 65599 npj $ cd drjlhbqf $ ls 263623 hzfmzs.mlj 13866 npj 173713 wtnf.qps $ cd .. $ cd .. $ cd lcwv $ ls 44150 hmcj.lds 200694 mpbb $ cd .. $ cd sdp $ ls dir gcwjj dir qzdczvwn $ cd gcwjj $ ls 149603 qsgv.srr $ cd .. $ cd qzdczvwn $ ls dir gnvbm 291187 hmcj.rgm dir msdt dir mwvbpw dir shpr $ cd gnvbm $ ls 259516 dpbwg 120868 mpbb dir vqrcd $ cd vqrcd $ ls 306804 fqqg 34290 mtctcdgd.nmb $ cd .. $ cd .. $ cd msdt $ ls 168438 mpbb 67435 nbqcrdjs $ cd .. $ cd mwvbpw $ ls dir btzqzvbl 308719 npj $ cd btzqzvbl $ ls 177311 bdnrf.jtw 122356 qwhmd.vcd 169153 vzzzccg.hlb $ cd .. $ cd .. $ cd shpr $ ls 290591 nblzc.nmp $ cd .. $ cd .. $ cd .. $ cd .. $ cd hdwdcvv $ ls 96864 hmcj.tjn $ cd .. $ cd mhjtrlqz $ ls dir bzrbsfjp 238772 fpggqqj dir hqzgs 20155 shvgmwn.vhv $ cd bzrbsfjp $ ls 313691 fnscbhfc 17630 llwfdzgg.bsp dir lthr $ cd lthr $ ls 237053 bhbbzt.bmt $ cd .. $ cd .. $ cd hqzgs $ ls 295258 gllsgr.nnz 70743 ptpqd dir rnmsdpmj 205022 rpqh.rpn 158287 tsm.tdq 154025 wmfwr.bcm $ cd rnmsdpmj $ ls 218043 dpbwg.mls 149072 mbgfn.pmh 89388 mwvbpw.qfm 57207 rszcvm.mqc $ cd .. $ cd .. $ cd .. $ cd .. $ cd hccpl $ ls dir blqdjh dir hfqw dir qsgv $ cd blqdjh $ ls dir fbpg $ cd fbpg $ ls 231357 dpbwg $ cd .. $ cd .. $ cd hfqw $ ls 210898 fjblghm.gtg 286252 hmcj.dgz 258768 mpbb 225743 qsgv.pqf 191717 shvgmwn.vhv $ cd .. $ cd qsgv $ ls dir bslqpr dir dpbwg dir lhjmzsl 210707 npj 64435 qhpnrbhq dir rpj 301426 shvgmwn.vhv dir stbgbrw dir vhzmg $ cd bslqpr $ ls 4365 dpbwg dir fpj dir lhjmzsl dir lncmt dir mwvbpw 35725 ncbjtpcb.svf dir njhsmb dir rjzsddlw 41533 shvgmwn.vhv $ cd fpj $ ls 88146 dpbwg $ cd .. $ cd lhjmzsl $ ls 57400 fzngdsh.sbn 198711 mnqz.npt $ cd .. $ cd lncmt $ ls 192228 qsgv.jss $ cd .. $ cd mwvbpw $ ls 65217 hmcj.drs $ cd .. $ cd njhsmb $ ls 157177 dpbwg.wsl 10919 jhfs $ cd .. $ cd rjzsddlw $ ls dir cftp dir flcfwml dir vpdbl $ cd cftp $ ls 89075 dpbwg 57259 mbgfn.pmh 237771 zwglrhh $ cd .. $ cd flcfwml $ ls 51498 pbbgmqn.gfg $ cd .. $ cd vpdbl $ ls 98690 npj $ cd .. $ cd .. $ cd .. $ cd dpbwg $ ls dir wlmdbjh $ cd wlmdbjh $ ls dir pmldd 245468 rdgldw.tzb $ cd pmldd $ ls 145032 mwvbpw.tpc $ cd .. $ cd .. $ cd .. $ cd lhjmzsl $ ls 233642 dpbwg.tbq dir frsggjl dir hmcj dir jmhzlq dir jvdtpzd 251765 npj 169647 shvgmwn.vhv $ cd frsggjl $ ls dir dshv dir fqvpc dir lhjmzsl 313045 npj dir rngqmwgr $ cd dshv $ ls dir pptfqn 85609 wpgz dir zfmqls $ cd pptfqn $ ls 258817 mtctcdgd.nmb 39899 npj $ cd .. $ cd zfmqls $ ls 119006 hlw.mzg 295107 wstvdqn.wgw $ cd .. $ cd .. $ cd fqvpc $ ls dir pqpf $ cd pqpf $ ls 312566 mpbb $ cd .. $ cd .. $ cd lhjmzsl $ ls 157261 dpbwg.bgc 76700 mpbb $ cd .. $ cd rngqmwgr $ ls 42626 dpbwg.dtt 78765 gjsnmzn.fzb $ cd .. $ cd .. $ cd hmcj $ ls 166183 jntzn dir qsgv 254851 rbcgrdr.vqp $ cd qsgv $ ls 256449 dhj.mrm 49207 fbrhl 69922 lhjmzsl 121778 tpdvnb $ cd .. $ cd .. $ cd jmhzlq $ ls dir bbpqsf 245813 ftw.jwq $ cd bbpqsf $ ls 169373 mwvbpw.tjt $ cd .. $ cd .. $ cd jvdtpzd $ ls dir brfln dir dpbwg 263586 fsqzfhj.bzh 85956 lhjmzsl dir mwvbpw dir tcgwhp 91473 vjgt.twz 200413 zlnnrrpn.qqd $ cd brfln $ ls 65066 fpvnm $ cd .. $ cd dpbwg $ ls dir jtqwgc dir lrdjdqn 281885 mpbb $ cd jtqwgc $ ls 219022 spbqn $ cd .. $ cd lrdjdqn $ ls 116830 hmcj.ptr dir mwvbpw $ cd mwvbpw $ ls 251737 ccqlb $ cd .. $ cd .. $ cd .. $ cd mwvbpw $ ls 226329 fztjpfb $ cd .. $ cd tcgwhp $ ls dir grmsl $ cd grmsl $ ls dir hmcj 197995 wzqlr.fqj $ cd hmcj $ ls 239775 mbgfn.pmh dir rrvccjp 95381 shvgmwn.vhv $ cd rrvccjp $ ls dir qsgv $ cd qsgv $ ls 192956 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd rpj $ ls dir bwc dir ctjwjlzc dir dpbwg dir lhjmzsl 249767 npj dir wqmlz $ cd bwc $ ls 56181 hmcj.dhd 105111 hvw 63869 rqw.srq 8030 shvgmwn.vhv dir stff $ cd stff $ ls dir gsjsc $ cd gsjsc $ ls 514 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd ctjwjlzc $ ls 39823 qjgnjm.hzn $ cd .. $ cd dpbwg $ ls dir lhqrjr $ cd lhqrjr $ ls 179949 tmvl.zqf $ cd .. $ cd .. $ cd lhjmzsl $ ls 305735 shvgmwn.vhv $ cd .. $ cd wqmlz $ ls 141757 fstftggh $ cd .. $ cd .. $ cd stbgbrw $ ls 196003 dpbwg.shs dir gbr 104091 hmcj 232145 lhjmzsl.nnc dir lhv dir qqqbtpq 51208 qsgv.dbm 235090 vbpzgnr dir vqmnsdrt $ cd gbr $ ls 101809 npj 121922 pcqrmmlt.ghh 125915 ptffhc 128293 wdz.nsd $ cd .. $ cd lhv $ ls 75506 qtwlnvv.nbm 28413 rbwbp $ cd .. $ cd qqqbtpq $ ls 96300 gdf $ cd .. $ cd vqmnsdrt $ ls 146229 mwvbpw.qrc 189540 plldv.vtv dir rtng $ cd rtng $ ls 42730 hrbs.zpc $ cd .. $ cd .. $ cd .. $ cd vhzmg $ ls dir dcmjvhtt dir dpbwg $ cd dcmjvhtt $ ls 85508 hhlctr.bbs 296657 lhjmzsl.zjt 255803 mbgfn.pmh 170803 mtctcdgd.nmb $ cd .. $ cd dpbwg $ ls 156142 hmcj dir lhjmzsl $ cd lhjmzsl $ ls 13590 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd jsgbg $ ls 202682 hmcj.tbl $ cd .. $ cd lhjmzsl $ ls 197308 lhjmzsl $ cd .. $ cd pngs $ ls 115979 hfpzqf.hjw dir lhjmzsl 125414 mpbb dir mwbffchr $ cd lhjmzsl $ ls 55108 hwhsjr $ cd .. $ cd mwbffchr $ ls 249138 czv.lgd $ cd .. $ cd .. $ cd qhs $ ls 108106 ccmhjzp.ppf 197911 shvgmwn.vhv $ cd .. $ cd sntcp $ ls dir cvgtwsbw dir dpbwg dir dqbzfcq dir gfvtsjmz dir ljsmjsp dir mwvbpw dir phfqzwp dir rpsnfndl dir rrqwcbqm dir rtv dir vnvft dir vqcvbncp dir vsgjds $ cd cvgtwsbw $ ls dir bprbr dir bpw dir dpbwg dir jvjs dir mwvbpw dir nbfzn dir pcr dir rhgltw $ cd bprbr $ ls 126107 dpbwg.jqq 140931 ljhc.gsm 120326 pnjv dir wbrb $ cd wbrb $ ls 28887 ccr.rvd dir gwfpgws 77898 mwvbpw.qrc 280487 pbfbtb.qjp $ cd gwfpgws $ ls 205904 dgm 313203 vpgzr.jfw $ cd .. $ cd .. $ cd .. $ cd bpw $ ls dir lgstpgrn 173334 npj $ cd lgstpgrn $ ls dir rngr $ cd rngr $ ls 291856 czjz.fzp 246123 mpbb 200301 qqfvpnz $ cd .. $ cd .. $ cd .. $ cd dpbwg $ ls 265739 mtctcdgd.nmb dir mwvbpw 76505 ntjn.mnp 227157 pqznms 312879 qzlmsht $ cd mwvbpw $ ls 144523 dpbwg.lgr 39441 mmtrnzqw.mnv 285772 mpbb 306936 rpmgcmqd.qht $ cd .. $ cd .. $ cd jvjs $ ls 51134 lsnvhd.gsj $ cd .. $ cd mwvbpw $ ls 125428 hmcj.bvd 40162 npj 117658 pmzfj.crj $ cd .. $ cd nbfzn $ ls 11429 mwvbpw.swl 5582 qsgv.jrm $ cd .. $ cd pcr $ ls dir dpbwg 95858 mtctcdgd.nmb $ cd dpbwg $ ls dir wmsb $ cd wmsb $ ls 154498 npj $ cd .. $ cd .. $ cd .. $ cd rhgltw $ ls 188447 qsgv.rzs $ cd .. $ cd .. $ cd dpbwg $ ls 261326 cjfszwr 88528 glp.fgc dir lhjmzsl 270470 shvgmwn.vhv 310081 vdhmgb dir wsc $ cd lhjmzsl $ ls 245410 dnnfljbs $ cd .. $ cd wsc $ ls dir lhjmzsl 311302 mbs.tqc 309985 mpbb dir qgpqzr 20812 vhcc.wpw $ cd lhjmzsl $ ls dir dpbwg $ cd dpbwg $ ls 273340 fmvbcphl.crp $ cd .. $ cd .. $ cd qgpqzr $ ls dir fdwgdhrf $ cd fdwgdhrf $ ls 275421 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd .. $ cd dqbzfcq $ ls 30930 njnz $ cd .. $ cd gfvtsjmz $ ls 290134 mbgfn.pmh 154689 vql $ cd .. $ cd ljsmjsp $ ls 59894 hwggw.rpd 26336 mbgfn.pmh dir mvzchpq dir mwvbpw 122061 zlcr.jsw $ cd mvzchpq $ ls 294618 lhjmzsl.bqm dir mwvbpw 204294 nljhbh.cfc 79337 ntvt.dbw $ cd mwvbpw $ ls dir njwcqcjh 309971 nqdv.vmp $ cd njwcqcjh $ ls 155159 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd mwvbpw $ ls 43451 lhjmzsl.vjt $ cd .. $ cd .. $ cd mwvbpw $ ls 3144 phvjzs.prf $ cd .. $ cd phfqzwp $ ls dir hmcj dir hnnrw 196279 lhjmzsl 90948 mwvbpw.hvm 275082 shvgmwn.vhv $ cd hmcj $ ls 4346 mtctcdgd.nmb $ cd .. $ cd hnnrw $ ls dir lhjmzsl 103070 qsbrf.tpv dir rdf $ cd lhjmzsl $ ls 158692 dpbwg.bvl $ cd .. $ cd rdf $ ls dir gpj dir lbgpm $ cd gpj $ ls 136508 shvgmwn.vhv $ cd .. $ cd lbgpm $ ls 154457 ccpvr 232065 lhjmzsl 43787 npj 189920 rpgmvv 96362 tlmvpc $ cd .. $ cd .. $ cd .. $ cd .. $ cd rpsnfndl $ ls dir pcbtmcwf $ cd pcbtmcwf $ ls dir qsgv $ cd qsgv $ ls 45662 npj $ cd .. $ cd .. $ cd .. $ cd rrqwcbqm $ ls dir vjm $ cd vjm $ ls 263137 npj $ cd .. $ cd .. $ cd rtv $ ls dir lhjmzsl dir pcwsn dir qsgv dir vvzbsg $ cd lhjmzsl $ ls dir qzsjhsfn $ cd qzsjhsfn $ ls 26909 mbgfn.pmh $ cd .. $ cd .. $ cd pcwsn $ ls 160033 ftz.nbg 145165 wgdjsgsb.hhm $ cd .. $ cd qsgv $ ls dir jqm 136209 mbgfn.pmh 79664 mghdlnh.chv $ cd jqm $ ls 222831 npj $ cd .. $ cd .. $ cd vvzbsg $ ls 84246 dpbwg.tsq $ cd .. $ cd .. $ cd vnvft $ ls dir crqrl dir scdvzsd $ cd crqrl $ ls 13185 dpbwg.twz 109021 qcdqnhg.jjj $ cd .. $ cd scdvzsd $ ls dir hmcj $ cd hmcj $ ls 252155 npj $ cd .. $ cd .. $ cd .. $ cd vqcvbncp $ ls 72128 crnhb dir ddz dir dvhzvdn dir ffsbcmg dir gfs dir jghlb dir llq dir pvn dir rvqmmjgr $ cd ddz $ ls 232302 gdfqpnj.nhf 274940 lhjmzsl.mzv 286217 mpbb $ cd .. $ cd dvhzvdn $ ls 273183 cfnqn.qpz $ cd .. $ cd ffsbcmg $ ls 6544 mtctcdgd.nmb 52511 wndzt.lqb $ cd .. $ cd gfs $ ls 228312 mwvbpw.tdj dir rqjrfzgt 62100 shc.rtj 313984 szsplzq.dpd dir tqtnp $ cd rqjrfzgt $ ls 296460 bvp 272324 mbgfn.pmh 221044 npj 110232 qvcszzv $ cd .. $ cd tqtnp $ ls 98376 tzwh 212247 wzjj.scp $ cd .. $ cd .. $ cd jghlb $ ls dir ddrmsv $ cd ddrmsv $ ls 252143 mbgfn.pmh $ cd .. $ cd .. $ cd llq $ ls dir lhjmzsl 67341 mbgfn.pmh 155159 npj dir qsgv dir vcvnzc $ cd lhjmzsl $ ls 151930 ssldrsf.mzm $ cd .. $ cd qsgv $ ls 233702 ztdmtqb.mhf $ cd .. $ cd vcvnzc $ ls 168179 lhjmzsl.cwf $ cd .. $ cd .. $ cd pvn $ ls 240160 lbd.slf $ cd .. $ cd rvqmmjgr $ ls 24809 gwgcrzp.zhj dir hmcj dir lhjmzsl dir mwvbpw 121997 nbmf 77886 ntp dir qcqrgdm $ cd hmcj $ ls 126073 dpbwg.lhh dir jchccghv dir lhjmzsl 144075 qsgv.lbw 288076 swrngbsq.qzw $ cd jchccghv $ ls 310277 mpbb $ cd .. $ cd lhjmzsl $ ls 193576 bwsz.crv 16002 mbgfn.pmh 57961 mtctcdgd.nmb $ cd .. $ cd .. $ cd lhjmzsl $ ls dir bsfwmcz dir dpbwg 121640 mwvbpw dir pmrfvzw dir qsgv $ cd bsfwmcz $ ls dir fjqqblz 51952 gqbj.fwd dir hmcj dir lctt 81316 lhjmzsl.qqr 6372 mbgfn.pmh 22669 shvgmwn.vhv 130990 zgq.fpv $ cd fjqqblz $ ls 26064 zrqrnb.nwf $ cd .. $ cd hmcj $ ls 14385 mwvbpw.vzq $ cd .. $ cd lctt $ ls 137397 fbgbs.fjf dir jgbzqzq dir qrr 272639 qsgv.vwm $ cd jgbzqzq $ ls 135320 mpbb $ cd .. $ cd qrr $ ls dir dpbwg dir mwvbpw 54143 pnsl.bbm dir wbpzpg $ cd dpbwg $ ls 250653 shvgmwn.vhv $ cd .. $ cd mwvbpw $ ls 2682 fhdh.hmt $ cd .. $ cd wbpzpg $ ls dir bqshqpvm 141398 mtctcdgd.nmb 130729 vtnfmjqm.mgp $ cd bqshqpvm $ ls 252449 shvgmwn.vhv $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd dpbwg $ ls 82216 gwjwmcbf.gwl $ cd .. $ cd pmrfvzw $ ls dir mwvbpw dir wtzgjspz dir zmb $ cd mwvbpw $ ls 16736 wbzjzz.mqq $ cd .. $ cd wtzgjspz $ ls dir vjb $ cd vjb $ ls 301763 drchphtm $ cd .. $ cd .. $ cd zmb $ ls 201978 mdj dir qgnffw 147889 qzbmwpnm.gjp $ cd qgnffw $ ls 17740 cwz.dhs 222345 mbgfn.pmh 81554 npj 206597 tsnlnzh $ cd .. $ cd .. $ cd .. $ cd qsgv $ ls dir mmsnzr $ cd mmsnzr $ ls 160502 tgrztm $ cd .. $ cd .. $ cd .. $ cd mwvbpw $ ls 40049 qmmdv 313418 qsgv.srp $ cd .. $ cd qcqrgdm $ ls 202848 wtl.qbj $ cd .. $ cd .. $ cd .. $ cd vsgjds $ ls 138690 npj 22984 tpfbnz.sgj $ cd .. $ cd .. $ cd sqs $ ls dir zms $ cd zms $ ls 152096 cvtqph.wwp dir mmwzg $ cd mmwzg $ ls 100870 qsgv

Dold text
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
Skrivet av Mickur:

Okej, jag ber er om lite hjälp här. Hur mycket off är jag på del 1? Jag får 1232219 som svar med denna input.

Jga har steppat igenom koden och jag hittar inga problem, så vet inte om det är jag som misstolkar något eller om det blir något parsingfel. Funkade som sagt på testdatat.

$ cd / $ ls dir dpbwg dir dvwfscw dir hccpl dir jsgbg dir lhjmzsl 63532 mwvbpw.mmg 239480 npj dir pngs dir qhs 303649 shvgmwn.vhv 236905 sjrrgd.phh dir sntcp dir sqs $ cd dpbwg $ ls dir dgh 100731 dpbwg dir rpwnv $ cd dgh $ ls 197049 lhjmzsl.hzj $ cd .. $ cd rpwnv $ ls 10702 qsgv.fmf $ cd .. $ cd .. $ cd dvwfscw $ ls dir bvg dir fbfjs 115450 gjftb.mgd dir gsmnprgz dir hdwdcvv dir mhjtrlqz 75437 qsctddrw 171722 qsgv.zqz $ cd bvg $ ls 56335 cgtzb.szt 139481 shvgmwn.vhv 255200 wzqlgr.mhl $ cd .. $ cd fbfjs $ ls 252977 hmcj 256083 mbgfn.pmh dir qsgv $ cd qsgv $ ls 271506 dchsdfz.bbg 202650 hmcj 32623 lqgmfcp 57614 mgp.fbn 220895 qwzqrrq.wjf $ cd .. $ cd .. $ cd gsmnprgz $ ls dir dzcsldzw dir hrjmfd dir lcwv dir sdp 62355 zrncdmd.lmj $ cd dzcsldzw $ ls dir hmcj $ cd hmcj $ ls 151947 hgtzldbg $ cd .. $ cd .. $ cd hrjmfd $ ls dir drjlhbqf 65599 npj $ cd drjlhbqf $ ls 263623 hzfmzs.mlj 13866 npj 173713 wtnf.qps $ cd .. $ cd .. $ cd lcwv $ ls 44150 hmcj.lds 200694 mpbb $ cd .. $ cd sdp $ ls dir gcwjj dir qzdczvwn $ cd gcwjj $ ls 149603 qsgv.srr $ cd .. $ cd qzdczvwn $ ls dir gnvbm 291187 hmcj.rgm dir msdt dir mwvbpw dir shpr $ cd gnvbm $ ls 259516 dpbwg 120868 mpbb dir vqrcd $ cd vqrcd $ ls 306804 fqqg 34290 mtctcdgd.nmb $ cd .. $ cd .. $ cd msdt $ ls 168438 mpbb 67435 nbqcrdjs $ cd .. $ cd mwvbpw $ ls dir btzqzvbl 308719 npj $ cd btzqzvbl $ ls 177311 bdnrf.jtw 122356 qwhmd.vcd 169153 vzzzccg.hlb $ cd .. $ cd .. $ cd shpr $ ls 290591 nblzc.nmp $ cd .. $ cd .. $ cd .. $ cd .. $ cd hdwdcvv $ ls 96864 hmcj.tjn $ cd .. $ cd mhjtrlqz $ ls dir bzrbsfjp 238772 fpggqqj dir hqzgs 20155 shvgmwn.vhv $ cd bzrbsfjp $ ls 313691 fnscbhfc 17630 llwfdzgg.bsp dir lthr $ cd lthr $ ls 237053 bhbbzt.bmt $ cd .. $ cd .. $ cd hqzgs $ ls 295258 gllsgr.nnz 70743 ptpqd dir rnmsdpmj 205022 rpqh.rpn 158287 tsm.tdq 154025 wmfwr.bcm $ cd rnmsdpmj $ ls 218043 dpbwg.mls 149072 mbgfn.pmh 89388 mwvbpw.qfm 57207 rszcvm.mqc $ cd .. $ cd .. $ cd .. $ cd .. $ cd hccpl $ ls dir blqdjh dir hfqw dir qsgv $ cd blqdjh $ ls dir fbpg $ cd fbpg $ ls 231357 dpbwg $ cd .. $ cd .. $ cd hfqw $ ls 210898 fjblghm.gtg 286252 hmcj.dgz 258768 mpbb 225743 qsgv.pqf 191717 shvgmwn.vhv $ cd .. $ cd qsgv $ ls dir bslqpr dir dpbwg dir lhjmzsl 210707 npj 64435 qhpnrbhq dir rpj 301426 shvgmwn.vhv dir stbgbrw dir vhzmg $ cd bslqpr $ ls 4365 dpbwg dir fpj dir lhjmzsl dir lncmt dir mwvbpw 35725 ncbjtpcb.svf dir njhsmb dir rjzsddlw 41533 shvgmwn.vhv $ cd fpj $ ls 88146 dpbwg $ cd .. $ cd lhjmzsl $ ls 57400 fzngdsh.sbn 198711 mnqz.npt $ cd .. $ cd lncmt $ ls 192228 qsgv.jss $ cd .. $ cd mwvbpw $ ls 65217 hmcj.drs $ cd .. $ cd njhsmb $ ls 157177 dpbwg.wsl 10919 jhfs $ cd .. $ cd rjzsddlw $ ls dir cftp dir flcfwml dir vpdbl $ cd cftp $ ls 89075 dpbwg 57259 mbgfn.pmh 237771 zwglrhh $ cd .. $ cd flcfwml $ ls 51498 pbbgmqn.gfg $ cd .. $ cd vpdbl $ ls 98690 npj $ cd .. $ cd .. $ cd .. $ cd dpbwg $ ls dir wlmdbjh $ cd wlmdbjh $ ls dir pmldd 245468 rdgldw.tzb $ cd pmldd $ ls 145032 mwvbpw.tpc $ cd .. $ cd .. $ cd .. $ cd lhjmzsl $ ls 233642 dpbwg.tbq dir frsggjl dir hmcj dir jmhzlq dir jvdtpzd 251765 npj 169647 shvgmwn.vhv $ cd frsggjl $ ls dir dshv dir fqvpc dir lhjmzsl 313045 npj dir rngqmwgr $ cd dshv $ ls dir pptfqn 85609 wpgz dir zfmqls $ cd pptfqn $ ls 258817 mtctcdgd.nmb 39899 npj $ cd .. $ cd zfmqls $ ls 119006 hlw.mzg 295107 wstvdqn.wgw $ cd .. $ cd .. $ cd fqvpc $ ls dir pqpf $ cd pqpf $ ls 312566 mpbb $ cd .. $ cd .. $ cd lhjmzsl $ ls 157261 dpbwg.bgc 76700 mpbb $ cd .. $ cd rngqmwgr $ ls 42626 dpbwg.dtt 78765 gjsnmzn.fzb $ cd .. $ cd .. $ cd hmcj $ ls 166183 jntzn dir qsgv 254851 rbcgrdr.vqp $ cd qsgv $ ls 256449 dhj.mrm 49207 fbrhl 69922 lhjmzsl 121778 tpdvnb $ cd .. $ cd .. $ cd jmhzlq $ ls dir bbpqsf 245813 ftw.jwq $ cd bbpqsf $ ls 169373 mwvbpw.tjt $ cd .. $ cd .. $ cd jvdtpzd $ ls dir brfln dir dpbwg 263586 fsqzfhj.bzh 85956 lhjmzsl dir mwvbpw dir tcgwhp 91473 vjgt.twz 200413 zlnnrrpn.qqd $ cd brfln $ ls 65066 fpvnm $ cd .. $ cd dpbwg $ ls dir jtqwgc dir lrdjdqn 281885 mpbb $ cd jtqwgc $ ls 219022 spbqn $ cd .. $ cd lrdjdqn $ ls 116830 hmcj.ptr dir mwvbpw $ cd mwvbpw $ ls 251737 ccqlb $ cd .. $ cd .. $ cd .. $ cd mwvbpw $ ls 226329 fztjpfb $ cd .. $ cd tcgwhp $ ls dir grmsl $ cd grmsl $ ls dir hmcj 197995 wzqlr.fqj $ cd hmcj $ ls 239775 mbgfn.pmh dir rrvccjp 95381 shvgmwn.vhv $ cd rrvccjp $ ls dir qsgv $ cd qsgv $ ls 192956 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd rpj $ ls dir bwc dir ctjwjlzc dir dpbwg dir lhjmzsl 249767 npj dir wqmlz $ cd bwc $ ls 56181 hmcj.dhd 105111 hvw 63869 rqw.srq 8030 shvgmwn.vhv dir stff $ cd stff $ ls dir gsjsc $ cd gsjsc $ ls 514 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd ctjwjlzc $ ls 39823 qjgnjm.hzn $ cd .. $ cd dpbwg $ ls dir lhqrjr $ cd lhqrjr $ ls 179949 tmvl.zqf $ cd .. $ cd .. $ cd lhjmzsl $ ls 305735 shvgmwn.vhv $ cd .. $ cd wqmlz $ ls 141757 fstftggh $ cd .. $ cd .. $ cd stbgbrw $ ls 196003 dpbwg.shs dir gbr 104091 hmcj 232145 lhjmzsl.nnc dir lhv dir qqqbtpq 51208 qsgv.dbm 235090 vbpzgnr dir vqmnsdrt $ cd gbr $ ls 101809 npj 121922 pcqrmmlt.ghh 125915 ptffhc 128293 wdz.nsd $ cd .. $ cd lhv $ ls 75506 qtwlnvv.nbm 28413 rbwbp $ cd .. $ cd qqqbtpq $ ls 96300 gdf $ cd .. $ cd vqmnsdrt $ ls 146229 mwvbpw.qrc 189540 plldv.vtv dir rtng $ cd rtng $ ls 42730 hrbs.zpc $ cd .. $ cd .. $ cd .. $ cd vhzmg $ ls dir dcmjvhtt dir dpbwg $ cd dcmjvhtt $ ls 85508 hhlctr.bbs 296657 lhjmzsl.zjt 255803 mbgfn.pmh 170803 mtctcdgd.nmb $ cd .. $ cd dpbwg $ ls 156142 hmcj dir lhjmzsl $ cd lhjmzsl $ ls 13590 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd jsgbg $ ls 202682 hmcj.tbl $ cd .. $ cd lhjmzsl $ ls 197308 lhjmzsl $ cd .. $ cd pngs $ ls 115979 hfpzqf.hjw dir lhjmzsl 125414 mpbb dir mwbffchr $ cd lhjmzsl $ ls 55108 hwhsjr $ cd .. $ cd mwbffchr $ ls 249138 czv.lgd $ cd .. $ cd .. $ cd qhs $ ls 108106 ccmhjzp.ppf 197911 shvgmwn.vhv $ cd .. $ cd sntcp $ ls dir cvgtwsbw dir dpbwg dir dqbzfcq dir gfvtsjmz dir ljsmjsp dir mwvbpw dir phfqzwp dir rpsnfndl dir rrqwcbqm dir rtv dir vnvft dir vqcvbncp dir vsgjds $ cd cvgtwsbw $ ls dir bprbr dir bpw dir dpbwg dir jvjs dir mwvbpw dir nbfzn dir pcr dir rhgltw $ cd bprbr $ ls 126107 dpbwg.jqq 140931 ljhc.gsm 120326 pnjv dir wbrb $ cd wbrb $ ls 28887 ccr.rvd dir gwfpgws 77898 mwvbpw.qrc 280487 pbfbtb.qjp $ cd gwfpgws $ ls 205904 dgm 313203 vpgzr.jfw $ cd .. $ cd .. $ cd .. $ cd bpw $ ls dir lgstpgrn 173334 npj $ cd lgstpgrn $ ls dir rngr $ cd rngr $ ls 291856 czjz.fzp 246123 mpbb 200301 qqfvpnz $ cd .. $ cd .. $ cd .. $ cd dpbwg $ ls 265739 mtctcdgd.nmb dir mwvbpw 76505 ntjn.mnp 227157 pqznms 312879 qzlmsht $ cd mwvbpw $ ls 144523 dpbwg.lgr 39441 mmtrnzqw.mnv 285772 mpbb 306936 rpmgcmqd.qht $ cd .. $ cd .. $ cd jvjs $ ls 51134 lsnvhd.gsj $ cd .. $ cd mwvbpw $ ls 125428 hmcj.bvd 40162 npj 117658 pmzfj.crj $ cd .. $ cd nbfzn $ ls 11429 mwvbpw.swl 5582 qsgv.jrm $ cd .. $ cd pcr $ ls dir dpbwg 95858 mtctcdgd.nmb $ cd dpbwg $ ls dir wmsb $ cd wmsb $ ls 154498 npj $ cd .. $ cd .. $ cd .. $ cd rhgltw $ ls 188447 qsgv.rzs $ cd .. $ cd .. $ cd dpbwg $ ls 261326 cjfszwr 88528 glp.fgc dir lhjmzsl 270470 shvgmwn.vhv 310081 vdhmgb dir wsc $ cd lhjmzsl $ ls 245410 dnnfljbs $ cd .. $ cd wsc $ ls dir lhjmzsl 311302 mbs.tqc 309985 mpbb dir qgpqzr 20812 vhcc.wpw $ cd lhjmzsl $ ls dir dpbwg $ cd dpbwg $ ls 273340 fmvbcphl.crp $ cd .. $ cd .. $ cd qgpqzr $ ls dir fdwgdhrf $ cd fdwgdhrf $ ls 275421 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd .. $ cd dqbzfcq $ ls 30930 njnz $ cd .. $ cd gfvtsjmz $ ls 290134 mbgfn.pmh 154689 vql $ cd .. $ cd ljsmjsp $ ls 59894 hwggw.rpd 26336 mbgfn.pmh dir mvzchpq dir mwvbpw 122061 zlcr.jsw $ cd mvzchpq $ ls 294618 lhjmzsl.bqm dir mwvbpw 204294 nljhbh.cfc 79337 ntvt.dbw $ cd mwvbpw $ ls dir njwcqcjh 309971 nqdv.vmp $ cd njwcqcjh $ ls 155159 mtctcdgd.nmb $ cd .. $ cd .. $ cd .. $ cd mwvbpw $ ls 43451 lhjmzsl.vjt $ cd .. $ cd .. $ cd mwvbpw $ ls 3144 phvjzs.prf $ cd .. $ cd phfqzwp $ ls dir hmcj dir hnnrw 196279 lhjmzsl 90948 mwvbpw.hvm 275082 shvgmwn.vhv $ cd hmcj $ ls 4346 mtctcdgd.nmb $ cd .. $ cd hnnrw $ ls dir lhjmzsl 103070 qsbrf.tpv dir rdf $ cd lhjmzsl $ ls 158692 dpbwg.bvl $ cd .. $ cd rdf $ ls dir gpj dir lbgpm $ cd gpj $ ls 136508 shvgmwn.vhv $ cd .. $ cd lbgpm $ ls 154457 ccpvr 232065 lhjmzsl 43787 npj 189920 rpgmvv 96362 tlmvpc $ cd .. $ cd .. $ cd .. $ cd .. $ cd rpsnfndl $ ls dir pcbtmcwf $ cd pcbtmcwf $ ls dir qsgv $ cd qsgv $ ls 45662 npj $ cd .. $ cd .. $ cd .. $ cd rrqwcbqm $ ls dir vjm $ cd vjm $ ls 263137 npj $ cd .. $ cd .. $ cd rtv $ ls dir lhjmzsl dir pcwsn dir qsgv dir vvzbsg $ cd lhjmzsl $ ls dir qzsjhsfn $ cd qzsjhsfn $ ls 26909 mbgfn.pmh $ cd .. $ cd .. $ cd pcwsn $ ls 160033 ftz.nbg 145165 wgdjsgsb.hhm $ cd .. $ cd qsgv $ ls dir jqm 136209 mbgfn.pmh 79664 mghdlnh.chv $ cd jqm $ ls 222831 npj $ cd .. $ cd .. $ cd vvzbsg $ ls 84246 dpbwg.tsq $ cd .. $ cd .. $ cd vnvft $ ls dir crqrl dir scdvzsd $ cd crqrl $ ls 13185 dpbwg.twz 109021 qcdqnhg.jjj $ cd .. $ cd scdvzsd $ ls dir hmcj $ cd hmcj $ ls 252155 npj $ cd .. $ cd .. $ cd .. $ cd vqcvbncp $ ls 72128 crnhb dir ddz dir dvhzvdn dir ffsbcmg dir gfs dir jghlb dir llq dir pvn dir rvqmmjgr $ cd ddz $ ls 232302 gdfqpnj.nhf 274940 lhjmzsl.mzv 286217 mpbb $ cd .. $ cd dvhzvdn $ ls 273183 cfnqn.qpz $ cd .. $ cd ffsbcmg $ ls 6544 mtctcdgd.nmb 52511 wndzt.lqb $ cd .. $ cd gfs $ ls 228312 mwvbpw.tdj dir rqjrfzgt 62100 shc.rtj 313984 szsplzq.dpd dir tqtnp $ cd rqjrfzgt $ ls 296460 bvp 272324 mbgfn.pmh 221044 npj 110232 qvcszzv $ cd .. $ cd tqtnp $ ls 98376 tzwh 212247 wzjj.scp $ cd .. $ cd .. $ cd jghlb $ ls dir ddrmsv $ cd ddrmsv $ ls 252143 mbgfn.pmh $ cd .. $ cd .. $ cd llq $ ls dir lhjmzsl 67341 mbgfn.pmh 155159 npj dir qsgv dir vcvnzc $ cd lhjmzsl $ ls 151930 ssldrsf.mzm $ cd .. $ cd qsgv $ ls 233702 ztdmtqb.mhf $ cd .. $ cd vcvnzc $ ls 168179 lhjmzsl.cwf $ cd .. $ cd .. $ cd pvn $ ls 240160 lbd.slf $ cd .. $ cd rvqmmjgr $ ls 24809 gwgcrzp.zhj dir hmcj dir lhjmzsl dir mwvbpw 121997 nbmf 77886 ntp dir qcqrgdm $ cd hmcj $ ls 126073 dpbwg.lhh dir jchccghv dir lhjmzsl 144075 qsgv.lbw 288076 swrngbsq.qzw $ cd jchccghv $ ls 310277 mpbb $ cd .. $ cd lhjmzsl $ ls 193576 bwsz.crv 16002 mbgfn.pmh 57961 mtctcdgd.nmb $ cd .. $ cd .. $ cd lhjmzsl $ ls dir bsfwmcz dir dpbwg 121640 mwvbpw dir pmrfvzw dir qsgv $ cd bsfwmcz $ ls dir fjqqblz 51952 gqbj.fwd dir hmcj dir lctt 81316 lhjmzsl.qqr 6372 mbgfn.pmh 22669 shvgmwn.vhv 130990 zgq.fpv $ cd fjqqblz $ ls 26064 zrqrnb.nwf $ cd .. $ cd hmcj $ ls 14385 mwvbpw.vzq $ cd .. $ cd lctt $ ls 137397 fbgbs.fjf dir jgbzqzq dir qrr 272639 qsgv.vwm $ cd jgbzqzq $ ls 135320 mpbb $ cd .. $ cd qrr $ ls dir dpbwg dir mwvbpw 54143 pnsl.bbm dir wbpzpg $ cd dpbwg $ ls 250653 shvgmwn.vhv $ cd .. $ cd mwvbpw $ ls 2682 fhdh.hmt $ cd .. $ cd wbpzpg $ ls dir bqshqpvm 141398 mtctcdgd.nmb 130729 vtnfmjqm.mgp $ cd bqshqpvm $ ls 252449 shvgmwn.vhv $ cd .. $ cd .. $ cd .. $ cd .. $ cd .. $ cd dpbwg $ ls 82216 gwjwmcbf.gwl $ cd .. $ cd pmrfvzw $ ls dir mwvbpw dir wtzgjspz dir zmb $ cd mwvbpw $ ls 16736 wbzjzz.mqq $ cd .. $ cd wtzgjspz $ ls dir vjb $ cd vjb $ ls 301763 drchphtm $ cd .. $ cd .. $ cd zmb $ ls 201978 mdj dir qgnffw 147889 qzbmwpnm.gjp $ cd qgnffw $ ls 17740 cwz.dhs 222345 mbgfn.pmh 81554 npj 206597 tsnlnzh $ cd .. $ cd .. $ cd .. $ cd qsgv $ ls dir mmsnzr $ cd mmsnzr $ ls 160502 tgrztm $ cd .. $ cd .. $ cd .. $ cd mwvbpw $ ls 40049 qmmdv 313418 qsgv.srp $ cd .. $ cd qcqrgdm $ ls 202848 wtl.qbj $ cd .. $ cd .. $ cd .. $ cd vsgjds $ ls 138690 npj 22984 tpfbnz.sgj $ cd .. $ cd .. $ cd sqs $ ls dir zms $ cd zms $ ls 152096 cvtqph.wwp dir mmwzg $ cd mmwzg $ ls 100870 qsgv

Dold text

Edit: Sorry! Missade helt att du var på del1

Svaret med min lösning blir ~10% större

Permalänk
Medlem
Skrivet av survivalcode:

Svaret med min lösning blir ~5 ggr större

Det var inte nådigt... Pekar mig förhoppningsvis i rätt riktning, tror jag vet vad det kan vara jag missar!

Edit: Nope, verkar ha fel där med...

Edit 2: 10% var ju inte mycket... Måste vara något edge-case någonstans som blir galet isf? Hmmm...

Edit 3: Kan det vara... Säg att det inte är... Nope, fortfarande samma resultat, vafan är det jag missar...

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 6 kotin

fun run() { val input = File("src/input/day6.txt").readText() println(findNonRepearting(input, 4)) println(findNonRepearting(input, 14)) } private fun findNonRepearting(input: String, markerLength: Int): Int { val buffer: ArrayDeque<Char> = ArrayDeque() for((index, c) in input.withIndex()) { val indexOfAlreadyExisting = buffer.indexOf(c) if (indexOfAlreadyExisting != -1) { repeat(indexOfAlreadyExisting + 1) {buffer.removeFirst()} } buffer.addLast(c) if (buffer.size == markerLength) { return index + 1 } } throw IllegalArgumentException("Nu blev det tokigt") } //Annan lösning private fun findNonRepeartingAlternative(input: String, markerLength: Int): Int { val buffer: ArrayDeque<Char> = ArrayDeque() for((index, c) in input.withIndex()) { buffer.addLast(c) if(buffer.size == markerLength + 1) { buffer.removeFirst() } if(buffer.distinct().size >= markerLength) { return index + 1 } } throw IllegalArgumentException("Nu blev det tokigt") }

Dold text
Permalänk

@Mickur: I mitt indata förekom samma directory-namn på olika ställen i trädet. Kan du hantera det?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

@Mickur: I mitt indata förekom samma directory-namn på olika ställen i trädet. Kan du hantera det?

Jag tror och hoppas det! :')

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: 7
Språk: Node (js)

Kommentar: Jag fnissade lite när jag i min metod antingen skickar tillbaka en number eller en hashmap.
Kändes väldigt busigt att skicka så olika typer av return från en metod.

import { data, testData } from "../input/day7.js"; function solve(rows, solution) { rows = rows.split('\n'); const currFolders = []; const hash = {}; for (const line of rows) { const command = line.split(' '); if (command[0] === '$') { if (command[1] === 'cd') { if (command[2] === '..') currFolders.pop() else currFolders.push(command[2]); } } else if(command[0].match(/[0-9]+/g)) { const num = parseInt(command[0]); for (let i = 0; i < currFolders.length; i++) { // / a e const folderName = currFolders.slice(0, i+1).join(''); if (!hash[folderName]) hash[folderName] = num; else hash[folderName] += num; } } } let sum = 0; for (const key in hash) { const num = hash[key]; if (num <= 100000) { sum += num; } } if (solution === 'a') return sum; if (solution === 'b') return hash; } const solutionA = () => { const sum = solve(data, 'a'); console.log(sum); } const solutionB = () => { const hash = solve(data, 'b'); const totalDiskSpace = 70000000; const neededDiskSpace = 30000000; const freeDiskSpace = totalDiskSpace - hash['/']; const missingDiskSpace = neededDiskSpace - freeDiskSpace; let smallestFittingFolder = Number.POSITIVE_INFINITY; for (const key in hash) { const num = hash[key] if (num >= missingDiskSpace && num < smallestFittingFolder) smallestFittingFolder = num; } console.log(smallestFittingFolder); } export { solutionA, solutionB }

Dold text
Skrivet av Mickur:

Jag tror och hoppas det! :')

Skicka upp din lösning så ser vi om vi kan hitta felet gemensamt!

Permalänk
Medlem
Skrivet av Jaevel:

Dag: 7
Språk: Node (js)

Kommentar: Jag fnissade lite när jag i min metod antingen skickar tillbaka en number eller en hashmap.
Kändes väldigt busigt att skicka så olika typer av return från en metod.

import { data, testData } from "../input/day7.js"; function solve(rows, solution) { rows = rows.split('\n'); const currFolders = []; const hash = {}; for (const line of rows) { const command = line.split(' '); if (command[0] === '$') { if (command[1] === 'cd') { if (command[2] === '..') currFolders.pop() else currFolders.push(command[2]); } } else if(command[0].match(/[0-9]+/g)) { const num = parseInt(command[0]); for (let i = 0; i < currFolders.length; i++) { // / a e const folderName = currFolders.slice(0, i+1).join(''); if (!hash[folderName]) hash[folderName] = num; else hash[folderName] += num; } } } let sum = 0; for (const key in hash) { const num = hash[key]; if (num <= 100000) { sum += num; } } if (solution === 'a') return sum; if (solution === 'b') return hash; } const solutionA = () => { const sum = solve(data, 'a'); console.log(sum); } const solutionB = () => { const hash = solve(data, 'b'); const totalDiskSpace = 70000000; const neededDiskSpace = 30000000; const freeDiskSpace = totalDiskSpace - hash['/']; const missingDiskSpace = neededDiskSpace - freeDiskSpace; let smallestFittingFolder = Number.POSITIVE_INFINITY; for (const key in hash) { const num = hash[key] if (num >= missingDiskSpace && num < smallestFittingFolder) smallestFittingFolder = num; } console.log(smallestFittingFolder); } export { solutionA, solutionB }

Dold text

Skicka upp din lösning så ser vi om vi kan hitta felet gemensamt!

Den är ju brutalt hemsk just nu för att jag försöker hitta felet, men go ahead...

Console.WriteLine("Mickur's Advent of Code 2022 - Day 7!"); // Setup var input = File.ReadAllLines("input.txt"); var seenDirectories = new List<string>(); var seenFiles = new Dictionary<string, int>(); var currentLocation = ""; var directories = new Dictionary<string, int>(); foreach (var line in input) { // Ignore these lines if (line == "$ ls") continue; if (line.StartsWith("dir ")) continue; var output = line.Split(' '); // Commands... if (output[0] == "$") { // Change Location if (output[1] == "cd") { if (output[2].StartsWith('/')) { currentLocation = output[2]; continue; } if (output[2] == "..") { var temp = currentLocation.Split('/'); if (temp.Length <= 2) { currentLocation = "/"; continue; } currentLocation = ""; for (var i = 1; i < temp.Length - 1; i++) { currentLocation += $"/{temp[i]}"; } continue; } if(currentLocation == "/") currentLocation += $"{output[2]}"; else currentLocation += $"/{output[2]}"; } } // Output else { var dirName = currentLocation == "/" ? "/" : $"{currentLocation}/"; var fileName = currentLocation == "/" ? $"/{output[1]}" : $"{currentLocation}/{output[1]}"; if(!seenDirectories.Contains(dirName)) seenDirectories.Add(dirName); if (seenFiles.Keys.Contains(fileName)) continue; if (int.TryParse(output[0], out var result)) { if (directories.ContainsKey(dirName)) { directories[dirName] += result; seenFiles.Add(fileName, result); } else { directories[dirName] = result; seenFiles.Add(fileName, result); } } } } var directoriesTotals = new Dictionary<string, int>(); foreach (var directory in seenDirectories) { directoriesTotals[directory] = 0; // Fill it! foreach (var file in seenFiles) { if (file.Key.StartsWith(directory)) { directoriesTotals[directory] += file.Value; } } } long answer = 0; foreach (var dir in directoriesTotals) { if (dir.Value <= 100000) answer += dir.Value; } Console.WriteLine(answer);

Dold text

Edit: Ingen som kan hitta felet?

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: 7
Språk: Nim
Lösning: Github

Idag var den väldigt parsing-heavy. Lyckades abstrahera filsystemet hyffsat bra ändå så själva lösningarna blev ganska smidiga.

include prelude, std / [strscans, strutils, tables, algorithm] type FileKind = enum file, dir FileObj = ref object size: int name: string parent: FileObj case kind: FileKind of file: discard of dir: children: Table[string, FileObj] proc `$`(f: FileObj, indent=0): string = case f.kind: of dir: let dirName = if f.name == "/": "/ " else: f.name & "/ " result = " ".repeat(indent) & dirName & $f.size for (key, file) in f.children.pairs: result &= "\n" & `$`(file, indent+1) of file: result = " ".repeat(indent) & f.name & " " & $f.size proc cmp(a, b: FileObj): int = cmp(a.size, b.size) proc addFile(f: FileObj, dirName: string, size: int = 0, kind: FileKind = dir): FileObj = assert dirName notin f.children result = FileObj(size: size, name: dirName, kind: kind, parent: f) f.children[dirName] = result proc parseFileTree(input: string): FileObj = result = FileObj(size: 0, name: "/", kind: dir, parent: nil) var currentFile = result for command in input.split("$"): if command.isEmptyOrWhitespace: continue let lines = command.strip().splitLines if lines[0].startsWith("cd"): let dest = lines[0].split(" ")[^1] if dest == "..": currentFile = currentFile.parent elif dest == "/": currentFile = result elif dest in currentFile.children: currentFile = currentFile.children[dest] else: let newDir = currentFile.addFile(dest) currentFile = newDir elif lines[0].startsWith("ls"): for line in lines[1 .. ^1]: if line.startsWith("dir"): let dirName = line.split(" ")[^1] if dirName notin currentFile.children: let _ = currentFile.addFile(dirName) else: let spli = line.split(" ") let size = parseInt(spli[0]) let fName = spli[1] if fName notin currentFile.children: let newFile = currentFile.addFile(fName, size=size, kind=file) proc calcDirSizes(root: FileObj): int = case root.kind: of dir: for child in root.children.values: root.size += child.calcDirSizes() root.size of file: root.size iterator walkTree(f: FileObj): FileObj {.closure.} = yield f case f.kind of file: discard of dir: for child in f.children.values: let a = walkTree for x in a(child): yield x proc part1(input: string) = let fileTree = parseFileTree(input) let totSize = fileTree.calcDirSizes() var result = 0 for x in fileTree.walkTree: if x.kind == dir and x.size <= 100000: result += x.size echo "Part 1: ", result proc part2(input: string) = let fileTree = parseFileTree(input) let totSize = fileTree.calcDirSizes() let diskSpace = 70000000 let availableSpace = diskSpace - totSize let neededSpace = 30000000 let deleteSize = neededSpace - availableSpace var candidates: seq[FileObj] for x in fileTree.walkTree: if x.kind == dir and x.size >= deleteSize: candidates.add x candidates.sort(cmp, Ascending) echo "Part 2: ", candidates[0].size when isMainModule: let input = readFile("input.txt") part1(input) part2(input)

Dold text
Permalänk
Medlem
Skrivet av Mickur:

Får korrekt svar på testdata, men vägrar ge mig rätt på själva input. Jag blir galen.

Edit: Kan på riktigt inte hitta vad som blir galet, snart ger jag upp

Jag hade samma problem. Om du printar alla directories får du rätt size då? Min root ("/) var helt off eftersom jag missat en sak i min rekursion.

Dold text
Permalänk
Medlem
Skrivet av Flexbert:

Jag hade samma problem. Om du printar alla directories får du rätt size då? Min root ("/) var helt off eftersom jag missat en sak i min rekursion.

Dold text

Hmm...

Dold text
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