jverkamp.comhttps://blog.jverkamp.com/Recent content on jverkamp.comHugo -- gohugo.ioen-usTue, 31 Dec 2024 23:59:59 +00002024 Year in Reviewshttps://blog.jverkamp.com/2024/12/31/2024-year-in-reviews/Tue, 31 Dec 2024 23:59:59 +0000https://blog.jverkamp.com/2024/12/31/2024-year-in-reviews/<p>11 years. 1300 book reviews. 170 movies. 100 seasons of TV shows.</p> <p>That&rsquo;s so ridiculous when you write it out. It&rsquo;s kind of neat how something builds up if you just keep doing it over time.</p> <div class="ranking"> <h3 class="title">Posts in <a href="https://blog.jverkamp.com/series/year-in-reviews/">Year in Reviews</a>:</h3> <div class="content"> <ul><li> <a href="https://blog.jverkamp.com/2015/12/31/2015-reading-list-retrospective/"> 2015 Reading List Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2016/12/31/2016-reading-list-retrospective/"> 2016 Reading List Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2017/12/31/2017-reading-list-retrospective/"> 2017 Reading List Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2018/12/31/2018-reading-list-retrospective/"> 2018 Reading List Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2019/12/31/2019-reading-list-retrospective/"> 2019 Reading List Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2020/12/31/2020-reading-retrospective/"> 2020 Reading Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2021/12/31/2021-reading-retrospective/"> 2021 Reading Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2021/12/31/2021-tv-movies-retrospective/"> 2021 TV &amp; Movies Retrospective </a></li><li> <a href="https://blog.jverkamp.com/2022/12/31/2022-year-in-reviews/"> 2022 Year in Reviews </a></li><li> <a href="https://blog.jverkamp.com/2023/12/31/2023-year-in-reviews/"> 2023 Year in Reviews </a></li><li> <a href="https://blog.jverkamp.com/2024/12/31/2024-year-in-reviews/"> 2024 Year in Reviews </a></li></ul> </div> </div> <p>In any case, I enjoy collecting stats on various things and sharing them out. Both as a way to look back and remember for myself and in the hope that someone else finds it interesting and/or shares anything new/interesting I haven&rsquo;t seen!</p> <p>Overall this year:</p> <ul> <li><a href="#books">Read 298 books</a></li> <li><a href="#tv">Watch 17 seasons of TV</a></li> <li><a href="#movies">Watched 11 movies</a></li> <li><a href="#board-games">Played 227 different (85 new) board games a total of 1313 times</a></li> <li><a href="#steam-games">Played 37 games on steam (24 new) and made it to 100% Achievements on 10<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> of them</a></li> </ul> <h2 id="table-of-contents">Table of Contents</h2> <nav id="TableOfContents"> <ul> <li><a href="#table-of-contents">Table of Contents</a></li> <li><a href="#books">Books</a> <ul> <li><a href="#statistics">Statistics</a></li> <li><a href="#personal-favorites">Personal Favorites</a></li> <li><a href="#full-list">Full list</a></li> </ul> </li> <li><a href="#tv">TV</a> <ul> <li><a href="#full-list-1">Full list</a></li> </ul> </li> <li><a href="#movies">Movies</a></li> <li><a href="#board-games">Board Games</a></li> <li><a href="#steam-games">Steam Games</a></li> </ul> </nav>The Empire of Goldhttps://blog.jverkamp.com/2024/12/31/the-empire-of-gold/Tue, 31 Dec 2024 00:00:00 +0000https://blog.jverkamp.com/2024/12/31/the-empire-of-gold/<blockquote> <p>Luck is a fairy tale we use to make people feel better about the world being unfair as shit.</p> </blockquote> <p>Man this book has come a ways since <a href="https://blog.jverkamp.com/2024/07/05/the-city-of-brass/">The City of Brass</a>. At first we had a fairly straight forward portal fantasy: normal human girl goes through a portal (ish) to another world, discovers magic, and has adventures (again; ish). Then things escalate. Political intrigue. Old enemies. Revolution. War.</p> <p>And now&hellip; Daevabad has fallen. Nahri and Ali are on the run, trying desperately first to survive and then&hellip; maybe, to come back and save the day. And perhaps learn all those dirty little secrets those (formerly) in power tried hard to hide all these years.</p> <blockquote> <p>I do not believe ambitious men who say the only route to peace and prosperity lies in giving them more power—particularly when they do it with lands and people who are not theirs.</p> </blockquote> <p>I love the characters. Especially Dara, but the whole Nahri and Ali journey was great to read. And I even foundmyself rooting for Muntadhir, which after the previous books&hellip; I did not expect). Manizheh&hellip; I think Ghassan was a better villain overall, and it&rsquo;s interesting that she made it as far as she did, but so it goes.</p> <p>And I still love the worldbuilding&ndash;even if I&rsquo;m <em>still after 3 books</em> not 100% sure what is a subset of what and who is a when. But I suppose that&rsquo;s the point. Reality is messy. But it&rsquo;s a fascinating world and I&rsquo;m sad to be leaving it.</p> <p>Overall it&rsquo;s a solid conclusion to a great series. I&rsquo;d be happy to read more in this world, but I&rsquo;m always glad to see a series actually get it&rsquo;s own small end, rather than just fading out as many do.</p> <blockquote> <p>Find your happiness, little thief. Steal it and do not ever let it go.</p> </blockquote> <p>Onward!</p>Iron Councilhttps://blog.jverkamp.com/2024/12/30/iron-council/Mon, 30 Dec 2024 00:00:00 +0000https://blog.jverkamp.com/2024/12/30/iron-council/<p>[[Perdido Street Station|One in a city]], [[The Scar|one on a boat]]&hellip; and now one based around an entire civilization built around a &lsquo;perpetual train&rsquo;, putting down rails as it goes (and at times, tearing them up behind it).</p> <p>Man <a href="https://blog.jverkamp.com/reviews/authors/china-mi%C3%A9ville/">China Miéville</a> has some bonkers worldbuilding ideas.</p> <blockquote> <p>I mean course you want a change, we want a change, but if a change ain’t godsdamn coming, then the next thing I wish is that I didn’t care.</p> </blockquote> <p>Beyond that, we have a whole book about political oppression and xenophobia (the Iron Council is initially founded by the remade working on the train). It&rsquo;s about the tension of a revolution that feels inevitable. We have a story about gender differences (in a world where sexual dimorphism is a huge deal for some species) and love and longing. And a story about future history. The messy way of how one ends up getting history books written about them.</p> <blockquote> <p>“History&hellip;” Jacobs spoke with terse authority. Brought Ori to a hush. “Is all full. And dripping. With the corpses. Of them who trusted the incorruptible.”</p> </blockquote> <p>It&rsquo;s also interesting to see the fallout of the &lsquo;Contruct Uprising&rsquo;. A direct consequence of <a href="https://blog.jverkamp.com/2024/10/04/perdido-street-station/">Perdido Street Station</a>. And now instead, we have <a href="https://en.wikipedia.org/wiki/golems">golems</a>&ndash;which in this world can be made by animating any sorts of bits of innanimate matter and giving them life/instructions. It&rsquo;s cool!</p> <p>Unfortunately, I think this may be the weakest of the three. Despite how cool an idea a &lsquo;perpetual train&rsquo; is, I think the story spends too much time on other people/places/things. It&rsquo;s all building up, but when one of the things I love the most (and always start by describing) is left wanting? That&rsquo;s a bit of a bummer. It&rsquo;s still fascinating and there&rsquo;s a bunch of it&hellip; but I wanted more!</p>Whispers Under Groundhttps://blog.jverkamp.com/2024/12/29/whispers-under-ground/Sun, 29 Dec 2024 00:00:00 +0000https://blog.jverkamp.com/2024/12/29/whispers-under-ground/<p>Ghosts! Goblins! Murder! The FBI (in London)! The LONDON UNDERGROUND!</p> <p>I do continue to really love the feel of these books. It <em>feels</em> like a British cop show with a combination of magical elements and the science of magic, which are all delightful things.</p> <p>Characterwise, it&rsquo;s mostly the same, although this time around, we get a lot more of Lesley stepping up to learn magic again, which is something I was hoping would happen. I&rsquo;m looking forward to seeing how those two grow together.</p> <blockquote> <p>&ldquo;That was Seawoll,&rdquo; she said. &ldquo;Stephanopoulos is on her way down and you’re not to do anything stupid until she gets here.&rdquo;</p> <p>You burn down one central London tourist attraction, I thought, and they never let you forget it.</p> </blockquote> <p>It&rsquo;s also interesting seeing the bits of London as a city built on people from all manners, histories, and walks of life.</p> <blockquote> <p>My mum translated this in her head to &ldquo;witchfinder,&rdquo; which was good because like most West Africans, she considered witchfinding a more respectable profession than policeman.</p> </blockquote> <p>😄</p> <p>Worldbuildingwise, I like seeing ever more of teh magical world of London. There really is a feel of &rsquo;this <em>could</em> be&rsquo; that urban fantasy doesn&rsquo;t always get right. And I enjoy finding out that even the magical folks don&rsquo;t know how a lot of what they do works, but our main character is <em>not</em> going to let that stand.</p> <blockquote> <p>This is why magic is worse even than quantum physics. Because, while both spit in the eye of common sense, I&rsquo;ve never yet had a Higgs bosun turn up and try to have a conversation with me.</p> </blockquote> <p>It&rsquo;s fun to see even more of the magical underground (literally). It&rsquo;s neat to see how different authors play with old stories (and make up their own!)</p> <blockquote> <p>“My dad was a fairy,&quot; said Zach. &ldquo;And by that I don&rsquo;t mean he dressed well and enjoyed musical theatre.”</p> </blockquote> <p>One oddity: There are a ton of Lord of the Rings references throughout this book, some blatent and some more subtle. I was really fully expecting that to <a href="https://en.wikipedia.org/wiki/Chekhov%27s%20gun">Chekhov&#39;s gun</a>&hellip; but they were just references all along? That seems weird to me and I can&rsquo;t quite my finger on why.</p> <p>Overall, I loved it and am looking forward to the next one! Onward!</p>AoC 2024 Day 25: Christmas Lockpickinatorhttps://blog.jverkamp.com/2024/12/25/aoc-2024-day-25-christmas-lockpickinator/Wed, 25 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/25/aoc-2024-day-25-christmas-lockpickinator/<h2 id="source-day-25-code-chroniclehttpsadventofcodecom2024day25">Source: <a href="https://adventofcode.com/2024/day/25" target="_blank" rel="noopener">Day 25: Code Chronicle</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day25.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-25-code-chroniclehttpsadventofcodecom2024day25">Source: <a href="https://adventofcode.com/2024/day/25">Day 25: Code Chronicle</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>You are given a series of locks and keys (see below). How many unique <code>(lock, key)</code> are there that do not overlap (they do not have to fit perfectly).</p> <p>A lock starts from the top. The entire top row is <code>#</code> and the entire bottom row is <code>.</code>.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>##### </span></span><span style="display:flex;"><span>.#### </span></span><span style="display:flex;"><span>.#### </span></span><span style="display:flex;"><span>.#### </span></span><span style="display:flex;"><span>.#.#. </span></span><span style="display:flex;"><span>.#... </span></span><span style="display:flex;"><span>..... </span></span></code></pre></div><p>A key is the opposite:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>..... </span></span><span style="display:flex;"><span>..... </span></span><span style="display:flex;"><span>..... </span></span><span style="display:flex;"><span>#.... </span></span><span style="display:flex;"><span>#.#.. </span></span><span style="display:flex;"><span>#.#.# </span></span><span style="display:flex;"><span>##### </span></span></code></pre></div></blockquote>AoC 2024 Day 24: Ripple Carrinatorhttps://blog.jverkamp.com/2024/12/24/aoc-2024-day-24-ripple-carrinator/Tue, 24 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/24/aoc-2024-day-24-ripple-carrinator/<h2 id="source-day-24-crossed-wireshttpsadventofcodecom2024day24">Source: <a href="https://adventofcode.com/2024/day/24" target="_blank" rel="noopener">Day 24: Crossed Wires</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day24.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-24-crossed-wireshttpsadventofcodecom2024day24">Source: <a href="https://adventofcode.com/2024/day/24">Day 24: Crossed Wires</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#brute-force">Brute force</a></li> <li><a href="#visualizing-the-problem">Visualizing the problem</a></li> <li><a href="#actually-solving-it">Actually solving it</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a collection of gates of the form <code>arg0 (AND|OR|XOR) arg2 -&gt; out</code> and input values of form <code>x**</code> and <code>y**</code>, what is the value of <code>z**</code> interpreted as a binary number?</p> </blockquote>AoC 2024 Day 23: LAN Partinatorhttps://blog.jverkamp.com/2024/12/23/aoc-2024-day-23-lan-partinator/Mon, 23 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/23/aoc-2024-day-23-lan-partinator/<h2 id="source-day-23-lan-partyhttpsadventofcodecom2024day23">Source: <a href="https://adventofcode.com/2024/day/23" target="_blank" rel="noopener">Day 23: LAN Party</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day23.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-23-lan-partyhttpsadventofcodecom2024day23">Source: <a href="https://adventofcode.com/2024/day/23">Day 23: LAN Party</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#corrected-version-1-largest-completely-connected">Corrected version 1: Largest completely connected</a></li> <li><a href="#corrected-version-2-recursion--memoization">Corrected version 2: Recursion + memoization</a></li> <li><a href="#corrected-version-3-ordering-by-most-connected-nodes">Corrected version 3: Ordering by most connected nodes</a></li> <li><a href="#this-is-stupid">This is stupid&hellip;</a></li> <li><a href="#and-complicated">&hellip;and complicated</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>You are given the edges of an <a href="https://en.wikipedia.org/wiki/undirected%20graph">undirected graph</a>. Count how many <a href="https://en.wikipedia.org/wiki/complete%20graph">complete</a> <a href="https://en.wikipedia.org/wiki/subgraphs">subgraphs</a> of size three exist that contain one or more starting with the letter <code>t</code>.</p> </blockquote> <p>Aside: Games with local (but not hotseat) multiplayer have gotten rather rarer over the years&hellip; how many people still know what a <a href="https://en.wikipedia.org/wiki/LAN%20party">LAN party</a> is/was?</p>AoC 2024 Day 22: Xorshiftinatorhttps://blog.jverkamp.com/2024/12/22/aoc-2024-day-22-xorshiftinator/Sun, 22 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/22/aoc-2024-day-22-xorshiftinator/<h2 id="source-day-22-monkey-markethttpsadventofcodecom2024day22">Source: <a href="https://adventofcode.com/2024/day/22" target="_blank" rel="noopener">Day 22: Monkey Market</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day22.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-22-monkey-markethttpsadventofcodecom2024day22">Source: <a href="https://adventofcode.com/2024/day/22">Day 22: Monkey Market</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#brute-force">Brute force</a></li> <li><a href="#scan-for-sequence-scores">Scan for sequence scores</a></li> <li><a href="#packing-a-single-u32-instead-of-a-vecdeque">Packing a single <code>u32</code> instead of a <code>VecDeque</code></a></li> <li><a href="#visualizations">Visualizations</a></li> <li><a href="#ones-stats">Ones stats</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Implement a <a href="https://en.wikipedia.org/wiki/PRNG">PRNG</a> with the following update function:</p> <ol> <li>Multiply by 64, xor with the previous value, <a href="https://en.wikipedia.org/wiki/modulo">modulo</a> 16777216</li> <li>Divide by 32, xor with the previous value (from step 1), modulo 16777216</li> <li>Multiply by 2048, xor with the previous value (from step 2), module 16777216</li> </ol> <p>For each of a series of seeds, sum the 2000th generated number.</p> </blockquote>AoC 2024 Day 21: Busy Workinatorhttps://blog.jverkamp.com/2024/12/21/aoc-2024-day-21-busy-workinator/Sat, 21 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/21/aoc-2024-day-21-busy-workinator/<h2 id="source-day-21-keypad-conundrumhttpsadventofcodecom2024day21">Source: <a href="https://adventofcode.com/2024/day/21" target="_blank" rel="noopener">Day 21: Keypad Conundrum</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day21.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-21-keypad-conundrumhttpsadventofcodecom2024day21">Source: <a href="https://adventofcode.com/2024/day/21">Day 21: Keypad Conundrum</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#failed-version-1-way-over-engineered">(Failed) Version 1: Way over engineered</a></li> <li><a href="#version-2-direct-simulation">Version 2: Direct simulation</a></li> </ul> </li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#memoization">Memoization</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a> <ul> <li><a href="#tracing">Tracing</a></li> </ul> </li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>You are trying to type a code on a keypad:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>+---+---+---+ </span></span><span style="display:flex;"><span>| 7 | 8 | 9 | </span></span><span style="display:flex;"><span>+---+---+---+ </span></span><span style="display:flex;"><span>| 4 | 5 | 6 | </span></span><span style="display:flex;"><span>+---+---+---+ </span></span><span style="display:flex;"><span>| 1 | 2 | 3 | </span></span><span style="display:flex;"><span>+---+---+---+ </span></span><span style="display:flex;"><span> | 0 | A | </span></span><span style="display:flex;"><span> +---+---+ </span></span></code></pre></div><p>But you cannot type directly. Instead, you can control a pointer on the keypad with arrow keys:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span> +---+---+ </span></span><span style="display:flex;"><span> | ^ | A | </span></span><span style="display:flex;"><span>+---+---+---+ </span></span><span style="display:flex;"><span>| &lt; | v | &gt; | </span></span><span style="display:flex;"><span>+---+---+---+ </span></span></code></pre></div><p>Whenever you type a <code>^</code> on the arrow keys, the pointer on the keypad will move up one, etc. When you type <code>A</code>, then the pointer on the keypad will type whatever it is pointing at.</p> <p>But that&rsquo;s not enough either. Add a second keypad. And then a third, that is the one you are actually controlling.</p> <p>For each output sequence multiple the length of the minimum input sequence needed to generate it by the numeric value of the input sequence (ignoring any <code>A</code>); sum these.</p> <p>Note: Moving off any keypad or into the blank spaces is an error.</p> </blockquote>AoC 2024 Day 20: Shadow Catinatorhttps://blog.jverkamp.com/2024/12/20/aoc-2024-day-20-shadow-catinator/Fri, 20 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/20/aoc-2024-day-20-shadow-catinator/<h2 id="source-day-20-race-conditionhttpsadventofcodecom2024day20">Source: <a href="https://adventofcode.com/2024/day/20" target="_blank" rel="noopener">Day 20: Race Condition</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day20.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-20-race-conditionhttpsadventofcodecom2024day20">Source: <a href="https://adventofcode.com/2024/day/20">Day 20: Race Condition</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#version-1-entirely-over-complicated">Version 1: Entirely over complicated&hellip;</a></li> <li><a href="#version-2-floodfill">Version 2: Floodfill</a></li> <li><a href="#version-3-directly-scan-along-the-path">Version 3: Directly scan along the path</a></li> <li><a href="#optimization-1-calculate-distances-once-dijkstras-algorithm">Optimization 1: Calculate distances once (Dijkstra&rsquo;s algorithm)</a></li> <li><a href="#optimization-2-store-distances-in-a-grid">Optimization 2: Store distances in a <code>Grid</code></a></li> <li><a href="#pretty-pictures">Pretty pictures</a></li> </ul> </li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-3-store-distances-in-a-grid">Optimization 3: Store distances in a <code>Grid</code></a></li> <li><a href="#optimization-4-inverting-the-loop">Optimization 4: Inverting the loop</a></li> <li><a href="#prettier-pictures">Prettier pictures</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a maze with exactly one path, find how many single walls you can walk through (remove) that shorten the best path by at least 100 units.</p> </blockquote>Alcatraz Versus the Scrivener's Boneshttps://blog.jverkamp.com/2024/12/20/alcatraz-versus-the-scriveners-bones/Fri, 20 Dec 2024 00:00:00 +0000https://blog.jverkamp.com/2024/12/20/alcatraz-versus-the-scriveners-bones/<blockquote> <p>Once there was a bunny. This bunny had a birthday party. It was the bestest birthday party ever. Because that was the day the bunny got a bazooka.</p> <p>The bunny loved his bazooka. He blew up all sorts of things on the farm. He blew up the stable of Henrietta the Horse. He blew up the pen of Pugsly the Pig. He blew up the coop of Chuck the Chicken.</p> <p>&ldquo;I have the bestest bazooka ever,&rdquo; the bunny said. Then the farm friends proceeded to beat him senseless and steal his bazooka. It was the happiest day of his life.</p> <p>The end.</p> <p>Epilogue: Pugsly the Pig, now without a pen, was quite annoyed. When none of the others were looking, he stole the bazooka. He tied a bandana on his head and swore vengeance for what had been done to him.</p> <p>&ldquo;From this day on,&rdquo; he whispered, raising the bazooka, &ldquo;I shall be known as Hambo.</p> </blockquote> <p><a href="https://blog.jverkamp.com/2024/11/10/alcatraz-versus-the-evil-librarians/">Alcatraz Versus the Evil Librarians</a> introduced us to the world, now in Alcatraz Versus the Scrivener&rsquo;s Bones we actually get to live in it! A bit. Sort of.</p> <blockquote> <p>(Hushlanders, it might be noted, aren’t very imaginative with their idioms. Personally, I say, “Out of the frying pan and into the deadly pit filled with sharks who are wielding chainsaws with killer kittens stapled to them.” However, that one’s having a rough time catching on.)</p> </blockquote> <p>Essentially, the entire book is an adventure where Alcatraz and co (Bastille, but also newcomers Australia<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> and Kaz) are on a mission to mention a recently missing Grandpa Smedry. One thing leads to another, they end up in the <a href="https://en.wikipedia.org/wiki/Library%20of%20Alexandria">Library of Alexandria</a>&ndash;which got totally Tardis&rsquo;ed&ndash;and discover all sorts of spooky ghosts, ancient scrolls, hidden messages, &hellip; and more.</p> <blockquote> <p>Not all librarians are evil cultists. Some librarians are instead vengeful undead who want to suck your soul.</p> </blockquote>Ready Player Onehttps://blog.jverkamp.com/2024/12/19/ready-player-one/Thu, 19 Dec 2024 22:00:00 +0000https://blog.jverkamp.com/2024/12/19/ready-player-one/<p>Oh hey, that&rsquo;s a DeLorean! I should go re-watch Back to the Future.</p> <p>Ready Player One is a very pretty movie (I seem to be saying that [a lot]) recently) and absolutely chock full of pop culture references&hellip; which honestly felt rather overdone. The plot is thin and the world doesn&rsquo;t <em>really</em> make sense, although I did enjoy the characters well enough.</p>AoC 2024 Day 19: Regexinatorhttps://blog.jverkamp.com/2024/12/19/aoc-2024-day-19-regexinator/Thu, 19 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/19/aoc-2024-day-19-regexinator/<h2 id="source-day-19-linen-layouthttpsadventofcodecom2024day19">Source: <a href="https://adventofcode.com/2024/day/19" target="_blank" rel="noopener">Day 19: Linen Layout</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day19.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-19-linen-layouthttpsadventofcodecom2024day19">Source: <a href="https://adventofcode.com/2024/day/19">Day 19: Linen Layout</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#lets-write-it-ourselves-backtracking">Let&rsquo;s write it ourselves: Backtracking</a></li> <li><a href="#optimization-1-simplified-backtracking">Optimization 1: Simplified backtracking</a></li> <li><a href="#optimization-2-memoization">Optimization 2: Memoization</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a comma delimited list of substrings and a list of strings, count how many of the latter strings can be made up of any (repeating) combination of the former.</p> </blockquote>AoC 2024 Day 18: Last Chancinatorhttps://blog.jverkamp.com/2024/12/18/aoc-2024-day-18-last-chancinator/Wed, 18 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/18/aoc-2024-day-18-last-chancinator/<h2 id="source-day-18-ram-runhttpsadventofcodecom2024day18">Source: <a href="https://adventofcode.com/2024/day/18" target="_blank" rel="noopener">Day 18: RAM Run</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day18.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-18-ram-runhttpsadventofcodecom2024day18">Source: <a href="https://adventofcode.com/2024/day/18">Day 18: RAM Run</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-1-using-grid">Optimization 1: Using <code>Grid</code></a></li> </ul> </li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-2-two-neighbors">Optimization 2: Two neighbors</a></li> <li><a href="#optimization-3-using-grid">Optimization 3: Using <code>Grid</code></a></li> <li><a href="#optimization-4-on-the-best-path">Optimization 4: On the best path</a></li> <li><a href="#optimization-5-binary-search">Optimization 5: Binary search</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>You are given a series of points on a <code>71x71</code> grid. Taking only the first 1024 points, how long is the shortest path from <code>(0, 0)</code> to <code>(70, 70)</code>?</p> </blockquote>AoC 2024 Day 17: Virtual Machininatorhttps://blog.jverkamp.com/2024/12/17/aoc-2024-day-17-virtual-machininator/Tue, 17 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/17/aoc-2024-day-17-virtual-machininator/<h2 id="source-day-17-chronospatial-computerhttpsadventofcodecom2024day17">Source: <a href="https://adventofcode.com/2024/day/17" target="_blank" rel="noopener">Day 17: Chronospatial Computer</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day17.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-17-chronospatial-computerhttpsadventofcodecom2024day17">Source: <a href="https://adventofcode.com/2024/day/17">Day 17: Chronospatial Computer</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#instructions">Instructions</a></li> <li><a href="#parameter-specification">Parameter specification</a></li> <li><a href="#unit-tests">Unit tests</a></li> </ul> </li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#so-what-is-our-program-actually-doing">So what is our program actually doing?</a></li> <li><a href="#psuedo-code-hash">Psuedo-code hash</a></li> <li><a href="#whats-actually-changing">What&rsquo;s actually changing?</a></li> <li><a href="#zero-guarantees">Zero guarantees</a></li> <li><a href="#the-actual-answer">The actual answer</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Implement a virtual machine. The machine will have 3 unbounded signed registers, 8 opcodes (see below), a variable parameter scheme (see below that). You will be given the initial values of the 3 registers and a program. Find the final output.</p> </blockquote> <h3 id="instructions">Instructions</h3> <table> <thead> <tr> <th>Opcode</th> <th>Instruction</th> <th>Description</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td>0</td> <td><code>adv reg/val</code></td> <td><code>A = A &gt;&gt; OP</code></td> <td></td> </tr> <tr> <td>1</td> <td><code>bxl val</code></td> <td><code>B = B ^ OP</code></td> <td></td> </tr> <tr> <td>2</td> <td><code>bst reg/val</code></td> <td><code>B = OP &amp; 0b111</code></td> <td></td> </tr> <tr> <td>3</td> <td><code>jnz val</code></td> <td>If <code>a =/= 0</code>, jump to <code>LIT</code></td> <td></td> </tr> <tr> <td>4</td> <td><code>bxc ignore</code></td> <td><code>B = B ^ C</code></td> <td>Still takes param, but ignores it</td> </tr> <tr> <td>5</td> <td><code>out reg/val</code></td> <td>Output <code>b</code></td> <td>Only outputs lowest 3 bits</td> </tr> <tr> <td>6</td> <td><code>bdv reg/val</code></td> <td><code>B = A &gt;&gt; OP</code></td> <td>Same as <code>adv</code> but writes to <code>b</code></td> </tr> <tr> <td>7</td> <td><code>cdv reg/val</code></td> <td><code>C = A &gt;&gt; OP</code></td> <td>Same as <code>adv</code> but writes to <code>c</code></td> </tr> </tbody> </table> <h3 id="parameter-specification">Parameter specification</h3> <p>For instructions that can take <code>reg/val</code>, <code>0</code> to <code>3</code> (inclusive) are treated as literal values, <code>4</code> is register <code>A</code>, <code>5</code> is <code>B</code>, <code>6</code>, is <code>C</code>, and <code>7</code> is an error (should never happen).</p> <p>For instructions that only take <code>val</code>, it&rsquo;s always a literal value in the range <code>0</code> to <code>7</code> (inclusive).</p>AoC 2024 Day 16: Astarinatorhttps://blog.jverkamp.com/2024/12/16/aoc-2024-day-16-astarinator/Mon, 16 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/16/aoc-2024-day-16-astarinator/<h2 id="source-day-16-reindeer-mazehttpsadventofcodecom2024day16">Source: <a href="https://adventofcode.com/2024/day/16" target="_blank" rel="noopener">Day 16: Reindeer Maze</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day16.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-16-reindeer-mazehttpsadventofcodecom2024day16">Source: <a href="https://adventofcode.com/2024/day/16">Day 16: Reindeer Maze</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-1-a">Optimization 1: A*</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a maze, what is the shortest path between <code>S</code> and <code>E</code> where walking straight costs one and turning costs 1000.</p> </blockquote>AoC 2024 Day 15: Sokobaninatorhttps://blog.jverkamp.com/2024/12/15/aoc-2024-day-15-sokobaninator/Sun, 15 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/15/aoc-2024-day-15-sokobaninator/<h2 id="source-day-15-warehouse-woeshttpsadventofcodecom2024day15">Source: <a href="https://adventofcode.com/2024/day/15" target="_blank" rel="noopener">Day 15: Warehouse Woes</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day15.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-15-warehouse-woeshttpsadventofcodecom2024day15">Source: <a href="https://adventofcode.com/2024/day/15">Day 15: Warehouse Woes</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#wiiiiiiiider">WIIIIIIIIDER</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a warehouse containing floors (<code>.</code>), walls (<code>#</code>), boxes (<code>O</code>), and the player (<code>@</code>) plus a series of instructions <code>^V&lt;&gt;</code>, move the player according to the instructions, pushing boxes (which in turn can push more boxes).</p> <p>Calculate the sum of <code>y * 100 + x</code> for each box&rsquo;s final position.</p> </blockquote>The Rings of Power: Season 2https://blog.jverkamp.com/2024/12/14/the-rings-of-power-season-2/Sat, 14 Dec 2024 23:55:00 +0000https://blog.jverkamp.com/2024/12/14/the-rings-of-power-season-2/<p>There are <em>way</em> too many storylines in this show. For episodes at a time, we may not see elves. Or dwarves. Or Gandalf-but-still-not-Gandalf. I keep getting to the start of an episode and thinking &lsquo;oh hey, we haven&rsquo;t seen them in a while&rsquo;. But the interesting thing is that I got to the end of the episodes!</p> <p>Overall, it&rsquo;s what we saw in the first season, but even more so. There are so many different threads and events&ndash;things separated by decades if not centuries in the original works all crammed together.</p> <p>But on the other hand, we get more rings! (Up from zero 😄) We get bigger battles! (Not quite Helm&rsquo;s Deep, but close) More Tom Bombadil! (You&rsquo;ll just have to watch to see if you think I&rsquo;m making that one up) And we get more &hellip; humanized orcs with families and children? I&rsquo;m &hellip; not entirely sure what to think about it.</p> <p>Overall&hellip; it mostly reminds me just <em>good</em> the Peter Jackson movies were. But it&rsquo;s certainly watchable and I&rsquo;ll catch whatever season(s) come next. Onward!</p>AoC 2024 Day 14: Chaosinatorhttps://blog.jverkamp.com/2024/12/14/aoc-2024-day-14-chaosinator/Sat, 14 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/14/aoc-2024-day-14-chaosinator/<h2 id="source-day-14-restroom-redoubthttpsadventofcodecom2024day14">Source: <a href="https://adventofcode.com/2024/day/14" target="_blank" rel="noopener">Day 14: Restroom Redoubt</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day14.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-14-restroom-redoubthttpsadventofcodecom2024day14">Source: <a href="https://adventofcode.com/2024/day/14">Day 14: Restroom Redoubt</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-1-weird-shape-detection">Optimization 1: Weird shape detection</a></li> <li><a href="#correction-for-optimization-1-chinese-remainder-theorem">Correction for Optimization 1: Chinese Remainder Theorem</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a series of robots defined with initial <code>position</code> and <code>velocity</code> on a 101x103 <a href="https://en.wikipedia.org/wiki/toroidal">toroidal</a> grid, calculate where the robots will be after 100 iterations. Return the product of the number of robots in each <a href="https://en.wikipedia.org/wiki/quadrant">quadrant</a> of the final grid, ignoring the middle lines (since they&rsquo;re odd).</p> </blockquote>Alita: Battle Angelhttps://blog.jverkamp.com/2024/12/13/alita-battle-angel/Fri, 13 Dec 2024 20:00:00 +0000https://blog.jverkamp.com/2024/12/13/alita-battle-angel/<p>That is a very pretty movie. The city had a great aesthetic. I loved the variety of cyborgs, many just trying to live their lives (in the background) or&hellip; becoming ridiculously overdone weapons platforms. And I especially loved Motorball!</p> <p>Characterwise, Rosa Salazar as Alita really carried the show. I actually really enjoyed the oversized eyes (true to the manga apparently?) and her whole way of interacting with the world, the way she fights, the way she <em>moves</em>. It&rsquo;s a fascinating combination of innocence and excellence.</p> <p>Other than that&hellip; I wanted to like Christoph Walz&rsquo;s Dr. Ido more than I did&ndash;he&rsquo;s generally a wonderful actor, but I feel he just didn&rsquo;t have much to do. Likwise, Jennifer Connelly&rsquo;s Chiren. I did enjoy Mahershala Alis&rsquo; Vector and most of the evil cyborgs. They did a good job of evil/menacing!</p> <p>Plotwise? Straight forward. And the ending&hellip; really is asking for a sequel that so far as I know isn&rsquo;t coming. It&rsquo;d be neat! But you can&rsquo;t just end a movie like that! Really leaves a poor taste on an otherwise quiet enjoyable movie.</p> <p>So it goes.</p> <p>Onward!</p>AoC 2024 Day 13: Cramerinatorhttps://blog.jverkamp.com/2024/12/13/aoc-2024-day-13-cramerinator/Fri, 13 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/13/aoc-2024-day-13-cramerinator/<h2 id="source-day-13-claw-contraptionhttpsadventofcodecom2024day13">Source: <a href="https://adventofcode.com/2024/day/13" target="_blank" rel="noopener">Day 13: Claw Contraption</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day13.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-13-claw-contraptionhttpsadventofcodecom2024day13">Source: <a href="https://adventofcode.com/2024/day/13">Day 13: Claw Contraption</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-1-cramers-rule">Optimization 1: Cramer&rsquo;s Rule</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> <li><a href="#optimization-2-really-going-off-the-deep-end">Optimization 2: Really going off the deep end</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given Button A <code>(ax, ay)</code>, Button B <code>(bx, by)</code>, and Prize <code>(px, py)</code>; how many times must you press Button A (<code>a</code>) and Button B (<code>b</code>) to reach the Prize? Sum <code>3a + b</code> for each machine that has a solution.</p> </blockquote>AoC 2024 Day 12: Edginatorhttps://blog.jverkamp.com/2024/12/12/aoc-2024-day-12-edginator/Thu, 12 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/12/aoc-2024-day-12-edginator/<h2 id="source-day-12-garden-groupshttpsadventofcodecom2024day12">Source: <a href="https://adventofcode.com/2024/day/12" target="_blank" rel="noopener">Day 12: Garden Groups</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day12.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-12-garden-groupshttpsadventofcodecom2024day12">Source: <a href="https://adventofcode.com/2024/day/12">Day 12: Garden Groups</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-1-detect-corners-instead-of-edges">Optimization 1: Detect corners instead of edges</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a <code>Grid</code> of regions, calculate the sum of the product <code>perimeter * area</code> for each region.</p> </blockquote>AoC 2024 Day 11: Exponential Growthinatorhttps://blog.jverkamp.com/2024/12/11/aoc-2024-day-11-exponential-growthinator/Wed, 11 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/11/aoc-2024-day-11-exponential-growthinator/<h2 id="source-day-11-plutonian-pebbleshttpsadventofcodecom2024day11">Source: <a href="https://adventofcode.com/2024/day/11" target="_blank" rel="noopener">Day 11: Plutonian Pebbles</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day11.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-11-plutonian-pebbleshttpsadventofcodecom2024day11">Source: <a href="https://adventofcode.com/2024/day/11">Day 11: Plutonian Pebbles</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-1-recursion">Optimization 1: Recursion</a></li> <li><a href="#optimization-2-memoization">Optimization 2: Memoization</a></li> </ul> </li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-attempt-3-association-list-cache">Optimization (attempt) 3: Association list cache</a></li> <li><a href="#optimization-attempt-4-btree-cache">Optimization (attempt) 4: <code>BTree</code> cache</a></li> <li><a href="#optimization-5-iterate-over-hashmapvalue-count">Optimization 5: Iterate over <code>HashMap&lt;value, count&gt;</code></a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a sequence of values <code>v_n</code>, replace each value with the first matching rule:</p> <ul> <li><code>if v = 0 -&gt; 1</code></li> <li>If <code>v</code> has an even number of digits, split it (so <code>v = 8675</code> becomes <code>[86, 75]</code>)</li> <li>Otherwise, <code>v -&gt; v * 2024</code></li> </ul> <p>Calculate how many elements are in the sequence after 25 iterations.</p> </blockquote>AoC 2024 Day 10: Take-a-Hikinatorhttps://blog.jverkamp.com/2024/12/10/aoc-2024-day-10-take-a-hikinator/Tue, 10 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/10/aoc-2024-day-10-take-a-hikinator/<h2 id="source-day-10-hoof-ithttpsadventofcodecom2024day10">Source: <a href="https://adventofcode.com/2024/day/10" target="_blank" rel="noopener">Day 10: Hoof It</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day10.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-10-hoof-ithttpsadventofcodecom2024day10">Source: <a href="https://adventofcode.com/2024/day/10">Day 10: Hoof It</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-1-using-dynamic-programming">Optimization 1: Using dynamic programming</a></li> <li><a href="#optimization-2-smarter-bitmasks">Optimization 2: Smarter bitmasks</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a heightmap (<code>0</code> to <code>9</code>), for each <code>0</code> count how many <code>9</code> you can reach on paths that only ever increase height by exactly 1 at a time. Sum these values.</p> </blockquote>AoC 2024 Day 9: Defraginatorhttps://blog.jverkamp.com/2024/12/09/aoc-2024-day-9-defraginator/Mon, 09 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/09/aoc-2024-day-9-defraginator/<h2 id="source-day-9-disk-fragmenterhttpsadventofcodecom2024day9">Source: <a href="https://adventofcode.com/2024/day/9" target="_blank" rel="noopener">Day 9: Disk Fragmenter</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day9.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-9-disk-fragmenterhttpsadventofcodecom2024day9">Source: <a href="https://adventofcode.com/2024/day/9">Day 9: Disk Fragmenter</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-attempt-1-btree-representation">Optimization (attempt) 1: BTree representation</a></li> </ul> </li> <li><a href="#optimization-2-track-the-leftmost-empty-space">Optimization 2: Track the leftmost empty space</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a disk layout alternating between files and empty spaces, move all files as early on the disk is possible, splitting into multiple blocks. Return a checksum on the disk.</p> <p>Alternating means: <code>23331</code> would mean a 2 block file, 3 empty, a 3 block file, 3 empty, and a 1 block file.</p> <p>The checksum is the sum of <code>file_id * block_index</code> for all occupied blocks. File IDs are assigned sequentially on initial generation.</p> </blockquote>AoC 2024 Day 8: Vectorinatorhttps://blog.jverkamp.com/2024/12/08/aoc-2024-day-8-vectorinator/Sun, 08 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/08/aoc-2024-day-8-vectorinator/<h2 id="source-day-8-resonant-collinearityhttpsadventofcodecom2024day8">Source: <a href="https://adventofcode.com/2024/day/8" target="_blank" rel="noopener">Day 8: Resonant Collinearity</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day8.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-8-resonant-collinearityhttpsadventofcodecom2024day8">Source: <a href="https://adventofcode.com/2024/day/8">Day 8: Resonant Collinearity</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a grid with either open tiles (<code>.</code>) or towers (anything else), for each pair of towers, there is an antinode at each of the points that is 2x as far from one tower as the other. How many antinodes are there still within the bounds of the map?</p> </blockquote>AoC 2024 Day 7: Mathinatorhttps://blog.jverkamp.com/2024/12/07/aoc-2024-day-7-mathinator/Sat, 07 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/07/aoc-2024-day-7-mathinator/<h2 id="source-day-7-bridge-repairhttpsadventofcodecom2024day7">Source: <a href="https://adventofcode.com/2024/day/7" target="_blank" rel="noopener">Day 7: Bridge Repair</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day7.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-7-bridge-repairhttpsadventofcodecom2024day7">Source: <a href="https://adventofcode.com/2024/day/7">Day 7: Bridge Repair</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-attempt-1-queue">Optimization (attempt) 1: Queue</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#a-cleaner-way-of-looking-at-it-opset">A &lsquo;cleaner&rsquo; way of looking at it: <code>OpSet</code></a></li> <li><a href="#benchmarks">Benchmarks</a></li> <li><a href="#future-work">Future work</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a result and a list of numbers, determine if any combination of addition (<code>+</code>) and/or multiplication (<code>*</code>) using all the given numbers in order can return the result. Ignore order of operations.</p> </blockquote>AoC 2024 Day 6: Wanderinatorhttps://blog.jverkamp.com/2024/12/06/aoc-2024-day-6-wanderinator/Fri, 06 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/06/aoc-2024-day-6-wanderinator/<h2 id="source-day-6-guard-gallivanthttpsadventofcodecom2024day6">Source: <a href="https://adventofcode.com/2024/day/6" target="_blank" rel="noopener">Day 6: Guard Gallivant</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day6.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-6-guard-gallivanthttpsadventofcodecom2024day6">Source: <a href="https://adventofcode.com/2024/day/6">Day 6: Guard Gallivant</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#direction"><code>Direction</code></a></li> <li><a href="#point"><code>Point</code></a></li> <li><a href="#actually-solving-the-problem">Actually solving the problem</a></li> </ul> </li> <li><a href="#part-2">Part 2</a> <ul> <li><a href="#optimization-1-only-checking-the-path">Optimization 1: Only checking the path</a></li> <li><a href="#optimization-2-rayon-parallelization">Optimization 2: Rayon parallelization</a></li> <li><a href="#optimization-3-avoiding-clone">Optimization 3: Avoiding clone</a></li> <li><a href="#optimization-4-no-hash">Optimization 4: No hash</a></li> </ul> </li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>You are given a grid of walls (<code>#</code>), floors (<code>.</code>), and a guard (<code>^</code>, initially facing up/north). The guard walks forward until they run into a wall at which point they turn right. How many tiles does the guard reach before leaving the map.</p> </blockquote>AoC 2024 Day 5: (Not) Transitivinatorhttps://blog.jverkamp.com/2024/12/05/aoc-2024-day-5-not-transitivinator/Thu, 05 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/05/aoc-2024-day-5-not-transitivinator/<h2 id="source-day-day-5-print-queuehttpsadventofcodecom2024day5">Source: <a href="https://adventofcode.com/2024/day/5" target="_blank" rel="noopener">Day Day 5: Print Queue</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day5.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-day-5-print-queuehttpsadventofcodecom2024day5">Source: <a href="https://adventofcode.com/2024/day/5">Day Day 5: Print Queue</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#parsing">Parsing</a></li> <li><a href="#is-it-transitive">Is it transitive?</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> <li><a href="#optimization-1-drop-the-hashmap">Optimization 1: Drop the <code>hashmap</code></a></li> <li><a href="#optimization-2-bitvec">Optimization 2: <code>bitvec</code></a></li> <li><a href="#optimization-attempt-3-a-vec-of-pairs">Optimization (attempt) 3: A <code>vec</code> of pairs</a> <ul> <li><a href="#optimization-attempt-4-sorted-vec-of-pairs">Optimization (attempt) 4: Sorted <code>vec</code> of pairs</a></li> </ul> </li> <li><a href="#overall-timing-graph">Overall timing graph</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>The input is a list of pairs of the form <code>a|b</code> which defines that <code>b</code> must not come before <code>a</code>, an empty line, and then a list of values <code>a,b,c,d</code>.</p> <p>For each line that is valid for all given <code>a|b</code> rules, sum the middle number of each list.</p> </blockquote>AoC 2024 Day 4: Gridnatorhttps://blog.jverkamp.com/2024/12/04/aoc-2024-day-4-gridnator/Wed, 04 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/04/aoc-2024-day-4-gridnator/<h2 id="source-day-4-ceres-searchhttpsadventofcodecom2024day4">Source: <a href="https://adventofcode.com/2024/day/4" target="_blank" rel="noopener">Day 4: Ceres Search</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day4.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-4-ceres-searchhttpsadventofcodecom2024day4">Source: <a href="https://adventofcode.com/2024/day/4">Day 4: Ceres Search</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#grid"><code>Grid</code></a></li> <li><a href="#iterating-over-xmas">Iterating over <code>XMAS</code></a></li> <li><a href="#optimization-1-less-loops">Optimization 1: Less loops</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a grid of letters, count how many times <code>XMAS</code> appears in any direction (horizontally, vertically, diagonally; forward or backward).</p> </blockquote>AoC 2024 Day 3: Mulinatorhttps://blog.jverkamp.com/2024/12/03/aoc-2024-day-3-mulinator/Tue, 03 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/03/aoc-2024-day-3-mulinator/<h2 id="source-day-3-mull-it-overhttpsadventofcodecom2024day3">Source: <a href="https://adventofcode.com/2024/day/3" target="_blank" rel="noopener">Day 3: Mull It Over</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day3.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-3-mull-it-overhttpsadventofcodecom2024day3">Source: <a href="https://adventofcode.com/2024/day/3">Day 3: Mull It Over</a></a></li> <li><a href="#part-1">Part 1</a> <ul> <li><a href="#optimization-1-use-nom">Optimization 1: Use <code>nom</code></a></li> <li><a href="#optimization-2-manual-parsing--state-machine">Optimization 2: Manual parsing / state machine</a></li> </ul> </li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given a string containing (among other gibberish) commands of the form <code>mul({A}, {B})</code> where <code>{A}</code> and <code>{B}</code> are integers, calculate the sum of <code>A*B</code>s.</p> </blockquote>AoC 2024 Day 2: Safinatorhttps://blog.jverkamp.com/2024/12/02/aoc-2024-day-2-safinator/Mon, 02 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/02/aoc-2024-day-2-safinator/<h2 id="source-day-2-red-nosed-reportshttpsadventofcodecom2024day2">Source: <a href="https://adventofcode.com/2024/day/2" target="_blank" rel="noopener">Day 2: Red-Nosed Reports</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day2.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-2-red-nosed-reportshttpsadventofcodecom2024day2">Source: <a href="https://adventofcode.com/2024/day/2">Day 2: Red-Nosed Reports</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#optimization-1-dont-clone-vec">Optimization 1: Don&rsquo;t clone <code>vec</code></a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Count how many given lists of numbers are <code>safe</code>:</p> <ol> <li>Sorted (either ascending or descending)</li> <li><em>Strictly</em> increasing/decreasing (no duplicate values)</li> <li>No increase/decrease is by more than 3</li> </ol> </blockquote>Deadpool & Wolverinehttps://blog.jverkamp.com/2024/12/02/deadpool-wolverine/Mon, 02 Dec 2024 00:00:00 +0000https://blog.jverkamp.com/2024/12/02/deadpool-wolverine/<p>And so here it is, (almost) the entire reason I rewatched <a href="https://blog.jverkamp.com/2024/11/26/deadpool/">Deadpool</a> and <a href="https://blog.jverkamp.com/2024/11/28/deadpool-2/">Deadpool 2</a>.</p> <p>In a nutshell, it&rsquo;s pretty much exactly what you get if you took the (crass) humor of Deadpool, jammed in as many cameos as you could, and shoved it into the modern <a href="https://blog.jverkamp.com/reviews/series/marvel-cinematic-universe/">MCU</a>, multiverse, TVA, and all&hellip;</p> <blockquote> <p>Deadpool: Welcome to the MCU. You&rsquo;re joining at a bit of a low point.</p> </blockquote> <p>I&rsquo;m still not <em>actually</em> sure if that&rsquo;s a good thing?</p>Wonderlandhttps://blog.jverkamp.com/2024/12/02/wonderland/Mon, 02 Dec 2024 00:00:00 +0000https://blog.jverkamp.com/2024/12/02/wonderland/<p>I actually picked up this book the day I voted in the election. A three hour line at the local library where you&rsquo;ve run out of podcasts will do that to you. 😄 Mostly, the cover looked neat, so I figured I&rsquo;d give it a chance. Which makes this only the second physical (non-children&rsquo;s) book I&rsquo;ve read in probably a decade.</p> <p>For better or (and) for worse, the book is billed as &lsquo;if <a href="https://blog.jverkamp.com/reviews/authors/shirley-jackson/">Shirley Jackson</a> wrote The Shining&rsquo;, which&hellip; this is not. It does have a family moved out deep into the wilderness, away from the city they&rsquo;ve always loved, thrown into land where somehow you can get &hellip; feet of unexpected snow? And a tree that may or may not be talking to you?</p> <p>Mostly, I think it feels not quite finished. There are some decently creepy scenes in the book, but it never quite ramped up for me. The hallucinations the family goes through are certainly disconcerting but, barring one, they don&rsquo;t really seem to be all that dangerous. I did like that it was never entirely clear what was hallucination and what was <em>real</em> though, that was a nice touch. Then, by the time things really start falling apart, we have sudden violence/death that doesn&rsquo;t <em>really</em> land and an ending that wrapped up all too suddenly.</p> <p>I will say that I did enjoy the descriptions of the mountain wilderness and their new home. I would have liked to explore that more. It felt <em>wild</em>, which I appreciated.</p> <p>Anyways, being only the second physical book I&rsquo;ve read in a <em>long</em> while and a hardcover at that, it really did have a nice tactile feel to it and I was enjoying the book enough to read it all the way through, so I&rsquo;ve certainly come across worse.</p> <p>Onward!</p>AoC 2024 Day 1: Sortinatorhttps://blog.jverkamp.com/2024/12/01/aoc-2024-day-1-sortinator/Sun, 01 Dec 2024 00:00:03 +0000https://blog.jverkamp.com/2024/12/01/aoc-2024-day-1-sortinator/<h2 id="source-day-1-historian-hysteriahttpsadventofcodecom2024day1">Source: <a href="https://adventofcode.com/2024/day/1" target="_blank" rel="noopener">Day 1: Historian Hysteria</a></h2> <p><a href="https://github.com/jpverkamp/advent-of-code/blob/master/2024/src/day1.rs" target="_blank" rel="noopener">Full solution</a> for today (spoilers!).</p> <nav id="TableOfContents"> <ul> <li><a href="#source-day-1-historian-hysteriahttpsadventofcodecom2024day1">Source: <a href="https://adventofcode.com/2024/day/1">Day 1: Historian Hysteria</a></a></li> <li><a href="#part-1">Part 1</a></li> <li><a href="#part-2">Part 2</a></li> <li><a href="#benchmarks">Benchmarks</a></li> </ul> </nav> <h2 id="part-1">Part 1</h2> <blockquote> <p>Given two lists of numbers arranged in columns in a file, find the sum of differences (in sorted order).</p> </blockquote>Advent of Code 2024https://blog.jverkamp.com/2024/12/01/advent-of-code-2024/Sun, 01 Dec 2024 00:00:01 +0000https://blog.jverkamp.com/2024/12/01/advent-of-code-2024/<p>Let&rsquo;s do this (<a href="https://blog.jverkamp.com/2015/12/01/advent-of-code/">Advent of Code</a>) thing again!</p> <p>I&rsquo;m sticking with Rust again. I still use Python when I need to hammer out something quickly, but if I want to do something <em>correctly</em> (and especially if I want it to be fast), you can&rsquo;t beat Rust.</p> <p>Let&rsquo;s see how it goes!</p> <p>Full solutions will once again be posted to GitHub (including previous years and possibly some I haven&rsquo;t written up yet): <a href="https://github.com/jpverkamp/advent-of-code">jpverkamp/advent-of-code</a></p>Deadpool 2https://blog.jverkamp.com/2024/11/28/deadpool-2/Thu, 28 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/28/deadpool-2/language warning (duh?) Well that certainly started with a bang. After the surprsing (to some I suppose) success of Deadpool, of course they&rsquo;re going to make another. It&rsquo;s &hellip; pretty much exactly what you&rsquo;d expect if you took Deadpool and turned it up to, well, as far as Cable&rsquo;s gun goes. 😄 We have more X-Men! Well, we have Yukio. And a delightful blink and you&rsquo;ll miss it group cameo. And Cable!Moon Over Sohohttps://blog.jverkamp.com/2024/11/28/moon-over-soho/Thu, 28 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/28/moon-over-soho/<p><a href="https://blog.jverkamp.com/2024/11/01/rivers-of-london/">Rivers of London</a> got the introduction out of the way, so now it&rsquo;s time for Moon Over Soho to really build out the world.</p> <p>I really love seeing Grant exploring the magic of the world. He&rsquo;s doing <em>science</em> to <strong>magic</strong>. I do enjoy books that do that. (Plus, it&rsquo;s funny!)</p> <blockquote> <p>I had jokingly developed my own scale for vestigia based on the amount of noise Toby made when he interacted with any residual magic. I called it a yap, one yap being enough vestigia to be apparent even when I wasn&rsquo;t looking for it.</p> <p>The yap would be an SI unit, of course, and thus the standard background ambience of a Central London pub was 0.2 of a yap (0.2Y) or 200 milliyaps (200mY).</p> </blockquote> <p>Also, more worldbuilding about what the &lsquo;Rivers&rsquo; are (fae? or at least fae adjacent). More talk about vampires. And of course&hellip; What&rsquo;s the <em>deal</em> with Nightingale?</p> <blockquote> <p>“What&rsquo;s the biggest thing you&rsquo;ve zapped with a fireball?&rsquo; I asked.<br> &lsquo;That would be a tiger,&lsquo;said Nightingale.<br> &lsquo;Well don&rsquo;t tell Greenpeace,&rsquo; I said. &lsquo;They&rsquo;re an endagered species.&rsquo;<br> &lsquo;Not that sort of tiger,&rsquo; said Nightingale. &lsquo;A Panzer-kampfwagen sechs Ausf E.&rsquo;<br> I stared at him. &lsquo;You knocked out a Tiger tank with a fireball?&rsquo;<br> &lsquo;Actually I knocked out two,&rsquo; said Nightingale. &lsquo;I have to admit that the first one took three shots, one to disable the tracks, one through the driver&rsquo;s eye slot and one down the commander&rsquo;s hatch - brewed up rather nicely.”</p> </blockquote> <p>Plus, we get piles more London, this time around digging into the musical/jazz scenes. I managed to go through the first book entirely expecting Grant&rsquo;s parents to be out of the picture (that&rsquo;s just the way urban fantasy always seems to go), so it&rsquo;s fascinating to see them on page and actually playing interesting roles in the story!</p> <blockquote> <p>My Dad says that being a Londoner has nothing to do with where you&rsquo;re born. He says that there are people who get off a jumbo jet at Heathrow, go through immigration waving any kind of passport, hop on the tube and by the time the train&rsquo;s pulled into Piccadilly Circus they&rsquo;ve become a Londoner.</p> </blockquote> <p>Weirdest change of this series: Grant falls quickly and <em>deeply</em> in ~love~ lust with someone (from a case!) and there are a number of decently explicit on screen sex scenes. I didn&rsquo;t necessary see that one coming.</p> <p>Also plotwise, I was &hellip; surprised by the ending. Not in who the big bad ended up being, more more what happened after that. It felt sudden and perhaps unearned, like we&rsquo;d reached the end of the book and had to warp things up. I&rsquo;m curious if we&rsquo;ll get any fallout of that in future books, but I don&rsquo;t really expect to.</p> <p>I did really like the scenes with Leslie though (from the first book), especially&ndash;and counter to my first point&ndash;her ending. That&hellip; now <strong>that</strong> has some interesting potential for the series.</p>Deadpoolhttps://blog.jverkamp.com/2024/11/26/deadpool/Tue, 26 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/26/deadpool/language warning (duh?) Oh hey, Deadpool &amp; Wolverine is out on streaming (and it&rsquo;s been a while since I reviewed or even watched a movie). Let&rsquo;s rewatch these! From the studio that inexplicably sewed his fucking mouth shut the first time comes five-time Academy Award viewer, Ryan Reynolds in an eHarmony date with destiny. Ladies and gentlemen, I give you&hellip; me! Deadpool. I&hellip; totally forgot that this movie starts with the highway shootout scene that made the demo reel.Spider-Gwen, Vol. 4: Predatorshttps://blog.jverkamp.com/2024/11/24/spider-gwen-vol.-4-predators/Sun, 24 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/24/spider-gwen-vol.-4-predators/Okay, after Sitting in a Tree, back to our regularly scheduled Spider-Gwen! lol. And then of course, as these things do everything escalated. Harry/Lizard. Venom. Mr. Murderhands. All the chaos! The main Spider-Gwen storyline was getting a bit weak there, but I&rsquo;m glad to see this as a return to form. I&rsquo;m really curious what happens next here. Onward!Spider-Man/Spider-Gwen: Sitting in a Treehttps://blog.jverkamp.com/2024/11/24/spider-man/spider-gwen-sitting-in-a-tree/Sun, 24 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/24/spider-man/spider-gwen-sitting-in-a-tree/My thoughts exactly. Issues 16 and 17 of Spider-Gwen are apparently a crossover with Spider-Man… so here we go? Of course we go right from the above to “Miles’ dad is missing”, so I’m not entirely sure this is going to be a helpful aside for Spider-Gwen. We shall see! … seriously? I have no idea what&rsquo;s going on with that&hellip; but I&rsquo;m going to leave that one for another day.Spider-Gwen, Vol. 3: Long-Distancehttps://blog.jverkamp.com/2024/11/23/spider-gwen-vol.-3-long-distance/Sat, 23 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/23/spider-gwen-vol.-3-long-distance/<p>The ongoing developments of Spider-Gwen and this universe’s Matt Murdoch.</p> <p>I’m intrigued!</p> <p>And then we get an annual made of a bunch of random stories. Cute enough. But… I want the main storyline.</p> <p>The All New Wolverine body swap was a lot of fun though.</p> <p>Onward!</p>The Scarhttps://blog.jverkamp.com/2024/11/22/the-scar/Fri, 22 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/22/the-scar/<blockquote> <p>Scars are not injuries, Tanner Sack. A scar is a healing. After injury, a scar is what makes you whole.</p> </blockquote> <p>Okay, I really thought that <a href="https://blog.jverkamp.com/2024/10/04/perdido-street-station/">Perdido Street Station</a> was one of a kind. A dark, twisted magical world, full of strange creatures, stranger magic, and some truly weird and terrible things lurking just under the surface.</p> <p>Well, <em>The Scar</em> manged to do quite the job proving me wrong.</p> <p>First off, we have the setting. In Perdido Street Station, the city of New Crobuzon itself was as much as a character in the stories as any of the, well, characters. So imagine my surprise where the city is only barely mentioned this time around: instead, we have Armada, a mighty floating city built on the back of untold years of captured (and otherwise) ships lashed all together.</p> <blockquote> <p>Vessels knocked together for hour upon hour, like bones, like someone infinitely stupid and patient at the door of an empty house.</p> </blockquote> <p>And deep under this city? Mile long chains, designed to harness&hellip; <em>something</em> to the city.</p> <blockquote> <p>So many truths have been kept from me. This violent, pointless voyage has been sopping with blood. I feel thick and sick with it. And that is all: contingent and brutal without meaning. There is nothing to be learnt here. No ecstatic forgetting. There is no redemption in the sea.</p> </blockquote> <p>So cool.</p> <p>And that&rsquo;s not even getting into dead languages, weapsons and fighting styles that harness Possibility itself, a race of deadly mosquito people, and all the other terrors one might find on (and under) the ocean.</p> <p>And then the characters. Bellis Coldwine, a linguist of all things (I love linguistics). An acquaintances of Isaac Dan der Grimnebulin&rsquo;s (I love that name) on the run after the whole Slakemoth thing. Stuck on Armada, just looking for a way home.</p> <p>Silas Fennec. A traveler and so much more from New Crobuzon, with his fingers (and tongue (you&rsquo;ll see)) in just about everything going on one way or another.</p> <p>Tanner Sack. A Remade, fully adapted to life on&ndash;and in&ndash;the sea around Armada.</p> <p>Uther Doul. A mysterious figure with truly <em>weird</em> sword.</p> <p>The Lovers. Rulers of Armada. Referred to in text as &lsquo;The Lover&rsquo; and &lsquo;The Lover&rsquo;.</p> <p>I just love how strange and <em>different</em> Miéville manages to write characters.</p> <blockquote> <p>In the deepest places, where physical norms collapse under the crushing water, bodies still fall softly through the dark, days after their vessels have capsized. They decay on their long journey down. Nothing will hit the black sand at the bottom of the world but algae-covered bones.</p> </blockquote> <p>Overall, if anything I like <em>The Scar</em> even <strong>more</strong> than I did <em>Perdido Street Station</em>. I can&rsquo;t wait to see what&rsquo;s next!</p>Spider-Gwen, Vol. 2: Weapon of Choicehttps://blog.jverkamp.com/2024/11/20/spider-gwen-vol.-2-weapon-of-choice/Wed, 20 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/20/spider-gwen-vol.-2-weapon-of-choice/<p>And&hellip; after <a href="https://blog.jverkamp.com/2024/11/18/spider-women/">Spider-Women</a>, we&rsquo;re back!</p> <p>Two (ish) volumes in and we already have the crisis of faith/lost powers one. Whee!</p> <p>With Kraven no less. Such an odd villain.</p> <p>Time running out for Gwen, Castle on her tail—and on the edge it seems—and Captain Stacy has a solution. Luckily, Gwen made friends with… Reed Richards?</p> <p>Intense. Curious how long this lasts.</p> <hr>Spider-Womenhttps://blog.jverkamp.com/2024/11/18/spider-women/Mon, 18 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/18/spider-women/Spider-Women team up! Coming soon to an Earth-65 near you. Also, that’s certainly an art style. It’s jarring in most crossovers but even more so in this one for some reason. Anyways. The idea of Jessica Drew’s alternate Agent Drew being a man is somewhat amusing, given her Ultimate version. It’s fascinating to see someone so potentially character defining to Spider-Gwen—like losing her powers! —be in a crossover story. I missed this as I was first planning&hellip; Glad I went back and caught it, kind of important that one.Spider-Gwen, Vol. 1: Greater Powerhttps://blog.jverkamp.com/2024/11/17/spider-gwen-vol.-1-greater-power/Sun, 17 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/17/spider-gwen-vol.-1-greater-power/<p>When worlds collide…</p> <p><img src="https://blog.jverkamp.com/embeds/books/attachments/spider-gwen-2015-v1-textbundle-eeebab.jpeg" alt=""></p> <p>In this universe, Peter Parker wanted to be a hero and got killed for it. So… why is the Lizard apparently still running around?</p> <p>Also, the Green Goblin!</p> <p>So much in this world built around a the severe ‘not what it looks like’ of Peter’s death. Strains incredulity… but that’s comics. And it (so far) is working for me.</p> <p>The introduction of this world’s Captain America was fun. I appreciate the quick backstory.</p> <p>Likewise Harry Osborne. Dungeons and Dragons nerds unite!</p> <p>I’m enjoying this series.</p> <p>Onward!</p>Spider-Gwen, Vol. 0: Most Wanted?https://blog.jverkamp.com/2024/11/16/spider-gwen-vol.-0-most-wanted/Sat, 16 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/16/spider-gwen-vol.-0-most-wanted/<p>It’s been a minute. Let’s read some Spider-Gwen. A Reddit post has a <a href="https://www.reddit.com/r/SpiderGwen/s/F0Ml2g31iH" target="_blank" rel="noopener">reading order</a>. Man comics are complicated.</p> <p>So here we have Spider-Gwen. An alternate Spider Gwen Stacy! Her dad’s a cop (hunting her) and life is complicated.</p> <p>We have a small pile of villains—mostly a Vulture, but also Kingpin, Frank Castle, and Matt Murdoch. Ambiguous at both. I’m curious where it goes from here!</p> <p>A bit of a chaotic start, but I’m looking forward to it!</p>Alcatraz Versus the Evil Librarianshttps://blog.jverkamp.com/2024/11/10/alcatraz-versus-the-evil-librarians/Sun, 10 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/10/alcatraz-versus-the-evil-librarians/<p>I&rsquo;ve read pretty much all of <a href="https://blog.jverkamp.com/reviews/authors/brandon-sanderson/">Brandon Sanderson</a>&rsquo;s works&hellip; yet somehow I&rsquo;ve managed to completely miss <em>Alcatraz vs. the Evil Librarians</em>. Let&rsquo;s remedy that.</p> <p>Short version: Alcatraz reminds me a decent bit of <a href="https://blog.jverkamp.com/2023/07/27/the-frugal-wizards-handbook-for-surviving-medieval-england/">Frugal Wizard</a>&ndash;which was actually my least favorite of the <a href="https://blog.jverkamp.com/reviews/series/year-of-sanderson/">Year of Sanderson</a> secret projects. But so far at least, I&rsquo;m enjoying this series quite a bit more.</p> <p>Slightly longer version:</p> <blockquote> <p>In the Hushlands—those Librarian-controlled nations such as the United States, Canada, and England—this book will be published as a work of fantasy. Do not be fooled! This is no work of fiction, nor is my name really Brandon Sanderson. Both are guises to hide the book from Librarian agents. Unfortunately, even with these precautions, I suspect that the Librarians will discover the book and ban it. In that case, our Free Kingdom Agents will have to sneak into libraries and bookstores to put it on shelves. Count yourself lucky if you’ve found one of these secret copies.</p> </blockquote> <p>This is a (non-<a href="https://blog.jverkamp.com/reviews/series/the-cosmere/">Cosmere</a>) YA novel &lsquo;written by&rsquo; our titular Alcatraz as he learns that the world he&rsquo;s always known is full of lies (perpetrated by a cabal of EVIL LIBRARIANS) who are now, of course, out to capture and/or kill him.</p> <p>As one does.</p> <p>It&rsquo;s <em>impressively</em> meta, with almost constant comments from Alcatraz as narrator, talking about writers, writing, fiction, and just about anything else.</p> <blockquote> <p>Authors also create lovable, friendly characters, then proceed to do terrible things to them, like throw them in unsightly librarian-controlled dungeons. This makes readers feel hurt and worried for the characters. The simple truth is that authors like making people squirm. If this weren&rsquo;t the case, all novels would be filled completely with cute bunnies having birthday parties.</p> </blockquote> <p>Which, from my perspective as both a reader and writer myself, is amusing, but feels like it might be a bit weirder / too meta for a much younger reader?</p> <blockquote> <p>If you don&rsquo;t believe what I&rsquo;m telling you, then ask yourself this: would any decent, kind-hearted individual become a writer? Of course not.</p> </blockquote> <p>Well, so far my children are enjoying it!</p> <p>I suppose we&rsquo;ll see where we go from here.</p> <p>Worldbuildingwise, we haven&rsquo;t learned <em>that</em> much about how &lsquo;magic&rsquo; works in this world (we already have technology based almost entirely on glass along with &lsquo;Talents&rsquo;, which seem somewhat chaotic). That&rsquo;s kind of Sanderson&rsquo;s <em>thing</em>, so I expect a lot more there. The world is chaotic and strains believability when it comes to &lsquo;could you <em>actually</em> have a hidden world like this&rsquo; but&hellip; suspend disbelief and GO WITH IT.</p> <p>Characterwise&hellip; I&rsquo;m not actually sure how <em>much</em> I like Alcatraz. So far, I like supporting cast Grandpa Smedry and Bastille quite a bit more. I expect that&rsquo;s kind of the point.</p> <p>Overall, enjoyed.</p> <p>Onward!</p>How to ADHD: An Insider's Guide to Working with Your Brainhttps://blog.jverkamp.com/2024/11/05/how-to-adhd-an-insiders-guide-to-working-with-your-brain/Tue, 05 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/05/how-to-adhd-an-insiders-guide-to-working-with-your-brain/<blockquote> <p>Be yourself!<br> …No, not like that!<br> — SOCIETY</p> </blockquote> <p>Brains are weird yo. The older I get/the more I learn, the more true I find this.</p> <p>Reading books like this (or alternatively <a href="https://blog.jverkamp.com/2023/04/07/welcome-to-the-autistic-community/">this</a> or <a href="https://blog.jverkamp.com/2024/02/18/look-me-in-the-eye-my-life-with-aspergers/">Look Me in the Eye: My Life with Asperger&#39;s</a> or <a href="https://blog.jverkamp.com/2024/02/20/born-on-a-blue-day/">Born on a Blue Day</a>) helps. Discovering that there are other weird brains out there (I do love McCabe&rsquo;s &lsquo;hello brains&rsquo;) is wonderful. Seeing both how they see the world the same&ndash;and perhaps even more so, the differences even within these groups&ndash;is like a lightbulb going off.</p> <p>Specifically for this one, the idea that just because you are (/ appear to be) succeeding at life&hellip; doesn&rsquo;t necessarily mean that it&rsquo;s not coming at a cost.</p> <blockquote> <p>The fact that I could sometimes exceed expectations made it even more frustrating for me—and everyone around me—when I failed to meet the basic ones.</p> </blockquote> <p>I think that if you have ADHD&ndash;or have someone close to you that does&hellip; and chances are <em>really</em> good that you do, even if you don&rsquo;t know it&ndash;I think this book is worth a read.</p> <blockquote> <p>ADHD is a terrible name for the condition, because &lsquo;attention deficit&rsquo; implies a lack of attention. However, our brains can focus quite well sometimes&ndash;particularly on things we find engaging, such as our hobbies, crushes, video games, and so on. The trouble is, we can&rsquo;t control the intensity of our focus or what we focus on. . . . This big misconception makes people less likely to seek a diagnosis because they are able to focus sometimes.</p> </blockquote> <p>Explanations, tools to deal / adapt to a world that isn&rsquo;t necessarily built for you, and a ton of quotes from a ton of people.</p> <blockquote> <p>Over the years, we’ve shared long, deep discussions about what it means to have ADHD. About how being “normal” isn’t a realistic goal but being functional is. About how sometimes, paradoxically, being functional means behaving in less (neuro)typical ways, so we can be more mentally healthy, happy, and generous humans for ourselves and for those we love.</p> </blockquote> <p>Well worth the read.</p> <p>Onward!</p>Rivers of Londonhttps://blog.jverkamp.com/2024/11/01/rivers-of-london/Fri, 01 Nov 2024 00:00:00 +0000https://blog.jverkamp.com/2024/11/01/rivers-of-london/<p>Whenever I come across a &ldquo;I&rsquo;ve read all of <a href="https://blog.jverkamp.com/reviews/series/the-dresden-files/">The Dresden Files</a>, now what?&rdquo; discussion, one of the series that always seems to come up is Ben Aaronovitch&rsquo;s Rivers of London. They&rsquo;re not <em>entirely</em> the same, but I get why people cross recommend them.</p> <p>Basically, we have a London cop who stumbles upon a mysterious killing, questions a ghost, gets recruited by the &lsquo;magical&rsquo; side of the London police, ends up meeting and befriending several rivers (see, the title! Also, it ends up making more sense in the story), and saves the day.</p> <blockquote> <p>“Are they really gods?&quot;</p> <p>&ldquo;I never worry about theological questions,&rdquo; said Nightingale. &ldquo;They exist, they have power and they can breach the Queen&rsquo;s peace - that makes them a police matter.”</p> </blockquote> <p>More or less.</p> <p>I think my favorite part of the series (so far) is the humor, most especially the sheer Britishness of it (not being British, I have no idea how accurate it all is, but it&rsquo;s good enough for me!).</p> <blockquote> <p>He was from Yorkshire, or somewhere like that, and like many Northerners with issues, he&rsquo;d moved to London as a cheap alternative to psychotherapy.</p> </blockquote> <p>Oh, and also picking fun at it&rsquo;s own genre of course.</p> <blockquote> <p>“You put a spell on the dog,&rdquo; I said as we left the house.<br> &ldquo;Just a small one,&rdquo; said Nightingale.<br> &ldquo;So magic is real,&rdquo; I said. &ldquo;Which makes you a&hellip;what?&rdquo;<br> &ldquo;A wizard.&rdquo;<br> &ldquo;Like Harry Potter?&rdquo;<br> Nightingale sighed. &ldquo;No,&rdquo; he said. &ldquo;Not like Harry Potter.&rdquo;<br> &ldquo;In what way?&rdquo;<br> &ldquo;I&rsquo;m not a fictional character,&rdquo; said Nightingale.”</p> </blockquote> <p>Second up, the introductions of magic. Any world where the characters try to treat magic as a science and figure out <em>how in the world it <strong>really</strong> works</em> is a great one in my book.</p> <p>There&rsquo;s an <em>awful</em> lot of hinted at worldbuilding there. I hope and expect to see a lot more of that in future books. We&rsquo;ll just have to see which way all that goes.</p> <p>Also also, having recently decided that learning Latin was just a great idea as our main character (although for (un)fortunately different reasons I suppose):</p> <blockquote> <p>Carved above the lintel were the words SCIENTIA POTESTAS EST. Science points east, I wondered? Science is portentous, yes? Science protests too much. Scientific potatoes rule. Had I stumbled on the lair of dangerous plant geneticists?</p> </blockquote> <p>😄</p> <p>Spoilers, I guess. 😄</p> <p>Overall, I had a lot of fun with this book. I&rsquo;m looking forward to seeing where it goes from here!</p>