Day 2: Gift Shop

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

  • CameronDev@programming.devOPM
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    3 days ago

    Regex free solution. Much faster (233ms vs ~4s)

      fn check_invalid3(p0: usize) -> u32 {
            let mut i = 0;
            let mut found_count = 0;
            loop {
                let mut v = p0;
                i += 1;
                let mask = 10_usize.pow(i);
                if mask >= p0 {
                    // Mask is larger than input, we have exhausted available matchers.
                    return found_count;
                }
                let remainer = v % mask;
                if remainer < 10_usize.pow(i - 1) {
                    // Zero prefix, won't be a pattern. (01, 002, etc)
                    continue;
                }
                let mut count = 1;
                loop {
                    let new_v = v / mask;
                    if new_v % mask != remainer {
                        // doesnt repeat.
                        break;
                    }
                    if new_v / mask == 0 {
                        // has repeated, so we have found at least one pattern. Lets keep going to see if there is a simpler pattern.
                        found_count = count;
                        break;
                    }
                    count += 1;
                    v = new_v;
                }
            }
        }