Treeniks

@Treeniks@lemmy.ml

This profile is from a federated server and may be incomplete. Browse more on the original instance.

Treeniks,

TL;DR: Devs asked their Twitter if they wanted to see 150% breast jiggle physics, deleting the tweet and apologizing after some backlash, which in turn got them more backlash from the other side for caving in.

It was rather obviously meant as a joke, so I’m confused about what people were mad at. Did they think they actually intended it to be included in the game? I would’ve just liked to see that gif, sounds funny af.

Treeniks,

Probably wasn’t clear on that. I meant the 150% thing being a joke, not the jiggle physics. People having a problem with the inclusion of realistic jiggle physics is something that I didn’t even consider tbh…

Treeniks,

according to the Asahi guy, it doesn’t work correctly for ARM: social.treehouse.systems/…/111018734178152229

I am utterly oblivious to how neofetch works, but it does seem to need updates to support newer tech.

Treeniks,

Yeah one of the Asahi guys was also confused about why people still use neofetch: social.treehouse.systems/…/111018734178152229

Treeniks,

Can’t speak of other languages, but in German anyway the sentence is exactly the same. “Ich bin zuhause” meaning word-for-word “I am home”. Same issue, normally a location would have a preposition and an article. Reasoning is also the same as in english, “home” and “zuhause” are not a location but a state in this case.

Treeniks,

True. I was more going on the idea of OP that it must confuse english learners. I often feel people who only know one language tend to forget that most latin languages tend to have similar quirks, often making such quirks in a foreign language rather natural.

Treeniks,

I For Of Can’t The The Wait Fall Bourgeoisie

Treeniks,

I believe the main thing people liked about Floorp is tab grouping and vertical tab layout à la Vivaldi, and a more modern and slim design out of the box, while keeping a firefox core instead of being another chromium based browser.

Treeniks,

Wow that firefox css is looking real nice. Thanks for sharing.

Looking for a pro controller/handheld option. All suggestions appreciated.

I had the 8bitduo Ultimate and I loved it, though it was a little awkward to hold at first as I was more used to the slanted handle design of an Xbox controller. Unfortunately, I think I must have left it somewhere in public leading to it being stolen, as I haven’t seen it in a few months in spite of constantly looking for it....

Treeniks,

Just want to mention that Guilikit now have the KK3 Max which has some improvements over the KingKong 2. It’s also possible to grab a PS5 controller and connect it to your switch with an 8bitdo wireless adapter.

I have both Guilikits, an 8bitdo ultimate and the ps5 combo here. The 8bitdo ultimate is certainly the safest option of the bunch, but I like the KK3 Max most.

The KingKong Pro 2 has some massive polling rate issues. If you want to use the thing wirelessly on PC, you’re stuck at 60Hz and it’s not even very consistent, which is awful compared to all the others. Not sure how it’s looking on switch since it’s difficult to measure that, but I feel like it’s similarly much slower than other controllers.

The KK3 Max doesn’t have that issue, though I haven’t done any latency testing yet. In terms of Gyro, the KingKong Pro 2 was also pretty bad, no way I could play splatoon with that. I don’t know if that’s improved on the KK3 Max, I haven’t tried gyro yet so I can’t comment on it.

While I’ve had no hardware failures with either of them (I’ve only had the KK3 Max since yesterday), they also don’t exactly give me confidence that they won’t. It’s not that they’re badly built, but in particular the stick caps and should buttons just feel like they might give out fairly early. I will say that I find them by far the most comfortable though, and I love the material they used, it feels really nice, especially compared to the 8bitdo ultimate’s cheap plastic. I also find the back triggers to be much better than the others. On the KK3 Max they have this new digital trigger mode and it’s awful, but the normal analogue trigger feels fantastic. On the KK2 the triggers were pretty nice also.

PS5 controller’s battery life is awful. Also the experience can vary depending on the adapter used, the Mayflash Magic ones I found to be significantly worse than the 8bitdo adapter.

The 8bitdo ultimate is just an allrounder. I don’t like the shape and materials used, as well as the way the back triggers feel. All those points are better on the Guilikit, but then again the 8bitdo certainly is built better and I can say that it has 0 polling rate/latency issues and its gyro works great, which is why I say it’s the safest options.

Also, no matter what 3rd party controller you’ll get, you won’t ever find a replacement for the original Switch Pro’s HD Rumble stuff. In fact, Rumble is always a little awkward on all of these controllers I find.

Treeniks,

Oh I would never use bluetooth on PC, that adds input latency like crazy. I was talking wireless only ever over 2.4Ghz with the 8bitdo adapter. Even there the KK2 had really bad latency while all the others were fine. The KK3 Max actually comes with its own adapter to achieve 1000Hz wirelessly (I got only around 880, but still higher than all the others on stock which are usually stuck on 250 or 500Hz. You can overclock the PS5 to 1000 when wired but I never did).

Also since you mentioned them going for an elite controller style with the KK3 Max, I wouldn’t count on its back pedals. Personally I find they make it impossible to hold the controller. I’ve never liked the back pedals on the Xbox Elite, and I like them even less on the KK3, while I found the one on the 8bitdo ultimate really nice (though I never used them anyway).

As for the branding I have no clue. They did have a US/Target version of the KK2 Pro called the Zen Pro which was the exact same controller, just sold at Target. I think they’re just weird with their naming.

On that note, I’ve also heard there is supposed to be more budget versions of the KK3 Max coming out over the year (I think it was two more), similar to how they had a KK2 and KK2 Pro.

Looking for a specific Blog post

I’m not sure if this is the correct place to ask this, but not too long ago I saw a blog post where the author mentioned in passing that an entire episode of the show Mr. Robot was based on a writeup the author did about a private CTF challenge, and they knew because the show even used the same solution which happened to be...

Treeniks,

That’s exactly it, no wonder I couldn’t find it. Thank you so much!

Treeniks,

I have night light turned on 24/7 on all my devices. If I don’t I get a headache after around a day.

In fact, I couldn’t consistently use linux until recently because only the latest Nvidia drivers (545) added support for night light on wayland. Those glasses could’ve been handy there.

Treeniks, (edited )

Rust

githubcodeberggitlab

First tried a really slow brute force, but after waiting many minutes heard others talk of Karger’s Algorithm, so I implemented that.


<span style="font-weight:bold;color:#a71d5d;">use </span><span style="color:#323232;">rand::prelude::</span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">;
</span><span style="font-weight:bold;color:#a71d5d;">use </span><span style="color:#323232;">std::collections::HashSet;
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">type </span><span style="color:#323232;">Graph </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">(V, E);
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">type </span><span style="color:#323232;">V </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">HashSet<String>;
</span><span style="font-weight:bold;color:#a71d5d;">type </span><span style="color:#323232;">E </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">Vec<(String, String)>;
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">fn </span><span style="font-weight:bold;color:#795da3;">parse_input</span><span style="color:#323232;">(input: </span><span style="font-weight:bold;color:#a71d5d;">&str</span><span style="color:#323232;">) -> Graph {
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> vertices </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">HashSet::new();
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> edges </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">Vec</span><span style="color:#323232;">::new();
</span><span style="color:#323232;">
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">for</span><span style="color:#323232;"> line </span><span style="font-weight:bold;color:#a71d5d;">in</span><span style="color:#323232;"> input.</span><span style="color:#62a35c;">trim</span><span style="color:#323232;">().</span><span style="color:#62a35c;">lines</span><span style="color:#323232;">() {
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> it </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> line.</span><span style="color:#62a35c;">split</span><span style="color:#323232;">(</span><span style="color:#183691;">':'</span><span style="color:#323232;">);
</span><span style="color:#323232;">
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> left </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> it.</span><span style="color:#62a35c;">next</span><span style="color:#323232;">().</span><span style="color:#62a35c;">unwrap</span><span style="color:#323232;">();
</span><span style="color:#323232;">        vertices.</span><span style="color:#62a35c;">insert</span><span style="color:#323232;">(left.</span><span style="color:#62a35c;">to_owned</span><span style="color:#323232;">());
</span><span style="color:#323232;">
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">for</span><span style="color:#323232;"> right </span><span style="font-weight:bold;color:#a71d5d;">in</span><span style="color:#323232;"> it.</span><span style="color:#62a35c;">next</span><span style="color:#323232;">().</span><span style="color:#62a35c;">unwrap</span><span style="color:#323232;">().</span><span style="color:#62a35c;">trim</span><span style="color:#323232;">().</span><span style="color:#62a35c;">split_whitespace</span><span style="color:#323232;">() {
</span><span style="color:#323232;">            vertices.</span><span style="color:#62a35c;">insert</span><span style="color:#323232;">(right.</span><span style="color:#62a35c;">to_owned</span><span style="color:#323232;">());
</span><span style="color:#323232;">            edges.</span><span style="color:#62a35c;">push</span><span style="color:#323232;">((left.</span><span style="color:#62a35c;">to_owned</span><span style="color:#323232;">(), right.</span><span style="color:#62a35c;">to_owned</span><span style="color:#323232;">()));
</span><span style="color:#323232;">        }
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">
</span><span style="color:#323232;">    (vertices, edges)
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">fn </span><span style="font-weight:bold;color:#795da3;">part1</span><span style="color:#323232;">(input: </span><span style="font-weight:bold;color:#a71d5d;">&str</span><span style="color:#323232;">) -> </span><span style="font-weight:bold;color:#a71d5d;">usize </span><span style="color:#323232;">{
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let </span><span style="color:#323232;">(vertices, edges) </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#62a35c;">parse_input</span><span style="color:#323232;">(input);
</span><span style="color:#323232;">
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> rng </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">rand::thread_rng();
</span><span style="color:#323232;">
</span><span style="color:#323232;">    </span><span style="font-style:italic;color:#969896;">// Karger's Algorithm
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">loop </span><span style="color:#323232;">{
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> vertices </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> vertices.</span><span style="color:#62a35c;">clone</span><span style="color:#323232;">();
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> edges </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> edges.</span><span style="color:#62a35c;">clone</span><span style="color:#323232;">();
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">while</span><span style="color:#323232;"> vertices.</span><span style="color:#62a35c;">len</span><span style="color:#323232;">() </span><span style="font-weight:bold;color:#a71d5d;">> </span><span style="color:#0086b3;">2 </span><span style="color:#323232;">{
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> i </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> rng.</span><span style="color:#62a35c;">gen_range</span><span style="color:#323232;">(</span><span style="color:#0086b3;">0</span><span style="font-weight:bold;color:#a71d5d;">..</span><span style="color:#323232;">edges.</span><span style="color:#62a35c;">len</span><span style="color:#323232;">());
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">let </span><span style="color:#323232;">(v1, v2) </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> edges[i].</span><span style="color:#62a35c;">clone</span><span style="color:#323232;">();
</span><span style="color:#323232;">
</span><span style="color:#323232;">            </span><span style="font-style:italic;color:#969896;">// contract the edge
</span><span style="color:#323232;">            edges.</span><span style="color:#62a35c;">swap_remove</span><span style="color:#323232;">(i);
</span><span style="color:#323232;">            vertices.</span><span style="color:#62a35c;">remove</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">v1);
</span><span style="color:#323232;">            vertices.</span><span style="color:#62a35c;">remove</span><span style="color:#323232;">(</span><span style="font-weight:bold;color:#a71d5d;">&</span><span style="color:#323232;">v2);
</span><span style="color:#323232;">
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">let</span><span style="color:#323232;"> new_v </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#323232;">format!(</span><span style="color:#183691;">"</span><span style="color:#0086b3;">{}</span><span style="color:#183691;">:</span><span style="color:#0086b3;">{}</span><span style="color:#183691;">"</span><span style="color:#323232;">, v1, v2);
</span><span style="color:#323232;">            vertices.</span><span style="color:#62a35c;">insert</span><span style="color:#323232;">(new_v.</span><span style="color:#62a35c;">clone</span><span style="color:#323232;">());
</span><span style="color:#323232;">
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">for </span><span style="color:#323232;">(e1, e2) </span><span style="font-weight:bold;color:#a71d5d;">in</span><span style="color:#323232;"> edges.</span><span style="color:#62a35c;">iter_mut</span><span style="color:#323232;">() {
</span><span style="color:#323232;">                </span><span style="font-weight:bold;color:#a71d5d;">if *</span><span style="color:#323232;">e1 </span><span style="font-weight:bold;color:#a71d5d;">==</span><span style="color:#323232;"> v1 </span><span style="font-weight:bold;color:#a71d5d;">|| *</span><span style="color:#323232;">e1 </span><span style="font-weight:bold;color:#a71d5d;">==</span><span style="color:#323232;"> v2 {
</span><span style="color:#323232;">                    </span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">e1 </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> new_v.</span><span style="color:#62a35c;">clone</span><span style="color:#323232;">()
</span><span style="color:#323232;">                }
</span><span style="color:#323232;">                </span><span style="font-weight:bold;color:#a71d5d;">if *</span><span style="color:#323232;">e2 </span><span style="font-weight:bold;color:#a71d5d;">==</span><span style="color:#323232;"> v1 </span><span style="font-weight:bold;color:#a71d5d;">|| *</span><span style="color:#323232;">e2 </span><span style="font-weight:bold;color:#a71d5d;">==</span><span style="color:#323232;"> v2 {
</span><span style="color:#323232;">                    </span><span style="font-weight:bold;color:#a71d5d;">*</span><span style="color:#323232;">e2 </span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;"> new_v.</span><span style="color:#62a35c;">clone</span><span style="color:#323232;">()
</span><span style="color:#323232;">                }
</span><span style="color:#323232;">            }
</span><span style="color:#323232;">
</span><span style="color:#323232;">            </span><span style="font-style:italic;color:#969896;">// remove loops
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">let mut</span><span style="color:#323232;"> j </span><span style="font-weight:bold;color:#a71d5d;">= </span><span style="color:#0086b3;">0</span><span style="color:#323232;">;
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">while</span><span style="color:#323232;"> j </span><span style="font-weight:bold;color:#a71d5d;"><</span><span style="color:#323232;"> edges.</span><span style="color:#62a35c;">len</span><span style="color:#323232;">() {
</span><span style="color:#323232;">                </span><span style="font-weight:bold;color:#a71d5d;">let </span><span style="color:#323232;">(e1, e2) </span><span style="font-weight:bold;color:#a71d5d;">= &</span><span style="color:#323232;">edges[j];
</span><span style="color:#323232;">                </span><span style="font-weight:bold;color:#a71d5d;">if</span><span style="color:#323232;"> e1 </span><span style="font-weight:bold;color:#a71d5d;">==</span><span style="color:#323232;"> e2 {
</span><span style="color:#323232;">                    edges.</span><span style="color:#62a35c;">swap_remove</span><span style="color:#323232;">(j);
</span><span style="color:#323232;">                } </span><span style="font-weight:bold;color:#a71d5d;">else </span><span style="color:#323232;">{
</span><span style="color:#323232;">                    j </span><span style="font-weight:bold;color:#a71d5d;">+= </span><span style="color:#0086b3;">1</span><span style="color:#323232;">;
</span><span style="color:#323232;">                }
</span><span style="color:#323232;">            }
</span><span style="color:#323232;">        }
</span><span style="color:#323232;">
</span><span style="color:#323232;">        </span><span style="font-weight:bold;color:#a71d5d;">if</span><span style="color:#323232;"> edges.</span><span style="color:#62a35c;">len</span><span style="color:#323232;">() </span><span style="font-weight:bold;color:#a71d5d;">== </span><span style="color:#0086b3;">3 </span><span style="color:#323232;">{
</span><span style="color:#323232;">            </span><span style="font-weight:bold;color:#a71d5d;">break</span><span style="color:#323232;"> vertices
</span><span style="color:#323232;">                .</span><span style="color:#62a35c;">iter</span><span style="color:#323232;">()
</span><span style="color:#323232;">                .</span><span style="color:#62a35c;">map</span><span style="color:#323232;">(|s| s.</span><span style="color:#62a35c;">split</span><span style="color:#323232;">(</span><span style="color:#183691;">':'</span><span style="color:#323232;">).</span><span style="color:#62a35c;">count</span><span style="color:#323232;">())
</span><span style="color:#323232;">                .product::<</span><span style="font-weight:bold;color:#a71d5d;">usize</span><span style="color:#323232;">>();
</span><span style="color:#323232;">        }
</span><span style="color:#323232;">    }
</span><span style="color:#323232;">}
</span>
Treeniks,

Rust

github: github.com/Treeniks/advent-of-code/…/main.rs

codeberg: codeberg.org/Treeniks/advent-of-code/…/main.rs

gitlab: gitlab.com/Treeniks/advent-of-code/-/…/main.rs

Had to look on reddit for how to solve part 2. Wasn’t happy with the idea of using something like Z3, so I ended up brute force guessing the velocity, solving for the position and time and seeing if those are correct.

Lots of unintelligible calculations for solving the equation systems in the code that I just prepared on paper and transferred over.

Treeniks,

This is correct, while OpenGL and DirectX 11 and before are considered high level APIs, Vulkan and DirectX 12 are both considered low level APIs.

Treeniks, (edited )

Zig

github.com/Treeniks/advent-of-code/…/main.zig

(or on codeberg if you don’t like to use github: codeberg.org/Treeniks/advent-of-code/…/main.zig )

Every time I use Zig, I love the result, but I hate writing it. The language is just a little too inflexible for quick and dirty solutions to quickly try out an idea or debug print something useful, but once you’re done and have a result, it feels quite complete.

Treeniks,

Rust

github.com/Treeniks/advent-of-code/…/main.rs

I reused my Grid struct from day 17 for part 1, just to realize that I’ll need to expand the grid for part 2 so I awkwardly hacked it to be a Vec<Vec<Tile>> instead of a linear Vec<Tile>.

I solved task 2 by reading through the reddit thread and trying to puzzle together what I was supposed to do. Took me a while to figure it out, even with literally looking at other people’s solutions. I wrote a lengthy comment about it for anyone that’s still struggling, but I honestly still don’t really understand why it works. I think I wouldn’t have solved it if I didn’t end up looking at other solutions. Not a fan of the “analyze the input and notice patterns in them” puzzles.

Treeniks, (edited )

I’m a little confused about this one. The mappings are total, that is any number that is not defined explicitly gets mapped to itself. So it’s easy to create an example where the lowest number does not get mentioned within a range:


<span style="color:#323232;">seeds: 0 3
</span><span style="color:#323232;">
</span><span style="color:#323232;">seed-to-soil map:
</span><span style="color:#323232;">10 0 2
</span><span style="color:#323232;">
</span><span style="color:#323232;">soil-to-fertilizer map:
</span><span style="color:#323232;">100 200 5
</span><span style="color:#323232;">
</span><span style="color:#323232;">fertilizer-to-water map:
</span><span style="color:#323232;">100 200 5
</span><span style="color:#323232;">
</span><span style="color:#323232;">water-to-light map:
</span><span style="color:#323232;">100 200 5
</span><span style="color:#323232;">
</span><span style="color:#323232;">light-to-temperature map:
</span><span style="color:#323232;">100 200 5
</span><span style="color:#323232;">
</span><span style="color:#323232;">temperature-to-humidity map:
</span><span style="color:#323232;">100 200 5
</span><span style="color:#323232;">
</span><span style="color:#323232;">humidity-to-location map:
</span><span style="color:#323232;">100 200 5
</span>

Here, we have seeds 0, 1 and 2. seed 0 gets mapped to location 10, seed 1 gets mapped to location 11 and seed 2 gets mapped to location 2. That means location 2 would be the answer, but it’s not a start of any range. I guess this just doesn’t happen in any of the inputs?

EDIT: actually it’s double weird. If you implemented a backwards search, that is you create reverse mappings and then try out all locations (which is what I and many others did), the result of the above example is location 0, whereas if you create a forwards brute force of all seeds, the result is 2. For the reverse approach to work in all cases, the mappings would have to be bijective.

Treeniks,

tbf that’s a lot easier to say when you’re the president of one of the richest companies in the industry. I don’t disagree, but not everybody has the resources to just keep developing forever, and that’s easy to forget too.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • megavids
  • kavyap
  • DreamBathrooms
  • thenastyranch
  • magazineikmin
  • InstantRegret
  • GTA5RPClips
  • Youngstown
  • everett
  • slotface
  • rosin
  • osvaldo12
  • mdbf
  • ngwrru68w68
  • JUstTest
  • cubers
  • modclub
  • normalnudes
  • tester
  • khanakhh
  • Durango
  • ethstaker
  • tacticalgear
  • Leos
  • provamag3
  • anitta
  • cisconetworking
  • lostlight
  • All magazines