blob: 88f757393fd8072538c2331b3fe45f667d4e7cb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#!/usr/bin/env bqn
Parse←{
x←𝕩
a←x='←'⋄at←1⌽a⋄vars←at/x⋄x(/˜)↩¬a⋄a(/˜)↩¬at
l←≠x⋄o←x='('⋄c←x=')'⋄sep←x='⋄'⋄v←a-˜x∊•d∾vars⋄f←¬o∨c∨v∨sep
na←(2×sep)+f×1+l↑0∾c∨v
e←/c⋄d←+`o-c
ed←e⊏d⋄b←(⍋⍋ed)⊏(⍋⊏⟜d)⊸⊏/o
s←e-(e∾l)⊏˜{u←(≠e)¨𝕩⋄{(𝕩⊏u)↩𝕨⊏˜𝕨⍋𝕩}¨´˘2↕(∪⍋⊸⊏⊔)𝕩⋄u}⍟(0<≠)ed
fe←f×(l-1)++`(-⊸≍s)⌾((e≍b)⊸⊏)l⥊0
fe⌊↩(l-1)-l↑(⌈`↕∘≠⊸×)⌾⌽1∾˜sep
ia←+`l↑0∾f-l↑/⁼∧f/fe
sel←¬∘⊏⟜(o∨c)⊸/⍋(fe⌈↕l)-ia
⟨sel⊸⊏¨x‿na,vars⟩
}
d64←127-3
GenFn←{
⟨x‿na,vars⟩←𝕩
D←16⊥(•d∾"ABCDEF")⊸⊐
fns←{
n←•d⊐<𝕩
n=≠•d:(D"20")∾vars⊐<𝕩
n=0:8⥊0
l←2(⌊⋆⁼)n
(D"44")∾2⊥˘⌽8‿8(⊣⥊×´⊸↑)∾⟨⥊0,(11⥊2)⊤1023+l,(2⥊˜0⌈l)⊤n⟩
}‿{
v←vars⊐<𝕩⋄v<≠vars:(D"22")∾v
(⥊¨(D"99")+((↕4)∾6))⊑˜"|-⌈⌊√"⊐<𝕩
}‿{
(⥊¨(D"1A")∾(D"A0")+↕6)⊑˜"⋄+-×÷⌊⌈"⊐<𝕩
}
((≠∾∾)⟨vars≠⊸∾d64⟩)∾(D"0B")∾˜∾na⊑⟜fns⊸{𝕎𝕩}¨x
}
Gen←{
LEB←{0≡𝕩:⥊0⋄128⊸+⌾(¯1⊸↓) 2⊥⌽⍉ (∨`⌾⌽∨´˘)⊸/ 10‿7(⊣⥊×´⊸↑) ⍉⌽(8⥊2)⊤𝕩}
C←LEB∘≠⊸∾
S←∾⟜C
V←≠∾∾
I←C∘•UCS
t‿n‿b←𝕩
∾⟨
0∾(•UCS"asm")∾4↑1
1 S V (96∾⟜∾C¨)¨t
3 S V ⥊¨↕≠n
7 S V I⊸(⊣∾0∾⊢)¨⟜(↕∘≠)n
10 S V C¨ b
⟩
}
Compile←{
body←GenFn Parse 𝕩
(1↓∾)(","∾⥊∘⍕)¨ Gen ⟨⟨0‿1⟩/¨¨d64 ⋄ ⥊<"fn" ⋄ ⥊<body⟩
}
•←Compile "b←3⋄d←(b×b)-4×2×1⋄((-b)+√d)÷2×2"
|