Skip to content

Instantly share code, notes, and snippets.

@mzaks
mzaks / json_parser.mojo
Last active June 5, 2024 09:56
Quick and Dirty JSON parser in Mojo
@value
struct JSONValue(CollectionElement):
var _text: String
fn __init__(inout self, text: String):
self._text = text.strip()
fn is_object(self) -> Bool:
return self._text.startswith("{") and self._text.endswith("}")
@mzaks
mzaks / main.mojo
Last active May 5, 2024 12:00
Branchless comparison
fn compare(s1: DTypePointer[DType.uint8], s2: DTypePointer[DType.uint8], count: Int)->Int:
var result = 0
var i = 0
while i < count:
var s1i = s1[i]
var s2i = s2[i]
var smaller = s1i < s2i
var bigger = s1i > s2i
i += 1 + count * int(smaller or bigger)
result = -1 * int(smaller) + 1 * int(bigger)
@mzaks
mzaks / main.mojo
Created April 26, 2024 04:57
Mojo Hasher POC
trait Hashable:
fn __hash__[H: Hasher](self, inout hasher: H):
...
trait Hasher:
fn __init__(inout self):
...
fn update(inout self, bytes: DTypePointer[DType.uint8], n: Int):
...
fn finish[dt: DType = DType.uint64](owned self) -> Scalar[dt]:
@mzaks
mzaks / plot_experience.py
Created January 19, 2024 07:28
Plot your experience
import matplotlib.pyplot as plt
def _normalized_experience(data: dict[str, list[int | list[int]]]) -> tuple[int, dict[str, list[int]]]:
"""Returns a tuple with latest year and an experience dict with normalised years list"""
latest_year = 0
result = {}
for topic, years in data.items():
normalised_years = []
for entry in years:
if isinstance(entry, list):
@mzaks
mzaks / checkout_remote_modules.sh
Created October 29, 2023 10:44
Poor persons module management for Mojo
#!/bin/bash
function check_out_remote_module() (
rurl="$1"
shift
declare -a paths
declare -a module_names
for var in "$@"
do
IFS="="
@mzaks
mzaks / fiby_tree.mojo
Created August 19, 2023 17:59
FibyTree Mojo
from Bit import bit_length
from String import String
from Vector import DynamicVector, UnsafeFixedVector
from List import VariadicList
struct FibyTree[T: AnyType, cmp: fn(T, T)->Int, to_str: fn(T) -> String]:
alias Union = 0
alias Intersection = 1
alias Difference = 2
alias SymetricDifference = 3
@mzaks
mzaks / nucleotides.mojo
Created May 23, 2023 06:19
Count nucleotides with Mojo
from DType import DType
from Functional import vectorize
from Pointer import DTypePointer
from String import String, ord
from TargetInfo import dtype_simd_width
alias simd_width_u8 = dtype_simd_width[DType.ui8]()
let dna = "CAAGAACCAAGATAACACTCATCGTTTACTTCTTACCCGTGCCAATTCGTATTACAAACGAAACCGTGTGGGCCATGTTCGTTATCCGAGGCCCCTTCAATTACTCGTCACTAGTGACCGTCGCTACTATGCCGTGTCCATGATATTACATCAAGACAATGAGATACGAAACGACAGCTGTTCCTACGCCTCGCGAGGGGTTCTACCCCTGAGCCGTGGGAACAGGCCGTCCGACGATCTTCAAGTGTTAAAGCTAGAAAACTTGATCAGAGAACAGTGACAATCCGGTGCAATTAGGGCGCTTCTAGCAAAGTCTTGACGGTTGACATGCTATTCTACCGGCGCAGGTTGCTTGAATGCGCGGGAGTTTTAAGCTCCTCTGTCACGCCATGCCCCCTGCAGTAGCTCACCAGCAAGAAGTTGGCTTAATATACCTGGTAGGAACGTTTGGTTAAACTTCTTTCCCTCTTCTTATACCGATGACACCTACCAATTACGGTCGGCCCGCCCGTGATCCAAACAGGCCTTAATCTTCCAATAATTCAATATGTGTGTGGCTTACAGGAGTCGAATATTTATAAGTGCATTCCTGCCTTCGCTGTTGCGATTTATAGCATCTTATGGTGGCGCAGGGCAACACTTAAAAGGGAGCCAACATGAGTTTCTAGCGTCAGGCACTGCCCTGAGGTAAAGGAATACCTGTTCGATACTATGAGGCGAGATCGCCCCACCTTAAAACAGAAAGACGGTAACGGTCCCTAGCCATTTCCTTATTGCGTACGAGATTATGGAACGCTT
@mzaks
mzaks / petri_net.c
Last active August 6, 2021 08:54
Simple Petri net implementation in C with a couple examples
#include <stdio.h>
#include <libc.h>
typedef struct {
int *marking;
int *takes;
int *puts;
int transition_count;
int place_count;
} PetriNet;
func barBellNet() -> PetriNet {
let totoalWeightInGram = Place(name: "tototalWeightInGram")
let barBellSelected = Place(name: "BarBellSelected")
let barBellNotSelected = Place(name: "BarBellNotSelected", initNumberOfTokens: 1)
let barBell10Kg = Place(name: "10KgBarBell", initNumberOfTokens: 1)
let barBell15Kg = Place(name: "15KgBarBell", initNumberOfTokens: 1)
let barBell17_5Kg = Place(name: "17.5_KgBarBell", initNumberOfTokens: 1)
let barBell20Kg = Place(name: "20_KgBarBell", initNumberOfTokens: 1)
let weight0_5kg = Place(name: "0.5_KgWeight", initNumberOfTokens: 4)
let weight1kg = Place(name: "1_KgWeight", initNumberOfTokens: 4)
func ticTacToeNet() -> PetriNet {
let xTurn = Place(name: "xTurn", initNumberOfTokens: 1)
let oTurn = Place(name: "oTurn")
let xWin = Place(name: "xWin")
let oWin = Place(name: "oWin")
let e1 = Place(name: "e1", initNumberOfTokens: 1)
let e2 = Place(name: "e2", initNumberOfTokens: 1)
let e3 = Place(name: "e3", initNumberOfTokens: 1)
let e4 = Place(name: "e4", initNumberOfTokens: 1)