Some horribly hacky Raku code that pretends to be a barely functional logic language
use lib 'lib';
use Logos;
enum < tom sally bob mark floppy book >;
fact :person(sally);
fact :person(mark);
cocurrent 'times' | |
dz_times_ =. 24 * *~ mz_times_ =. 60 | |
ot_times_ =. 719469 | |
dur_times_ =. ((100 * 365.25) - 0.75), 365.25, 30.6 | |
off_times_ =. (ot_times_ - 0.25), 0.75, 0.41 | |
T_times_ =. {{ | |
'day sec' =. (0, dz) #: y |
Some horribly hacky Raku code that pretends to be a barely functional logic language
use lib 'lib';
use Logos;
enum < tom sally bob mark floppy book >;
fact :person(sally);
fact :person(mark);
use v5.36; | |
use warnings FATAL => 'all'; | |
use Path::Tiny qw< path >; | |
my $v = qr{ ( [A-Za-z][.:] | [0-9][:] | [^ A-Za-z0-9()] )+ }nx; | |
my $p = qr{ \( ($v \s+ $v)+ \s+ $v \) }nx; | |
my $iter = path('code/aoc')->iterator({ recurse => 1 }); | |
my %seen; |
nixlib =. '/usr/local/lib/libraylib.so' | |
winlib =. jpath '~/raylib/lib/raylib.dll' | |
raylib =: IFUNIX {:: winlib;nixlib | |
Uh =: 0 {:: ] f. NB. Unbox head | |
NB. Window-related functions | |
InitWindow =: (raylib,' InitWindow n i i *c') cd ] | |
CloseWindow =: (raylib,' CloseWindow n') cd ] | |
WindowShouldClose =: Uh (raylib,' WindowShouldClose i') cd ] |
require 'media/imagekit/color_space' | |
require 'graphics/png' | |
require 'graphics/pplatimg' | |
coinsert 'pplatimg' | |
ParseDiff =: {{ | |
'p d' =. (}: ; {:) ];._2 y | |
t =. ". '/%' rplc~ d | |
c =. (+./@(' ' ~: ]) {{ (1, 2 </\ x) <;.1&(x&#) y }}"1 ]) p | |
a =. {. ($ #: I.@,) > 'X' +./@e.~L:0 c |
Just an exploration of parsing this days input without regex.
Given the following code
c =. Parse;._2 fread 'input'
echo +/ (* #\) 12 13 14 *./@:>:"1 c
echo +/ */"1 c
if exists('b:current_syntax')|fini|en | |
sy clear|sy case match |sy sync fromstart |if&l:syn==#'k'|setl com=:/ isk=a-z,A-Z,48-57 |en | |
" sy clear|sy case match |sy sync fromstart |if&l:syn==#'k'|en | |
sy match k_e /\i\+\|\S/ | |
sy match k_s /\(`\(\I\i*\>\|:[A-Za-z0-9.:/]*\)\=\)\+/ nextgroup=@k_vw |hi link k_s constant | |
sy match k_w /[\\\/']:\=/ nextgroup=k_w contained |hi link k_w operator | |
sy match k_c1 /.\+/ contained |hi link k_c1 special | |
sy match k_c0 /\\\(\w\+\|\\\|$\)/ nextgroup=k_c1 |hi link k_c0 statement | |
sy match k_c0 /\\[tw]\>\(:\d\+\)\=/ | |
sy match k_e /"/ nextgroup=k_es |hi link k_e error |
Here's a rundown of definitions in my .jprofile.ijs
, which get loaded in all J sessions.
Some of these are so simple they don't need names, but sometimes I just put things in here so I don't forget how to spell them.
Not all the functions are the most efficient, they're just there for playing with data. Often in a script, I will copy a function in, or re-write one that is more specific to the given problem domain.
┌───┬───┐ | |
│abc│def│ | |
└───┴───┘ | |
e300000000000000 | |
2000000000000000 | |
0200000000000000 | |
0100000000000000 | |
0200000000000000 | |
3800000000000000 | |
6800000000000000 |
//!/usr/bin/env node | |
var ffi = require('ffi-napi'); | |
const BIN = '/opt/j904/bin'; | |
const LIB = `${BIN}/libj.so`; | |
const PRO = `${BIN}/profile.ijs`; | |
var libj = ffi.Library(LIB, { | |
'JInit': [ 'pointer', [ ] ], |