code wiki / _hdl_build / _race6_claude.nx

_race6_claude.nx source

↩ module page · 95 lines · 3253 B

1// _race6_claude.nx -- the CLAUDE lane for autonomy race 6 (handwritten single-pass PNG chunk 2// census; the yardstick). Lane contract: read /tmp/race_input.bin, print NCHK= IHDR= IDAT= 3// IEND= W= as key=int lines. PNG: 8-byte magic, then chunks [len u32 BE][type 4cc][body][CRC 4B]. 4// NCHK = well-formed chunk count, -1 refused (bad magic / truncation / overlong); finds = body 5// offset RELATIVE to the chunk area (byte 8), -2 refused/absent; W= = u32 BE at abs byte 16 6// (IHDR width) whenever the magic is intact, -2 otherwise. license_tier: ORIGINAL 7import "nx_syscalls.nx" 8 9func r6_dec(label: *u8, v: i64) -> i64 { 10 var n: i64 = 0 11 while label[n] != (0 as u8) { n = n + 1 } 12 sys_write(1, label, n) 13 var av: i64 = v 14 if av < 0 { sys_write(1, "-" as *u8, 1); av = 0 - av } 15 if av == 0 { sys_write(1, "0" as *u8, 1) } 16 if av > 0 { 17 let buf: *u8 = sys_mmap(32) 18 var pos: i64 = 0 19 var x: i64 = av 20 while x > 0 { buf[pos] = (48 + (x % 10)) as u8; x = x / 10; pos = pos + 1 } 21 let outb: *u8 = sys_mmap(32) 22 var oi: i64 = 0 23 while oi < pos { outb[oi] = buf[pos - 1 - oi]; oi = oi + 1 } 24 sys_write(1, outb, pos) 25 } 26 sys_write(1, "\n" as *u8, 1) 27 return 0 28} 29 30func r6_be4(b: *u8, off: i64) -> i64 { 31 var v: i64 = (b[off] as i64) << 24 32 v = v + ((b[off + 1] as i64) << 16) 33 v = v + ((b[off + 2] as i64) << 8) 34 v = v + (b[off + 3] as i64) 35 return v 36} 37 38// chunk count from byte 8; -1 refused (truncated entry, body+CRC must fit) 39func r6_count(b: *u8, n: i64) -> i64 { 40 var off: i64 = 8 41 var c: i64 = 0 42 while off < n { 43 if off + 8 > n { return 0 - 1 } 44 let len: i64 = r6_be4(b, off) 45 if off + 8 + len + 4 > n { return 0 - 1 } 46 off = off + 8 + len + 4 47 c = c + 1 48 } 49 return c 50} 51 52// body offset of first chunk typed t, RELATIVE to the chunk area; -2 absent 53func r6_find(b: *u8, n: i64, t: i64) -> i64 { 54 var off: i64 = 8 55 while off < n { 56 if off + 8 > n { return 0 - 2 } 57 let len: i64 = r6_be4(b, off) 58 if off + 8 + len + 4 > n { return 0 - 2 } 59 if r6_be4(b, off + 4) == t { return off + 8 - 8 } 60 off = off + 8 + len + 4 61 } 62 return 0 - 2 63} 64 65func main() -> i64 { 66 let lenp: *i64 = sys_mmap(16) as *i64 67 let b: *u8 = sys_read_file("/tmp/race_input.bin\x00" as *u8, lenp) 68 let n: i64 = lenp[0] 69 var hdr_ok: i64 = 0 70 if n >= 8 { 71 if r6_be4(b, 0) == 0x89504e47 { if r6_be4(b, 4) == 0x0d0a1a0a { hdr_ok = 1 } } 72 } 73 if hdr_ok == 0 { 74 r6_dec("NCHK=\x00" as *u8, 0 - 1) 75 r6_dec("IHDR=\x00" as *u8, 0 - 2) 76 r6_dec("IDAT=\x00" as *u8, 0 - 2) 77 r6_dec("IEND=\x00" as *u8, 0 - 2) 78 r6_dec("W=\x00" as *u8, 0 - 2) 79 return 0 80 } 81 let c: i64 = r6_count(b, n) 82 r6_dec("NCHK=\x00" as *u8, c) 83 if c < 0 { 84 r6_dec("IHDR=\x00" as *u8, 0 - 2) 85 r6_dec("IDAT=\x00" as *u8, 0 - 2) 86 r6_dec("IEND=\x00" as *u8, 0 - 2) 87 } 88 if c >= 0 { 89 r6_dec("IHDR=\x00" as *u8, r6_find(b, n, 0x49484452)) 90 r6_dec("IDAT=\x00" as *u8, r6_find(b, n, 0x49444154)) 91 r6_dec("IEND=\x00" as *u8, r6_find(b, n, 0x49454e44)) 92 } 93 r6_dec("W=\x00" as *u8, r6_be4(b, 16)) 94 return 0 95}