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
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465


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; } } }