Skip to content

Instantly share code, notes, and snippets.

@skatenerd
skatenerd / dependent.py
Created February 18, 2025 14:01
Nonempty List Types In Python
# pyright: standard
from typing import TypeIs, reveal_type, TypeVar, Generic, Sequence, cast
T1 = TypeVar('T1')
Numeric = TypeVar('Numeric', bound=float)
class NonemptyTuple(tuple, Generic[T1]):
def __init__(self, *args, **kwargs):
raise ValueError("Never construct me directly") # Idk
@skatenerd
skatenerd / DaySeventeen.hs
Created December 18, 2024 14:10
2024 Day 17
module DaySeventeen (wins, program, go, runSingleInput, workBackwards, partOne, evaluateOperand, runProgram, buildComputer, execute, Instruction(..), Operand(..), Combo(..), parsePair) where
import Debug.Trace
import Data.Bits (xor)
import Data.Maybe (isJust)
import Data.List.Split (chunksOf)
import qualified Data.Sequence as S
data Computer = Computer { instructionPointer :: Int, registerA :: Int, registerB :: Int, registerC :: Int } deriving (Ord, Eq, Show)
@skatenerd
skatenerd / DayEleven.hs
Created December 11, 2024 18:48
2024 Day Eleven
module DayEleven (partOne, partTwo, turnStone) where
import qualified Data.Map as DM
splitDownMiddle :: Int -> [Int]
splitDownMiddle toSplit = [leftSide, rightSide]
where stringRepresentation = show toSplit
newSize = length stringRepresentation `div` 2
leftSide = read $ take newSize stringRepresentation
@skatenerd
skatenerd / DayEight.hs
Last active December 8, 2024 23:40
2024 Day Eight
module DayEight (partOne, partTwo, sampleRadios, mkAntinode, difference, translate, pairs) where
import Data.List (groupBy, sortOn, unfoldr)
import Data.Array (assocs)
import qualified Data.Set as S
import Data.Ix (inRange)
import ArrayHelpers (listTo2dArray)
type Vector = (Int, Int)
@skatenerd
skatenerd / DaySix.hs
Created December 7, 2024 04:35
2024 Day Six
module DaySix (partTwo, allInterestingWorlds) where
import Data.Maybe (catMaybes, listToMaybe, mapMaybe)
import qualified Data.Set as S
import Control.Parallel.Strategies
type Location = (Int, Int)
data Game = Game (S.Set Obstacle) Location Int Int deriving (Show, Eq, Ord)
@skatenerd
skatenerd / DayFive.hs
Created December 6, 2024 04:51
2024 Day Five
module DayFive (partOne, partTwo) where
import Data.List (tails)
import Data.Graph
testRules = [(47,53),
(97,13),
(97,61),
(97,47),
(75,29),
@skatenerd
skatenerd / DayFour.hs
Last active December 4, 2024 22:55
2024 Day Four
{-# LANGUAGE OverloadedStrings #-}
module DayFour (allPaths, wordSearch, listTo2dArray, sampleXmas, addLookahead, partTwo) where
import qualified Data.Text as T
import Data.Array
import Data.Set (fromList, intersection, Set)
import qualified Data.List.ZigZag as Z
import Data.List (transpose)
sampleXmas :: [String]
@skatenerd
skatenerd / DayThree.hs
Last active December 5, 2024 00:50
2024 Day Three
{-# LANGUAGE OverloadedStrings #-}
module DayThree (partOne, partTwo, ParseState(Start), parseAllOps, sampleOps) where
import Safe (headDef)
import qualified Data.Maybe as M
import qualified Data.Text as T
import Data.Text (isPrefixOf)
import qualified Text.Read as TR
import Numeric (lexDigits)
@skatenerd
skatenerd / DayTwo.hs
Last active December 3, 2024 01:29
2024 Day Two
{-# LANGUAGE OverloadedStrings #-}
module DayTwo (partOne, partTwo, isSafeWithSingleModification, allVariations) where
import qualified Data.Set as S
import qualified Data.Text as T
import qualified Text.Read as TR
import Topograph (pairs)
readText :: T.Text -> Int
@skatenerd
skatenerd / DayOne.hs
Created December 2, 2024 02:15
2024 Day One
{-# LANGUAGE OverloadedStrings #-}
module DayOne (partOne, partTwo, testLines) where
import qualified Text.Read as TR
import qualified Data.Text as T
import qualified Data.List as L
import qualified Test.LeanCheck.Stats as TS
import qualified Data.Map as DM