1package sapin23import "strings"45func Sapin(size int) string {6 if size < 1 {7 return ""8 }9 var b strings.Builder10 for floor := 0; floor < size; floor++ {11 for j := 0; j < floor+4; j++ {12 spaces := size*2 - (floor-1)*2 - j + size - 213 bodies := j*2 + 1 + floor*414 b.WriteString(strings.Repeat(" ", spaces))15 b.WriteString(strings.Repeat("*", bodies))16 b.WriteString("\n")17 }18 }1920 for i := 0; i < size; i++ {21 spaces := (size-1)*3 + 222 b.WriteString(strings.Repeat(" ", spaces))23 b.WriteString("|||\n")24 }25 return b.String()26}27Render(path string) string
Sapin(size int) string
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.