Skip to content

Instantly share code, notes, and snippets.

View mchav's full-sized avatar

Michael Chavinda mchav

View GitHub Profile
@mchav
mchav / Correlation.hs
Created January 17, 2025 15:34
Non-allocating pearson's correlation
correlation :: T.Text -> T.Text -> DataFrame -> Maybe Double
correlation first second df = do
(UnboxedColumn (f :: VU.Vector a)) <- getColumn first df
(UnboxedColumn (s :: VU.Vector b)) <- getColumn second df
Refl <- testEquality (typeRep @a) (typeRep @Double)
Refl <- testEquality (typeRep @b) (typeRep @Double)
let n = VG.length f
let
go (-1) acc = acc
go i (mX :: Double, mY :: Double) = go (i - 1) (mX + f VU.! i, mY + s VU.! i)
@mchav
mchav / Day3.hs
Created December 3, 2024 06:14
AOC 2024 Day 3
module Day3 where
import Data.List ( isPrefixOf )
import Data.List.Split ( splitOn )
import Data.Char ( isDigit )
run :: IO ()
run = do
instructions <- readFile "./data/day3/input"
let tuples = parseInstructions instructions
@mchav
mchav / DataFrame.hs
Created January 22, 2024 18:02
DataFrames using GADTs and Dynamic Typing
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE GADTs #-}
module Main where
import Data.Map (Map)
import Data.Type.Equality
import Data.Typeable (Typeable)
import Type.Reflection
@mchav
mchav / AxisAligned.hs
Created January 1, 2022 20:10
A visualization proving that axis aligned rectangles are PAC learnable.
import Control.Monad
import Data.Array
-- A class for axis-aligned rectangles.
-- The rectangle is defined by the left and right most x
-- coordinates. And the left and rightmost y coordinates.
type Point = (Int, Int)
data Rectangle = Rectangle {
project.afterEvaluate {
extensions.compileFrege = {
description = 'Compile Frege to Java'
javaexec {
android.dexOptions.setJavaMaxHeapSize("4g")
android.defaultConfig.setMultiDexEnabled(true)
def libs = project.rootDir.path + "/app/libs".replace('/' as char, File.separatorChar)
def froid = new File(libs + "/froid.jar".replace('/' as char, File.separatorChar))
@mchav
mchav / proguard-rules.pro
Last active April 26, 2017 03:14
Proguard rules for froid apps.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-keepattributes *Annotation*
@mchav
mchav / CounterActivity.fr
Created January 24, 2017 17:32
Simple Counter in froid using callbacks.
module io.github.mchav.simplecounter.CounterActivity where
import froid.app.Activity
import froid.os.Bundle
import froid.view.View
import froid.widget.Button
import froid.widget.TextView
native module type Activity where {}
@mchav
mchav / CubeActivity.fr
Created January 18, 2017 03:19
Touch rotating cube in Frege on Android. See froid instructions on how to run.
module io.github.mchav.touchcube.CubeActivity where
import froid.javax.microedition.khronos.egl.EGLConfig
import froid.javax.microedition.khronos.opengles.GL10
import froid.java.nio.ByteBuffer
import froid.java.nio.IntBuffer
import froid.app.Activity
import froid.content.Context
@mchav
mchav / Server.fr
Created November 20, 2016 10:30
A simple server in Frege.
module Server where
import frege.java.IO hiding (OutputStream)
data Executor = native java.util.concurrent.Executor
data InetSocketAddress = native java.net.InetSocketAddress where
native new :: Int -> STMutable s InetSocketAddress
import Control.Monad
import Data.Vector hiding (map)
import Prelude hiding (head, tail, length, splitAt)
import System.IO
inversions :: Vector Int -> Int
inversions = snd . countInversions
countInversions :: Vector Int -> (Vector Int, Int)
countInversions xs