\ : ; inline { ~ } ( ) [ ] # $ ? _ + - * = < > & | ^ ! @ . putpixel redraw 123 "string" 'c' `javascript` \ \ controls: [mouse] \ : over `s[p]=s[p-2];++p;` ; inline : lshift `--p;s[p-1]<<=s[p];` ; inline : rshift `--p;s[p-1]>>=s[p];` ; inline : / `--p;s[p-1]/=s[p];` ; inline : sin `s[p-1]=Math.sin(s[p-1]);` ; inline : cos `s[p-1]=Math.cos(s[p-1]);` ; inline : negate `s[p-1]=-s[p-1];` ; inline : mod `--p;s[p-1]%=s[p];` ; inline : min `--p;if(s[p-1]>s[p])s[p-1]=s[p];` ; inline : rnd `s[p++]=Math.random();` ; : round `s[p-1]=Math.floor(s[p-1]);` ; inline : WIDTH 256 ; inline : HEIGHT 176 ; inline : BITS 7 ; inline : STEP 1 BITS lshift ; inline : MASK STEP 1 - ; inline : [ 32 ] Map ; inline : [ ] Swing ; inline : [ ] LocX ; inline : [ ] LocY ; inline : [ ] Angle ; inline : [ 360 ] SinTable ; inline : [ 360 ] CosTable ; inline : [ ] dist ; inline : [ ] color ; inline : [ ] x ; inline : [ ] y ; inline : [ ] h ; inline : [ ] j1 ; inline : [ ] j2 ; inline : [ ] i0 ; inline : [ ] j0 ; inline : [ ] u0 ; inline : [ ] v0 ; inline : [ ] vx ; inline : [ ] vy ; inline : [ ] da ; inline : [ ] db ; inline : [ ] a ; inline : [ ] b ; inline : [ ] u ; inline : [ ] v ; inline : [ ] u1 ; inline : [ ] v1 ; inline : [ ] a1 ; inline : [ ] b1 ; inline : [ ] i ; inline : [ ] j ; inline : [ ] di ; inline : [ ] dj ; inline : [ ] wall ; inline : span color ! dist ! x ! HEIGHT dist @ 64 > { 64 * dist @ / round } h ! HEIGHT h @ - 1 rshift j1 ! j1 @ h @ + j2 ! j1 @ [ x @ over 0 putpixel ] h @ [ x @ over j1 @ + color @ putpixel ] HEIGHT j2 @ - [ x @ over j2 @ + 0 putpixel ] ; inline : scene LocX @ # BITS rshift i0 ! MASK & u0 ! LocY @ # BITS rshift j0 ! MASK & v0 ! CosTable Angle @ + @ vx ! SinTable Angle @ + @ vy ! vy @ 7 rshift Swing @ * WIDTH / da ! vx @ 7 rshift Swing @ * WIDTH / db ! vx @ Swing @ vy @ 8 rshift * - a ! vy @ Swing @ vx @ 8 rshift * + b ! WIDTH [ a @ 0 < { -1 u0 @ a @ negate ~ 1 STEP u0 @ - a @ } a1 ! u ! di ! b @ 0 < { -1 v0 @ b @ negate ~ 1 STEP v0 @ - b @ } b1 ! v ! dj ! u @ # STEP - x ! b1 @ # BITS lshift u1 ! * u ! v @ # STEP - y ! a1 @ # BITS lshift v1 ! * v ! i0 @ i ! j0 @ j ! 1 ( v @ u @ < # { y @ STEP + y ! u @ v @ - u ! v1 @ v ! j @ dj @ + j ! ~ x @ STEP + x ! v @ u @ - v ! u1 @ u ! i @ di @ + i ! } wall ! Map i @ + @ 1 j @ lshift & ) # wall @ { b1 y ~ a1 x } @ 18 lshift $ @ / i @ j @ + 3 & { 255 ~ 255 } span a @ da @ + a ! b @ db @ - b ! ] redraw ; inline : init 0b000000000000000000000 0b011111111111111111110 0b010101010101010101010 0b011111111111111111110 0b011111100100111111110 0b011111101110111111110 0b011111111011111111110 0b011111101110111111110 0b011111100100111111110 0b011111111111111111110 0b010101010101010101010 0b011111111111111111110 0b000000000000000000000 13 [ $ over Map + ! ] 360 [ # 3.14 * 180.0 / sin 262144.0 * over SinTable + ! # 3.14 * 180.0 / cos 262144.0 * over CosTable + ! ] 15 Angle ! 166 LocX ! 166 LocY ! 147 Swing ! ; init : clientX `s[p++]=event.clientX;` ; inline : "onmousemove" clientX 360 mod Angle ! scene ; : [ ] forward ; inline : "onmousedown" 1 forward ! ; : "onmouseup" 0 forward ! ; : run forward @ { LocX @ CosTable Angle @ + @ 14 rshift + # x ! BITS rshift i ! LocY @ SinTable Angle @ + @ 14 rshift + # y ! BITS rshift j ! Map i @ + @ 1 j @ lshift & { x @ LocX ! y @ LocY ! scene } } ; inline : [ ] frame ; inline 0 frame ! : fps `v="fps:";` frame @ . 0 frame ! ; inline : render scene frame @ 1 + frame ! ; inline scene \ : 40 render ; \ : 20 run ; : 1000 fps ; \ neural net \ : I 3 ; inline : H 10 ; inline : O 1 ; inline : R 0.01 ; inline : f `s[p-1]=Math.tanh(s[p-1]);` ; inline : df `s[p-1]=1-s[p-1]*s[p-1];` ; inline : [ 1024 ] w ; inline : [ 1024 ] hl ; inline : [ 256 ] in ; inline : [ 256 ] ow ; inline : [ 256 ] o ; inline : [ 256 ] dh ; inline : [ ] d ; inline : nninit 1024 [ rnd 0.5 - over w + ! rnd 0.5 - over hl + ! ] 1 I 1 - in + ! ; nninit : +! `p-=2;d[s[p+1]]+=s[p];` ; inline : m `let t=0;p-=2;for(n=0;n