{
"id": "079",
"prompt": "A loading spinner like a native OS one: 16 dots arranged in a circle (positions from a 16-entry integer sine table, cos = index+4), where the \"lead\" dot index advances with t/3 and each dot's gray level fades with its distance behind the lead — computed with wrap-around masking, not branches. Center it and put LOADING underneath.",
"solution_rl": "fn frame(t: i32) {\n let tab = [0, 49, 90, 117, 127, 117, 90, 49, 0, -49, -90, -117, -127, -117, -90, -49];\n let w: i32 = host::display::width();\n let h: i32 = host::display::height();\n let cx: i32 = w / 2;\n let cy: i32 = h / 2 - 10;\n let r: i32 = if w < h { w / 4 } else { h / 4 };\n host::display::clear(0x000000);\n let lead: i32 = (t / 3) & 15;\n let mut k: i32 = 0;\n while k < 16 {\n let d: i32 = (lead - k + 16) & 15;\n let g: i32 = 255 - d * 15;\n let x: i32 = cx + tab[k] * r / 127;\n let y: i32 = cy + tab[(k + 4) & 15] * r / 127;\n host::display::fill_rect(x - 3, y - 3, 6, 6, g * 65536 + g * 256 + g);\n k = k + 1;\n }\n host::display::draw_string(cx - 28, cy + r + 16, \"LOADING\", 0x808080, 1);\n host::display::present();\n}\n",
"tags": [
"trig-table",
"animation",
"ui"
]
}