Skip to content

Instantly share code, notes, and snippets.

@vurtun
vurtun / day_2.c
Last active July 14, 2023 21:47
Advent of Code 2022
/**
* Advent of Code 2022
* Day 2: Rock Paper Scissors
* https://adventofcode.com/2022/day/2
*
* http://codercorner.com/Modulo3.htm
* (Index+1)%3 = (1 << Index1) & 3
*/
#include <stdlib.h>
#include <stdio.h>
@vurtun
vurtun / diag.c
Last active October 15, 2024 07:05
static void
qdiag(float *restrict qres, const float *restrict A) {
/* Diagonalizer: http://melax.github.io/diag.html
'A' must be a symmetric matrix.
Returns quaternion q such that corresponding matrix Q
can be used to Diagonalize 'A'
Diagonal matrix D = Q * A * Transpose(Q); and A = QT*D*Q
The rows of q are the eigenvectors D's diagonal is the eigenvalues
As per 'row' convention if float3x3 Q = q.getmatrix(); then v*Q = q*v*conj(q)
*/
@vurtun
vurtun / sqrt.c
Last active December 1, 2022 09:08
/*
Enable FMA support:
clang -O2 -Wall -mfma
*/
static inline float
rsqrta(float x) {
/* Exact bits: 13.71 */
/* δ+max = 7.459289×10^−5 */
/* δ−max = −7.450387×10^−5 */
union { float f; int i; } v = {x};
@vurtun
vurtun / nn.c
Last active November 1, 2023 16:13
Neural Network
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
#include <string.h>
#include <assert.h>
#include <stdint.h>
#include <stdarg.h>
#include <math.h>
@vurtun
vurtun / bsearch.c
Last active October 30, 2024 10:28
static inline int
bin_search(const void *vals, int cnt, int siz, void *val,
int(*cmp_less)(const void *a, const void *b)) {
int half, nleft = cnt;
const unsigned char *base = vals;
while ((half = (nleft >> 1)) > 0) {
const unsigned char *mid = base + half * siz;
base = cmp_less(mid, val) ? mid : base;
nleft -= half;
}
// Symbols:
// Dropdowns rendering: [|----------------[v]|]
// Right Click -> New State Machine -> Name: "blnd_tree_loco_walk"
static struct anim_pose*
blnd_tree_loco_walk(struct anim_ctx *ctx, struct anim_sm *sm) {
struct anim_pose *res = 0;
{
// Right Click -> New Node -> Animation -> Walk Left
struct anim *walk_l = [|----------------[v]|];
@vurtun
vurtun / sort.c
Last active January 11, 2023 15:22
// ref: http://www.codercorner.com/RadixSortRevisited.htm
// http://stereopsis.com/radix.html
// int/float: https://github.com/lshamis/FloatRadixSort
// string: https://github.com/rantala/string-sorting/blob/master/src/msd_ce.cpp
struct str {
const char *str;
const char *end;
int len;
};
#include <stdio.h>
#define xglue(x, y) x##y
#define glue(x, y) xglue(x, y)
#define uniqid(name) glue(name, __LINE__)
#define scp_brk(name) goto xglue(___SCOPE___,name)
#define scp_file(name,f,p,fmt)\
xglue(___SCOPE___,name): for(int uniqid(_i_) = (f) ? 1 : ((((f) = fopen(p,fmt)) == 0) ? 1 : 0);\
(uniqid(_i_) == 0) ? 1 : ((f) ? (fclose(f), 0): 0); ++uniqid(_i_))
// http://0x80.pl/notesen/2018-10-03-simd-index-of-min.html
#define cpy3(d,s) ((d)[0]=(s)[0],(d)[1]=(s)[1],(d)[2]=(s)[2])
#define dot3(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2])
#if defined(__GNUC__) || defined(__clang__)
#define alignto(x) __attribute__((aligned(x)))
#elif defined(_MSC_VER)
#define alignto(x) __declspec(align(x))
#else
#define alignto(x) _Alignas(x)
enum gui_lay_type {
GUI_LAY_ROW,
GUI_LAY_COL
};
struct gui_lay {
struct gui_box box; /* in */
/* internal */
enum gui_lay_type type;
struct gui_box sub;
int idx, cnt;