<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>about on about me</title>
    <link>/</link>
    <description>Recent content in about on about me</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 08 Aug 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>rust ray tracer</title>
      <link>/projects/rust-ray-tracer/</link>
      <pubDate>Tue, 08 Aug 2023 00:00:00 +0000</pubDate>
      <guid>/projects/rust-ray-tracer/</guid>
      <description>&lt;h3 id=&#34;what&#34;&gt;what?&lt;/h3&gt;&#xA;&lt;p&gt;good old ray tracer again&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/ray-tracer/rust-spheres.png&#34; alt=&#34;final scene&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;why&#34;&gt;why?&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;earlier last year i followed &lt;a href=&#34;https://raytracing.github.io/books/RayTracingInOneWeekend.html&#34;&gt;&lt;em&gt;Ray Tracing in One Weekend&lt;/em&gt;&lt;/a&gt; and implemented it in go to get a hang of the language. it was all nice and fun but rendering the final scene took arround 20 minutes in my M1 Macbook Air, so i was left feeling a little disatisfied.&lt;/li&gt;&#xA;&lt;li&gt;i have been solving many &lt;a href=&#34;https://open.kattis.com&#34;&gt;&lt;em&gt;kattis&lt;/em&gt;&lt;/a&gt; problems in rust (particularly those that are just too slow to run in python), and i wanted to try rust on a slightly more complicated &amp;lsquo;project&amp;rsquo;&lt;/li&gt;&#xA;&lt;li&gt;i really wanted to see how rust concurrency feels.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;conclusions&#34;&gt;conclusions&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;computer graphics are very hard to debug. really. really. hard. i spent days fixing a very subtle bug.&lt;/li&gt;&#xA;&lt;li&gt;i started defining a trait &amp;lsquo;hitable&amp;rsquo; and was planning to just extend types as i needed them, but as i started testing it, it really wasn&amp;rsquo;t any faster than the go version. so i decided to replace as many allocations as possible and not use any dynamic dispatch and i think i&amp;rsquo;m happy with the results. i think rust enums make up for the lack of abstractness in this scenario&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.rs/rayon/latest/rayon/&#34;&gt;&lt;em&gt;rayon&lt;/em&gt;&lt;/a&gt; is cool and very very simple&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;todo&#34;&gt;todo&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lights!&lt;/li&gt;&#xA;&lt;li&gt;more materials!&lt;/li&gt;&#xA;&lt;li&gt;more geometries!&lt;/li&gt;&#xA;&lt;li&gt;textures!&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raytracing.github.io/books/RayTracingTheNextWeek.html&#34;&gt;&lt;em&gt;Ray Tracing: The Next Week&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raytracing.github.io/books/RayTracingTheRestOfYourLife.html&#34;&gt;&lt;em&gt;Ray Tracing: The Rest of Your Life&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;links&#34;&gt;links&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Ikerlb/rust-ray-tracer&#34;&gt;code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>mandelrust</title>
      <link>/projects/mandelrust/</link>
      <pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
      <guid>/projects/mandelrust/</guid>
      <description>&lt;h3 id=&#34;what&#34;&gt;what?&lt;/h3&gt;&#xA;&lt;p&gt;i basically wanted to have a random zoom on an interesting mandelbrot point:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-0.761574 + -0.0847596i &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;why&#34;&gt;why?&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i wanted to try out rust in an aws lambda function&lt;/li&gt;&#xA;&lt;li&gt;i wanted to build that lambda function with cdk (i&amp;rsquo;m kinda procrastinating from learning/using terraform)&lt;/li&gt;&#xA;&lt;li&gt;i was kinda hyped to use rust after reading about it&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;conclusions&#34;&gt;conclusions&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i&amp;rsquo;m starting to dig aws hehe.&lt;/li&gt;&#xA;&lt;li&gt;i &lt;strong&gt;really&lt;/strong&gt; like rust and will keep using it as much as i can&lt;/li&gt;&#xA;&lt;li&gt;i will never ever find mandelbrot set uninteresting&lt;/li&gt;&#xA;&lt;li&gt;rust lambda startup time is unlike anything i&amp;rsquo;ve ever seen. it draws (for me, at least) the line between server and serverless kinda blurry&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;todo&#34;&gt;todo&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;well this seems obvious but i don&amp;rsquo;t want to use a single point and a random zoom but rather a set of interesting points and a random zoom! all this seems kinda time consuming so i guess i&amp;rsquo;ll leave it like this for a while&lt;/li&gt;&#xA;&lt;li&gt;i also want to optimize mb allocated for each lambda execution. 128mb takes arround 13 seconds to finish, while 1gb takes arround 3.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;update-10-5-2022&#34;&gt;update 10-5-2022&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i&amp;rsquo;ve been consuming a lot of terraform content. but as you may know by now, in the realm of programming you learn mostly by getting your hands dirty, so i tried importing (this is the single feature i liked the most) most of the resources i used on cdk and got them up &amp;amp; running in terraform. it is beautiful.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;links&#34;&gt;links&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://lissarrague.xyz/mandelrust/&#34;&gt;demo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Ikerlb/mandelrust-lambda&#34;&gt;cdk code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Ikerlb/tf-mandelrust&#34;&gt;terraform code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>go ray tracer</title>
      <link>/projects/go-ray-tracer/</link>
      <pubDate>Mon, 21 Feb 2022 00:00:00 +0000</pubDate>
      <guid>/projects/go-ray-tracer/</guid>
      <description>&lt;h3 id=&#34;what&#34;&gt;what?&lt;/h3&gt;&#xA;&lt;p&gt;a ray tracer of course! if you are not familiar with the term, it is basically a rendering technique that is very intuitive, and fairly easy to implement naively (and yields very decent results), but tends to be computationally expensive.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/ray-tracer/go-spheres.png&#34; alt=&#34;final scene&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;why&#34;&gt;why?&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;back in my Modeling and Programming course, we were asked to implement a ray tracer in order to get one extra credit. back then, though, even fairly easy problems seemed very scary and alien to me (plus, i had a pretty good score already). i came across &lt;a href=&#34;https://raytracing.github.io/books/RayTracingInOneWeekend.html&#34;&gt;&lt;em&gt;Ray Tracing in One Weekend&lt;/em&gt;&lt;/a&gt; recently and i thought i owed it to my old self to get it done as soon as possible.&lt;/li&gt;&#xA;&lt;li&gt;this should come as not surprise if you&amp;rsquo;ve read &lt;strong&gt;anything&lt;/strong&gt; i post in this website, but i wanted to see how go felt when programming something bigger than a &lt;a href=&#34;https://leetcode.com&#34;&gt;leetcode&lt;/a&gt; problem.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;conclusions&#34;&gt;conclusions&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;this was really really fun. if you haven&amp;rsquo;t already give it a go (pun intended)! it is supremely well written and if you&amp;rsquo;re anything like me, you&amp;rsquo;ll have a blast.&lt;/li&gt;&#xA;&lt;li&gt;i implemented some very simple concurrency and i&amp;rsquo;m in awe of how easy goroutines and channels make for concurrent design. (also, i saw &lt;a href=&#34;https://www.youtube.com/watch?v=oV9rvDllKEg&#34;&gt;this&lt;/a&gt; long ago and it was in my mind throughout this project)&lt;/li&gt;&#xA;&lt;li&gt;i think i&amp;rsquo;m starting to like go (i mean, it is as simple as it gets). plus &lt;a href=&#34;https://go.dev/doc/tutorial/generics&#34;&gt;generics!&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;todo&#34;&gt;todo&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;while making it concurrent and giving it more cores to run in parallel made it significantly faster, i&amp;rsquo;m still not satisfied by the results. rendering the final scene of the project takes about 15 minutes in my M1 Macbook Air with the full 8 cores. i think i can squeeze some performance by making garbage collector do less work. we&amp;rsquo;ll see how it goes.&lt;/li&gt;&#xA;&lt;li&gt;lights!&lt;/li&gt;&#xA;&lt;li&gt;more materials!&lt;/li&gt;&#xA;&lt;li&gt;more geometries!&lt;/li&gt;&#xA;&lt;li&gt;textures!&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raytracing.github.io/books/RayTracingTheNextWeek.html&#34;&gt;&lt;em&gt;Ray Tracing: The Next Week&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raytracing.github.io/books/RayTracingTheRestOfYourLife.html&#34;&gt;&lt;em&gt;Ray Tracing: The Rest of Your Life&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;links&#34;&gt;links&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Ikerlb/ray-tracer&#34;&gt;code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>day 12</title>
      <link>/projects/advent-of-code-2021/day12/</link>
      <pubDate>Sun, 12 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day12/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/12&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/12&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;as long as there are no upper-cased direct loops (ie, A - B), simple dfs works for both cases:&lt;/p&gt;&#xA;&lt;p&gt;for part 1:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dfs1&lt;/span&gt;(g, node, visited):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; node &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;end&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; nn &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; g[node]:    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; nn&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isupper() &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; nn &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; visited:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            visited&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add(nn) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            res &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; dfs1(g, nn, visited)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            visited&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;discard(nn)    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; res&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;for part 2:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dfs2&lt;/span&gt;(g, node, visited, used):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; node &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;end&amp;#34;&lt;/span&gt;:        &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; nn &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; g[node]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; nn&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isupper():    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            res &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; dfs2(g, nn, visited, used)    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; nn &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; visited &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; nn &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;start&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; used:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            res &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; dfs2(g, nn, visited, &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; nn &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; visited:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            visited&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add(nn)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            res &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; dfs2(g, nn, visited, used)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            visited&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;discard(nn)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; res&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>day 11</title>
      <link>/projects/advent-of-code-2021/day11/</link>
      <pubDate>Sat, 11 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day11/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/11&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/11&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;the only thing we have to be careful about in this problem is avoid counting octopuses more than once&lt;/p&gt;&#xA;&lt;p&gt;but otherwise, just simulate the steps&lt;/p&gt;&#xA;&lt;p&gt;here&amp;rsquo;s the step function i used, that returns the number of flashes that happened during each time period&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# mutates grid&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;step&lt;/span&gt;(grid):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    n, m &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; len(grid), len(grid[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; r, c &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; product(range(n), range(m)):   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;        &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;: &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            s&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extend(neighbors(grid, r, c))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; s:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        r, c &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pop()    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            s&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extend(neighbors(grid, r, c))    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flashes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; r, c &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; product(range(n), range(m)):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            flashes &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; flashes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>day 10</title>
      <link>/projects/advent-of-code-2021/day10/</link>
      <pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day10/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/10&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/10&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;using a stack, you can figure out exactly where does the string become invalid, if at all&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;m &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;}&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;)&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;]&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;parse&lt;/span&gt;(l):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; c &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; l:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; c &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; m:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            s&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(c)    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; m[s[&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; c:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            s&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pop()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; s, c&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; s, &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;if the stack is not empty at the end, it means it is incomplete and that the only way to complete it would be to reverse the stack and append it to the original string&lt;/p&gt;</description>
    </item>
    <item>
      <title>day 9</title>
      <link>/projects/advent-of-code-2021/day9/</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day9/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/9&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/9&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;for part one, simply count the number of cells in which all neighbors are strictly greater.&lt;/p&gt;&#xA;&lt;p&gt;for part two, floodfill until you have previously visited or until you find a height 9&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;floodfill&lt;/span&gt;(grid, r, c):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;: &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s, grid[r][c] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; nr, nc &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; neighbors(grid, r, c):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; floodfill(grid, nr, nc)    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>day 8</title>
      <link>/projects/advent-of-code-2021/day8/</link>
      <pubDate>Wed, 08 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day8/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/8&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/8&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;for the first part, simply count the number of words in the output section that have lengths 2, 3, 4 or 7&lt;/p&gt;&#xA;&lt;p&gt;for the second part, i couldn&amp;rsquo;t think of a better solution than just try permutations until the wires make sense&lt;/p&gt;</description>
    </item>
    <item>
      <title>day 7</title>
      <link>/projects/advent-of-code-2021/day7/</link>
      <pubDate>Tue, 07 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day7/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/7&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/7&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cost&lt;/span&gt;(l, n, f):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; sum(f(e, n) &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; e &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; l)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;for the first part, the solution is the median.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;median&lt;/span&gt;(l):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; l[len(l) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;part1&lt;/span&gt;(l):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    m &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; median(l)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; cost(l, m, &lt;span style=&#34;color:#66d9ef&#34;&gt;lambda&lt;/span&gt; x, y: abs(x &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; y))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;for the second part, the solution is the average.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;part2&lt;/span&gt;(l):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    avg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sum(l) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; len(l)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    f &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;lambda&lt;/span&gt; x, y: gauss(abs(x &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; y))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; min(cost(l, ceil(avg), f), cost(l, floor(avg), f)) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>day 6</title>
      <link>/projects/advent-of-code-2021/day6/</link>
      <pubDate>Mon, 06 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day6/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/6&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/6&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;this was very fun!&lt;/p&gt;&#xA;&lt;p&gt;my first solution consisted on a simple simulation on a double ended queue. this solution is linear on the number of days and it handles both parts without a problem.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# mutates q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;step&lt;/span&gt;(q):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    n, last &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; q[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], q&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pop()    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    q[&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    q&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(last)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    q&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rotate(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;however, it ocurred to me while working, that i could simply simulate a single step of this as a matrix multiplication. and well, if you have repeated matrix multiplication, you have matrix exponentation. and if you have matrix exponentiation you have &lt;strong&gt;fast&lt;/strong&gt; matrix exponentiation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>day 5</title>
      <link>/projects/advent-of-code-2021/day5/</link>
      <pubDate>Sun, 05 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day5/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/5&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/5&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;nothing interesting for this problem. just walk from p1 to p2 and add all the points you walk to a counter. for part one, simply filter those who are diagonal (start[1] == end[1] or start[0] == end[0])&lt;/p&gt;&#xA;&lt;p&gt;for part two, don&amp;rsquo;t filter.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;span&lt;/span&gt;(p1, p2):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sx, sy &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; p1 &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ex, ey &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; p2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dx &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; delta(sx, ex)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dy &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; delta(sy, ey)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; p1 &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; p2:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;yield&lt;/span&gt; p1    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        p1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (p1[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; dx, p1[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; dy)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;yield&lt;/span&gt; p1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count_points&lt;/span&gt;(segments):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    c &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Counter()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; p1, p2 &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; segments:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; span(p1, p2):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            c[p] &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; c&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>day 4</title>
      <link>/projects/advent-of-code-2021/day4/</link>
      <pubDate>Sat, 04 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day4/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/4&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/4&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ok. this was fun!&lt;/p&gt;&#xA;&lt;p&gt;for both parts, i just simulated all boards with a class.&#xA;only interesting thing is i kept track of all numbers contained in a board and added a rows and cols array, containing how many remaining numbers until a bingo in each row/col. this made it very easy to know if marking a number in a board yields a bingo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>day 3</title>
      <link>/projects/advent-of-code-2021/day3/</link>
      <pubDate>Fri, 03 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day3/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/3&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/3&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;to solve each part, we basically need a function that can give us the number of bits turned on for a certain digit index:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count_by_index&lt;/span&gt;(nums, i):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    total &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; len(nums)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ones &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; n &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; nums:            &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (n &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; i) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ones &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; ones, total &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; ones  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;you can get the gamma rate by simply iterating over each possible index and assigning that index to be the digit of the &lt;strong&gt;most&lt;/strong&gt; common digit of all numbers for that index.&lt;/p&gt;</description>
    </item>
    <item>
      <title>day 2</title>
      <link>/projects/advent-of-code-2021/day2/</link>
      <pubDate>Thu, 02 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day2/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/2&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/2&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;for part one, it is a very straight forward simulation.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-clojure&#34; data-lang=&#34;clojure&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;defn &lt;/span&gt;step-part1 [x y cmd i]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#a6e22e&#34;&gt;cond&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (= cmd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;forward&amp;#34;&lt;/span&gt;) [(+ x i) y]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (= cmd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;up&amp;#34;&lt;/span&gt;) [x (- y i)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;:else&lt;/span&gt; [x (+ y i)]))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;part two is very similar but we also need to keep track of the aim&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-clojure&#34; data-lang=&#34;clojure&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;defn &lt;/span&gt;step-part2 [x y aim cmd i]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#a6e22e&#34;&gt;cond&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (= cmd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;forward&amp;#34;&lt;/span&gt;) [(+ x i) (- y (* aim i)) aim]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (= cmd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;up&amp;#34;&lt;/span&gt;) [x y (+ aim i)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;:else&lt;/span&gt; [x y (- aim i)]))&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>day 1</title>
      <link>/projects/advent-of-code-2021/day1/</link>
      <pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate>
      <guid>/projects/advent-of-code-2021/day1/</guid>
      <description>&lt;p&gt;you can find the description &lt;a href=&#34;https://adventofcode.com/2021/day/1&#34;&gt;here&lt;/a&gt;&#xA;and you can find the code &lt;a href=&#34;https://github.com/Ikerlb/AoC2021/tree/master/1&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;well my solution uses a very simple (fixed size) sliding window technique, with the first part being a size 1 window and the second part a size 3 window.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;solve&lt;/span&gt;(l: [int], k: int):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sum(l[:k])    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    res &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(k, len(l)):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ss &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; l[i &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; k] &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; l[i]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        res &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; ss&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ss&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; res&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>reading log</title>
      <link>/reading_log/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/reading_log/</guid>
      <description>&lt;h2 id=&#34;2022&#34;&gt;2022&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com/-/es/Yevgeniy-Brikman/dp/1492046906&#34;&gt;Terraform: Up &amp;amp; Running: Writing Infrastructure as Code&lt;/a&gt;: terraform is really cool. good book!&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com/Building-Event-Driven-Microservices-Leveraging-Organizational/dp/1492057894&#34;&gt;Building Event-Driven Microservices: Leveraging Organizational Data at Scale&lt;/a&gt;: currently reading it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com/Man-Future-Visionary-Life-Neumann/dp/1324003995&#34;&gt;The Man from the Future&lt;/a&gt;: currently reading it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com/Deep-Learning-Python-Francois-Chollet/dp/1617294438&#34;&gt;Deep Learning with Python&lt;/a&gt;: currently reading it.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;2021&#34;&gt;2021&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com.mx/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321/ref=sr_1_1?keywords=data&amp;#43;intensive&amp;#43;applications&amp;amp;qid=1642484281&amp;amp;sprefix=data&amp;#43;intens%2Caps%2C90&amp;amp;sr=8-1&#34;&gt;Designing data intensive applications&lt;/a&gt;: can&amp;rsquo;t recomend it enough.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com.mx/gp/product/B0979PWD4Z/ref=ppx_yo_dt_b_d_asin_title_o06?ie=UTF8&amp;amp;psc=1&#34;&gt;Programming Rust: Fast, Safe Systems Development&lt;/a&gt;: i love rust and this is a great book but afaik outside of all the (wonderful) cli tooling being built in rust, i see more interesting projects being built with go (if you could point me to some interesting rust projects, i would love to see them!). which led me to the my next book&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com.mx/gp/product/B08XYGCM71/ref=ppx_yo_dt_b_d_asin_title_o05?ie=UTF8&amp;amp;psc=1&#34;&gt;Learning Go: An Idiomatic Approach to Real-World Go Programming&lt;/a&gt;: the book is ok but as much as i try i can&amp;rsquo;t seem to get really excited about go.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com.mx/Joy-Clojure-Thinking-Way/dp/1935182641/ref=sr_1_1?__mk_es_MX=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=39K0SIJDUIEPJ&amp;amp;keywords=the&amp;#43;clojure&amp;#43;way&amp;amp;qid=1642485176&amp;amp;sprefix=the&amp;#43;clojure&amp;#43;way%2Caps%2C106&amp;amp;sr=8-1&#34;&gt;The joy of Clojure&lt;/a&gt;: i had a really really good time both reading this book and learning clojure overall. there are some very interesting concepts in this languages and it pushed me outside of my comfort zone at first (this was also my first lisp, so yeah&amp;hellip;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.amazon.com.mx/Purely-Functional-Data-Structures-English-ebook/dp/B00AKE1V04/ref=tmm_kin_swatch_0?_encoding=UTF8&amp;amp;qid=1642485542&amp;amp;sr=8-1&#34;&gt;Purely Functional Data Structures&lt;/a&gt;: if only the book was based on haskell&amp;hellip; i have not finished this book but i REALLY want to both finish it and get a little more used to Standard ML&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ll finish this list later :p&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
