Quest 1: Whispers in the Shell
- 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
Link to participate: https://everybody.codes/


edit: I did the wrong quest
I wasn’t very happy with myself on this one. Part 1 wound up being simple enough, but part 2 took me for a loop. My disappointment was that I asked an AI for a hint, but instead it coded up a solution revolved around checking cycle dependency.
I tried to at least redo it in a functional way, since I’m writing this in FSharp, but I ran into a bunch of hiccups around indexes and index tracking. That always costs me so much time. This took me forever and I’m near the bottom of the rankings haha.
Overall, I wasn’t terribly happy with how I did on this one. Oh, I wound up switching all of the types to BigInteger because I was lost as to what was happening. It turned out to be indexes and orderings, but I thought that maybe something was getting truncated.
Hmmm, I am certain I did the wrong one? I did quest 1, I’m pretty sure
Here’s the right challenge. This was a lot simpler than the tracking of cycles.
type Direction = Left | Right type Instruction = { Direction: Direction; Distance: int } let parseInstruction (segment:string) = let direction = if segment[0] = 'L' then Left else Right let distance = Int32.Parse(segment.AsSpan().Slice(1)) { Direction = direction; Distance = distance } let inline normalize (array: 'a array) idx = if idx >= 0 then idx % array.Length else array.Length - (-idx % array.Length) let inline nextIndex instruction idx = match instruction.Direction with | Left -> idx - instruction.Distance | Right -> idx + instruction.Distance let readFile file = File.ReadAllLines(file) |> fun lines -> let names = lines.[0] |> _.Split(",", StringSplitOptions.RemoveEmptyEntries ||| StringSplitOptions.TrimEntries) let instructions = lines[2] |> _.Split(",", StringSplitOptions.RemoveEmptyEntries ||| StringSplitOptions.TrimEntries) |> Array.map parseInstruction (names, instructions) let part1File file : string = readFile file |> fun (names, instructions) -> instructions |> Seq.fold (fun (idx, _) instruction -> let next = nextIndex instruction idx |> fun v -> Math.Clamp(v, 0, names.Length - 1) match Array.tryItem next names with | Some n -> next, n | None -> failwith "off array" ) (0, "") |> snd let part1 () = part1File "Inputs/Quest01/Q01_P01.txt" let part2File file = readFile file |> fun (names, instructions) -> instructions |> Seq.fold (fun (idx, _) instruction -> let next = nextIndex instruction idx |> normalize names match Array.tryItem next names with | Some n -> next, n | None -> failwith "off array" ) (0, "") |> snd let part2() = part2File "Inputs/Quest01/Q01_P02.txt" let part3File file = readFile file |> fun (names, instructions) -> // need to preserve a reference to an array that can be mutated let mutable nameArray = names instructions |> Seq.fold (fun _ instruction -> // for this challenge the index doesn't matter let next = match instruction.Direction with | Left -> names.Length - instruction.Distance | Right -> instruction.Distance |> normalize names match Array.tryItem next nameArray with | Some n -> nameArray <- arraySwap 0 next names 0, n | None -> failwith "off array" ) (0, "") |> snd let part3() = part3File "Inputs/Quest01/Q01_P03.txt"I’m very curious about F# since I’ve never used it or seen it anywhere before but I’m afraid I’m too tired to read it right now. Thank you for posting, I hope I’ll remember to come back tomorrow.