Skip to content

Instantly share code, notes, and snippets.

View mscha's full-sized avatar

Michael Schaap mscha

View GitHub Profile
@mscha
mscha / aoc11a
Created December 11, 2024 14:22
Advent of Code 2024 day 11 - first attempt (too slow for part 2)
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 11 -- https://adventofcode.com/2024/day/11
class MagicStones
{
has Int @.stones;
@mscha
mscha / aoc11
Last active December 11, 2024 15:33
Advent of Code 2024 day 11
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 11 -- https://adventofcode.com/2024/day/11
sub split-in-half($n) { $n.comb(/\w ** { $n.chars div 2 }/)».Int }
use experimental :cached;
multi blink($stone, $times) is cached
@mscha
mscha / aoc12
Created December 12, 2024 14:16
Advent of Code 2024 day 12
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 12 -- https://adventofcode.com/2024/day/12
enum Direction <north east south west>;
sub left(Direction $d --> Direction) { Direction(($d - 1) % 4) }
sub right(Direction $d --> Direction) { Direction(($d + 1) % 4) }
sub turn(Direction $d --> Direction) { Direction(($d + 2) % 4) }
@mscha
mscha / aoc13
Last active December 13, 2024 11:48
Advent of Code 2024 day 13
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 13 -- https://adventofcode.com/2024/day/13
sub button-presses($ax,$ay, $bx,$by, $px,$py)
{
# We need to find (non-negative integer) m and n so that
# m × (ax,ay) + n × (bx,by) = (px,py)
@mscha
mscha / aoc14
Last active December 14, 2024 15:51
Advent of Code 2024 day 14
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 14 -- https://adventofcode.com/2024/day/14
class Vector
{
has Int $.x;
has Int $.y;
@mscha
mscha / aoc15
Last active December 15, 2024 18:29
Advent of Code 2024 day 15
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 15 -- https://adventofcode.com/2024/day/15
enum Direction <north east south west>;
sub left(Direction $d --> Direction) { Direction(($d - 1) % 4) }
sub right(Direction $d --> Direction) { Direction(($d + 1) % 4) }
sub turn(Direction $d --> Direction) { Direction(($d + 2) % 4) }
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2024 day 19 -- https://adventofcode.com/2024/day/19
class TowelArranger
{
has @.towels;
has @.designs;
@mscha
mscha / aoc01
Last active December 1, 2025 10:40
Advent of Code 2025 day 1
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2025 day 1 -- https://adventofcode.com/2025/day/1
class Safe
{
has Int $.modulo = 100;
has Int $.dial = $!modulo div 2;
@mscha
mscha / aoc01b
Created December 1, 2025 10:46
Advent of Code 2025 day 1 - efficient version
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2025 day 1 -- https://adventofcode.com/2025/day/1
class Safe
{
has Int $.modulo = 100;
has Int $.dial = $!modulo div 2;
@mscha
mscha / aoc02
Last active December 2, 2025 23:04
Advent of Code 2025 day 2
#!/usr/bin/env raku
use v6.d;
$*OUT.out-buffer = False; # Autoflush
# Advent of Code 2025 day 2 -- https://adventofcode.com/2025/day/2
unit sub MAIN(IO() $inputfile where *.f = 'aoc02.input', Bool :v($verbose) = False);
# Find invalid IDs in a list of ranges
multi invalid-ids(Str $ranges, Bool :$simple = False)