code wiki / _hdl_build / _claude_jpeg_census.nx
_claude_jpeg_census.nx source
↩ module page · 90 lines · 3317 B
1// _claude_jpeg_census.nx -- CLAUDE's lane in race 4 (JPEG marker census, handwritten).
2// Contract: read /tmp/race_input.bin; print NSEG= (segments through SOS, -1 refused) then
3// SOI=/APP0=/DQT=/SOF=/DHT=/SOS= content offsets (standalone: after marker; lengthed: after
4// the 2-byte inclusive length); -1 absent; -2 when refused. license_tier: ORIGINAL
5import "nx_syscalls.nx"
6
7func cj_dec(label: *u8, v: i64) -> i64 {
8 var n: i64 = 0
9 while label[n] != (0 as u8) { n = n + 1 }
10 sys_write(1, label, n)
11 var av: i64 = v
12 if av < 0 { sys_write(1, "-" as *u8, 1); av = 0 - av }
13 if av == 0 { sys_write(1, "0" as *u8, 1) }
14 if av > 0 {
15 let buf: *u8 = sys_mmap(32)
16 var pos: i64 = 0
17 var x: i64 = av
18 while x > 0 { buf[pos] = (48 + (x % 10)) as u8; x = x / 10; pos = pos + 1 }
19 let outb: *u8 = sys_mmap(32)
20 var oi: i64 = 0
21 while oi < pos { outb[oi] = buf[pos - 1 - oi]; oi = oi + 1 }
22 sys_write(1, outb, pos)
23 }
24 sys_write(1, "\n" as *u8, 1)
25 return 0
26}
27
28func cj_standalone(m: i64) -> i64 {
29 if m == 0xD8 { return 1 }
30 if m == 0xD9 { return 1 }
31 if m >= 0xD0 { if m <= 0xD7 { return 1 } }
32 return 0
33}
34
35// one pass: out[0]=count(-1 refused), out[1..6]=content offsets of D8/E0/DB/C2/C4/DA (-1 absent)
36func cj_walk(b: *u8, n: i64, out: *i64) -> i64 {
37 out[0] = 0
38 var i: i64 = 1
39 while i <= 6 { out[i] = 0 - 1; i = i + 1 }
40 var off: i64 = 0
41 while off < n {
42 if off + 2 > n { out[0] = 0 - 1; return 0 - 1 }
43 if (b[off] & 0xff) != 0xFF { out[0] = 0 - 1; return 0 - 1 }
44 let m: i64 = b[off + 1] & 0xff
45 if cj_standalone(m) == 1 {
46 if m == 0xD8 { if out[1] < 0 { out[1] = off + 2 } }
47 out[0] = out[0] + 1
48 off = off + 2
49 } else {
50 if off + 4 > n { out[0] = 0 - 1; return 0 - 1 }
51 let l: i64 = ((b[off + 2] & 0xff) << 8) | (b[off + 3] & 0xff)
52 if l < 2 { out[0] = 0 - 1; return 0 - 1 }
53 if off + 2 + l > n { out[0] = 0 - 1; return 0 - 1 }
54 let body: i64 = off + 4
55 if m == 0xE0 { if out[2] < 0 { out[2] = body } }
56 if m == 0xDB { if out[3] < 0 { out[3] = body } }
57 if m == 0xC2 { if out[4] < 0 { out[4] = body } }
58 if m == 0xC4 { if out[5] < 0 { out[5] = body } }
59 out[0] = out[0] + 1
60 if m == 0xDA { if out[6] < 0 { out[6] = body } return out[0] }
61 off = off + 2 + l
62 }
63 }
64 return out[0]
65}
66
67func main() -> i64 {
68 let lenp: *i64 = sys_mmap(16) as *i64
69 let b: *u8 = sys_read_file("/tmp/race_input.bin\x00" as *u8, lenp)
70 let n: i64 = lenp[0]
71 let out: *i64 = sys_mmap(64) as *i64
72 let c: i64 = cj_walk(b, n, out)
73 cj_dec("NSEG=\x00" as *u8, out[0])
74 if c < 0 {
75 cj_dec("SOI=\x00" as *u8, 0 - 2)
76 cj_dec("APP0=\x00" as *u8, 0 - 2)
77 cj_dec("DQT=\x00" as *u8, 0 - 2)
78 cj_dec("SOF=\x00" as *u8, 0 - 2)
79 cj_dec("DHT=\x00" as *u8, 0 - 2)
80 cj_dec("SOS=\x00" as *u8, 0 - 2)
81 return 0
82 }
83 cj_dec("SOI=\x00" as *u8, out[1])
84 cj_dec("APP0=\x00" as *u8, out[2])
85 cj_dec("DQT=\x00" as *u8, out[3])
86 cj_dec("SOF=\x00" as *u8, out[4])
87 cj_dec("DHT=\x00" as *u8, out[5])
88 cj_dec("SOS=\x00" as *u8, out[6])
89 return 0
90}