Day 4: Ceres Search
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
Nim
Could be done more elegantly, but I haven’t bothered yet.
proc solve(input: string): AOCSolution[int, int] = var lines = input.splitLines() block p1: # horiz for line in lines: for i in 0..line.high-3: if line[i..i+3] in ["XMAS", "SAMX"]: inc result.part1 for y in 0..lines.high-3: #vert for x in 0..lines[0].high: let word = collect(for y in y..y+3: lines[y][x]) if word in [@"XMAS", @"SAMX"]: inc result.part1 #diag \ for x in 0..lines[0].high-3: let word = collect(for d in 0..3: lines[y+d][x+d]) if word in [@"XMAS", @"SAMX"]: inc result.part1 #diag / for x in 3..lines[0].high: let word = collect(for d in 0..3: lines[y+d][x-d]) if word in [@"XMAS", @"SAMX"]: inc result.part1 block p2: for y in 0..lines.high-2: for x in 0..lines[0].high-2: let diagNW = collect(for d in 0..2: lines[y+d][x+d]) let diagNE = collect(for d in 0..2: lines[y+d][x+2-d]) if diagNW in [@"MAS", @"SAM"] and diagNE in [@"MAS", @"SAM"]: inc result.part2
Codeberg repo