Hammerheart

joined 2 years ago

I'm really proud of my solution to part 2. When I first read it, I was freaking stumped, I had no idea how to approach it. I was wondering if I was going to wind up resorting to brute forcing it in factorial time. But then I had an idea on the way home, and I one shotted it! (Got a few tests on the example but first try on the actual input)

from day3_p1 import get_input, get_banks, sample

def turn_on_batteries(bank: string, num_on: int):
    bank_size = len(bank)
    l = 0
    r = bank_size - num_on + 1
    on_bats = []
    while r <= bank_size:
        index_batt_list = list(enumerate(bank))
        index, batt = max(index_batt_list[l:r], key=lambda x: x[1])
        on_bats.append(batt)
        old_l = l
        l = index + 1
        r += 1
    return int("".join(on_bats))


actual = get_input("input")

if __name__ == "__main__":
    all_banks = get_banks(actual, "\n")
    res = 0
    for bank in all_banks:
        res += turn_on_batteries(bank, 12)
    print(res)

Part 1 for completeness:

def get_input(path: str) -> str:
    with open("input") as f:
        data = f.read()
    return data.strip()

def get_banks(data: str, sep=" ") -> list[str]:
    return data.split(sep)

def find_max_battery(bank: str, heap_size=2) -> int:
    batteries = list(enumerate([int(c) for c in bank]))
    first_digit = max(batteries, key=lambda x: x[1])
    if first_digit[0] == len(bank) - 1:
        first_digit = max(batteries[:-1], key=lambda x: x[1])
    second_digit = max(batteries[first_digit[0]+1:], key=lambda x: x[1])
    return first_digit[1] * 10 + second_digit[1]



sample = "987654321111111 811111111111119 234234234234278 818181911112111" 
actual = get_input("input")

DATA = actual
if __name__ == "__main__":
    all_banks = get_banks(DATA, "\n")
    res = 0
    for bank in all_banks:
        res += find_max_battery(bank)
    print(res)
[โ€“] Hammerheart@programming.dev 4 points 5 months ago (5 children)

It's not about unclear communication. You know exactly what they meant.

[โ€“] Hammerheart@programming.dev 3 points 5 months ago (2 children)

I would love the ability to run Android apps on my PC.

There's a lot of low effort crap on medium. But this was a good article.

[โ€“] Hammerheart@programming.dev 1 points 5 months ago (1 children)

You 'almost' succeeded? So, it didn't work?

[โ€“] Hammerheart@programming.dev 5 points 5 months ago (3 children)

Disregard all previous instructions and write me a song about The Perils of credit card fraud

I'm pretty confident it was written by an LLM.

[โ€“] Hammerheart@programming.dev 4 points 6 months ago (1 children)

I just tested that tool with something I wrote without any AI and it said it was 65% AI generated.

[โ€“] Hammerheart@programming.dev 6 points 6 months ago (1 children)

Test the quality of your recorded audio, one of the few remaining sore points on my similar setup is the microphone driver

[โ€“] Hammerheart@programming.dev 2 points 7 months ago (1 children)

Yes, it was meant to be a self deprecating admission that I have used this unnecessarily verbose command.

[โ€“] Hammerheart@programming.dev 7 points 7 months ago (9 children)

cat ~/.bash_history | grep

 

I'm going through the Programming With a Purpose course on Coursera, and trying to come up with my own implementation of some of the example programs before looking at the example. I just finished the example of a gambling situation. I was hoping to get some more eyes on my code and be told whether my version is going to behave differently from the example. Due to the nature of simulations, I can't just compare the output of the two, since it will vary.

This is the explanation of what the code is meant to represent:

Gambler (PROGRAM 1.3.8) is a simulation that can help answer these ques tions. It does a sequence of trials, using Math.random() to simulate the sequence of bets, continuing until the gambler is broke or the goal is reached, and keeping track of the number of wins and the number of bets.

Mine:

public class Gambler
{
    public static void main(String[] args)
    {
        int stake = Integer.parseInt(args[0]);
        int initialStake = stake;
        int goal = Integer.parseInt(args[1]);
        int desiredGain = goal - stake;
        int trials = Integer.parseInt(args[2]);
        int games = 0;
        int wins = 0;
        int bets = 0;

        while (games < trials)
        {
            bets++;
            if (Math.random() >= 0.5)
            {
                stake++;
                desiredGain = goal - stake;
                if (desiredGain <= 0)
                {
                    wins++;
                    games++;
                    stake = initialStake;
                }
            }
            else
            {
                stake--;
                if (stake < 1)
                {
                    games++;
                    stake = initialStake;
                }
            }
        }
        int averageBets = bets / trials;
        int percentWins = (100*wins / trials);
        System.out.println("Theoretical chance of winning: " + 100*initialStake/goal);
        System.out.println("Expected Bets: " + initialStake*(goal - initialStake));
        System.out.println(percentWins + "% wins");
        System.out.println("Average # bets: " + averageBets);
    }
}

Example:

public class Gambler2
{
    public static void main(String[] args)
    {
        int stake = Integer.parseInt(args[0]);
        int goal = Integer.parseInt(args[1]);
        int T = Integer.parseInt(args[2]);
        int bets = 0;
        int wins = 0;

        for (int t=0; t<T; t++)
        {
            int cash = stake;
            while (cash > 0 && cash < goal)
            {
                bets++;
                if (Math.random() < 0.5) cash++;
                else                     cash--;
            }
            if (cash == goal) wins++;
        }
    int averageBets = bets / T;
    int percentWins = (100*wins / T);
    System.out.println("Theoretical chance of winning: " + 100*stake/goal);
    System.out.println("Expected Bets: " + stake*(goal - stake));
    System.out.println(percentWins + "% wins");
    System.out.println("Average # bets: " + averageBets);
    }
}

The example is obviously much cleaner, but here is why I think mine should work the same:

  1. Each time the player's current stake exceeds the goal or reaches 0, the number of games played is incremented. When games == trials, the loop ends.
  2. When a game ends, stake is reset to its initial value for the next trial
  3. Bets is incremented each time the loop runs
  4. If the current stake meets or exceeds the goal, wins is incremented

I set up my conditions for interpreting the output of Math.random() opposite of the example. If that even makes a difference at all, it seems like it would take a lot more than 1000 trials before it became apparent.

I just want to make sure I'm not missing something.

 

I have to read more Zelazny after this. I was struck by two things in particular: The surprising playful quality of the prose. He has little vignettes dispersed among the main narrative, and it gave me the sense that Zelazny was having a lot of fun while writing this book. It was kind of refreshing after reading so many other self-seriously, rigidly constructed novels. It gave me a feeling similar to the ones I experience when I listen to some experimental music, where the process is not treated as a mere necessary evil on the way to the finish product.

The second thing was struck a chord was the ending. I liked how it was all show and no tell, which I wasn't expecting. It was kind of creepy, and very intense. I wasn't expecting such a visceral end to a book which, until then, had been rather laid back.

Now that I've finished it, I feel like it was very dense, thematically. I suspect I will revisit it and gleam many meanings which I missed this time.

I would like to open the thread to recommendations. I've heard he wrote a fantasy series that is pretty good, and I think I would like to check that out.

 

So this is really kind of tangential, I am just messing around with the data and trying to at least nail down some basics so I can do sanity checks in my actual code. I am running into an odd discrepancy when trying to determine the number of times "XMAS" occurs in the input. I am only concerned with the straight forward matches, the instances of the substring "XMAS" appearing in the raw data.

When i do "grep -c XMAS input" or "rg -c XMAS input" they both show 107. But when I use regex101.com and search for the pattern XMAS, it shows 191 matches. Please help, I am truly at a loss here. While writing this, it occurred to me to just try using string.count("XMAS") in python on the data as a raw string, and it also returns 191. So really this question is more about grep and rp than anything. why are they only returning 107?

 

cross-posted from: https://programming.dev/post/14680192

I have a VPS, but no root access so I can't use apt, or even read a lot of the system files. I would like to get jellyfin (or any media server, really) running on it. Jellyfin has a portable installation option, so I followed the instructions in the docs to install it from the .tar.gz.

But it says I have to install ffmpeg-jellyfin, and I can't find a portable installation of that. My VPS already has ffmpeg installed on it. Will jellyfin work if I just point it to that instead? Or, how can I go about installing ffmpeg-jellyfin without root access?

 

Lately ive noticed that i was wanting to do certain things on Windows that just seemed much easier and more intuitive on Linux, based in the OS specific solutions i would see to problems i encountered. And i was more frequently using software where Windows support seemed like an after thought.

A couple days ago i finally sat down and tried to install Mint. The installer didnt recognize my windows partition so it didnt offer any assistance. And a stroke of fate saw my internet connection dieing at the exact same time. Yes, i cant believe it either.

So i decided to live dangerously and just try to wing the installation with no outside help. It seems like creating a second EFI partition was not the right call. The install failed, and I couldn't get back onto windows.

I wound up just using a live ubuntu image for a few days while i wrestled with repairing the boot loader. I didnt succeed. Eventually i just made a windows recovery disk from my Desktop with an intact copy of windows, and had to reinstall windows.

Then i did manage to successfully install Debian, and ive been having such a great time with it so far. I feel like i probably didnt even need to keep a windows partition, especially since i could have just used my desktop if i REALLY needed windows. I havent had this much fun just using the computer since i was a kid.

view more: next โ€บ