reboot6675

joined 2 years ago
[โ€“] reboot6675@sopuli.xyz 2 points 2 weeks ago

Yeah, but back then no work, no responsibilities, friends not busy all the time...

[โ€“] reboot6675@sopuli.xyz 2 points 1 month ago

Go

Now I'm behind by 1 day, will try to catch up.

For part 2 I spent a good while thinking about it, then when I convinced myself my plan could work, struggled a bit with the implementation. But it worked in the end. Basically grid[i][j] is how many different ways you can reach a cell. Start at 1 on the S cell, then propagate the values down and keep adding up the nums when you reach cells through different paths. The answer is the sum of the nums in the last row.

spoiler

func part2() {
	// file, _ := os.Open("sample.txt")
	file, _ := os.Open("input.txt")
	defer file.Close()
	scanner := bufio.NewScanner(file)

	input := [][]rune{}

	for scanner.Scan() {
		line := []rune(scanner.Text())
		input = append(input, line)
	}

	m := len(input)
	n := len(input[0])
	grid := make([][]int, m)
	for i := range m {
		grid[i] = make([]int, n)
	}

	for i := range m {
		for j := range n {
			c := input[i][j]
			if i == 0 {
				if c == 'S' {
					grid[i][j] = 1
				}
				continue
			}
			if c == '^' {
				grid[i][j-1] += grid[i-1][j]
				grid[i][j+1] += grid[i-1][j]
			} else {
				grid[i][j] = grid[i][j] + grid[i-1][j]
			}
		}
	}

	paths := 0
	for j := range n {
		paths += grid[m-1][j]
	}

	fmt.Println(paths)
}

[โ€“] reboot6675@sopuli.xyz 2 points 1 month ago

Go

Part 2: Read the whole input in a rune matrix. Scan it column by column, store the numbers as you go, ignoring all spaces, and store the operand when you find it. When you hit an empty column or the end, do the operation and add it to the total.

spoiler

func part2() {
	// file, _ := os.Open("sample.txt")
	file, _ := os.Open("input.txt")
	defer file.Close()
	scanner := bufio.NewScanner(file)

	chars := [][]rune{}
	for scanner.Scan() {
		chars = append(chars, []rune(scanner.Text()))
	}

	m := len(chars)
	n := len(chars[0])
	var op rune
	nums := []int{}
	total := 0

	for j := range n {
		current := []rune{}
		for i := range m {
			if chars[i][j] == '+' || chars[i][j] == '*' {
				op = chars[i][j]
			} else if chars[i][j] != ' ' {
				current = append(current, chars[i][j])
			}
		}
		if len(current) > 0 {
			x, _ := strconv.Atoi(string(current))
			nums = append(nums, x)
		}
		if len(current) == 0 || j == n-1 {
			result := 0
			if op == '*' {
				result = 1
			}
			for _, x := range nums {
				if op == '+' {
					result = result + x
				} else {
					result = result * x
				}
			}
			total += result
			nums = []int{}
		}
	}

	fmt.Println(total)
}

[โ€“] reboot6675@sopuli.xyz 2 points 1 month ago

First I tried to to part 2 with a very poor regex strategy and the performance was abysmal. Switched to plain substrings and boom, instant result.

Golang

func part1() {
	ranges := readInput()
	invalidSum := 0

	for _, r := range ranges {
		parts := strings.Split(r, "-")
		start, _ := strconv.Atoi(parts[0])
		end, _ := strconv.Atoi(parts[1])

		for num := start; num <= end; num++ {
			current := strconv.Itoa(num)
			n := len(current)
			if n%2 != 0 {
				continue
			}
			left := current[:n/2]
			right := current[n/2:]
			if left == right {
				invalidSum += num
			}
		}
	}

	fmt.Println(invalidSum)
}

func part2() {
	ranges := readInput()
	invalidSum := 0

	for _, r := range ranges {
		parts := strings.Split(r, "-")
		start, _ := strconv.Atoi(parts[0])
		end, _ := strconv.Atoi(parts[1])

		for num := start; num <= end; num++ {
			current := strconv.Itoa(num)
			n := len(current)

			for index := 1; index <= n/2; index++ {
				if n%index != 0 {
					continue
				}

				left := 0
				right := index
				prefix := current[left:right]
				isRepeated := true
				for left < n && right < n {
					left = right
					right = right + index
					next := current[left:right]
					if next != prefix {
						isRepeated = false
						break
					}
				}

				if isRepeated {
					invalidSum += num
					break
				}
			}
		}
	}

	fmt.Println(invalidSum)
}
[โ€“] reboot6675@sopuli.xyz 5 points 1 month ago* (last edited 1 month ago)

Golang

func part1() {
	// file, _ := os.Open("sample.txt")
	file, _ := os.Open("input.txt")
	defer file.Close()

	scanner := bufio.NewScanner(file)
	n := 100
	current := 50
	pointingAt0 := 0

	for scanner.Scan() {
		line := scanner.Text()
		num, _ := strconv.Atoi(line[1:])
		if line[0] == 'L' {
			current = ((current-num)%n + n) % n
		} else {
			current = (current + num) % n
		}
		if current == 0 {
			pointingAt0++
		}
	}

	fmt.Println(pointingAt0)
}

func part2() {
	// file, _ := os.Open("sample.txt")
	file, _ := os.Open("input.txt")
	defer file.Close()

	scanner := bufio.NewScanner(file)
	n := 100
	current := 50
	pointingAt0 := 0

	for scanner.Scan() {
		line := scanner.Text()
		num, _ := strconv.Atoi(line[1:])

		rounds := num / n
		pointingAt0 += rounds
		num = num % n
		new := -1

		if line[0] == 'L' {
			new = ((current-num)%n + n) % n
			if current != 0 && (new > current || new == 0) {
				pointingAt0++
			}
		} else {
			new = (current + num) % n
			if current != 0 && (new < current || new == 0) {
				pointingAt0++
			}
		}

		current = new
	}

	fmt.Println(pointingAt0)
}
[โ€“] reboot6675@sopuli.xyz 2 points 1 month ago (1 children)

Ohh so it was possible to use floats for this! I was "worried" that it would lead to precision errors haha so I ended up "cheating" with BigInt (Golang) to make all the multiplications first and one division at the end

[โ€“] reboot6675@sopuli.xyz 3 points 2 months ago

Borges mentioned. Amazing writer.

[โ€“] reboot6675@sopuli.xyz 17 points 3 months ago

Oh man good memories from Simpsons Hit & Run, this is awesome!

[โ€“] reboot6675@sopuli.xyz 6 points 3 months ago (1 children)

Just pointing out that these 2 are not necessarily contradicting statements. Just because it hasn't taken any jobs yet, doesn't mean it won't take any in the next 10 years. Not that I really want to believe those numbers though. But yeah as others have pointed out, these studies need to be taken with a grain of salt.

[โ€“] reboot6675@sopuli.xyz 9 points 3 months ago (1 children)

Just yesterday I came across some Sora generated memes and damn, it was obviously fake (to me) but it looked so real, I am sure some people out there will totally believe this stuff. Misinformation is going to get wild

[โ€“] reboot6675@sopuli.xyz 17 points 4 months ago (7 children)

Been having similar case with dev teams who have coded every error to be 500. User typed the wrong URL? 500. User tried to access a page without logging in? 500... Makes detecting real errors a pain

 
 
 

GOAT

 

Came across this paper the other day. I'm yet to read it fully, but its existence is interesting already. Dumbphones have now gathered attention from the media and the academic world too.

3
Smile! (sopuli.xyz)
 

We're all gonna end up in one of those aren't we...

 

Stumbled upon this article about the rising popularity of dumbphones.

Hope this community starts getting more traction :)

As for my journey, I am still on a "dumb smartphone" phase, an old phone with only Whatsapp and Spotify. I've been considering making the switch to a dumb phone or at least a candybar smartphone like the Qin F21.

 
 

Context: the creator of Linux is from Finland

 

Context: this is a legit screenshot I took on my workplace around 1.5 years ago. Hopefully it's been patched by now? Completely ridiculous behavior

 

Had it saved on my hard drive for years and recently re-discovered it. Seems to be from 2011 (!!)

Google is getting worse by the year, but it seems even back then some people were already seeing where things were going.

(Credits to the original author whoever it might be)

view more: next โ€บ