import math, os, strformat, strutils
# 格式化函数,自动选择合适单位
proc formatMass(kg: float): string =
if kg < 1e3: return fmt"{kg:.2f} kg"
elif kg < 1e6: return fmt"{kg/1e3:.2f} 吨"
elif kg < 1e9: return fmt"{kg/1e6:.2f} 千吨"
elif kg < 1e12: return fmt"{kg/1e9:.2f} 百万吨"
elif kg < 1e15: return fmt"{kg/1e12:.2f} 十亿吨"
elif kg < 1e18: return fmt"{kg/1e15:.2f} 万亿吨"
else: return fmt"{kg:.2e} kg"
proc formatLength(m: float): string =
if m < 1e3: return fmt"{m:.2f} 米"
elif m < 1e6: return fmt"{m/1e3:.2f} 公里"
elif m < 1e9: return fmt"{m/1e6:.2f} 万公里"
elif m < 1e12: return fmt"{m/1e9:.2f} 百万公里"
else: return fmt"{m:.2e} 米"
proc formatVolume(m3: float): string =
if m3 < 1e3: return fmt"{m3:.2f} 立方米"
elif m3 < 1e6: return fmt"{m3/1e3:.2f} 千立方米"
elif m3 < 1e9: return fmt"{m3/1e6:.2f} 百万立方米"
elif m3 < 1e12: return fmt"{m3/1e9:.2f} 十亿立方米"
else: return fmt"{m3:.2e} 立方米"
proc main() =
let r = 0.1 # 每秒增长率 0.1%
var w = 49.0 # 初始心智体重 (kg)
const c = 0.4645 # 身高 = c * w^(1/3) (由 1.7m 与 49kg 算出)
const k = 85.25 # 容积 = k * w (由初始容积 ~4189 m³ 导出)
echo "开始增长,每秒增长 ", r*100, "%"
echo "初始: 体重 ", formatMass(w), ", 身高 ", formatLength(1.7), ", 容积 ", formatVolume(k*w)
echo "按 Ctrl+C 停止\n"
var seconds = 0
while true:
seconds += 1
w *= (1 + r)
let h = c * pow(w, 1.0/3.0)
let v = k * w
echo fmt"第 {seconds:3d} 秒:我的心智体重 {formatMass(w):>12},我的心智身高 {formatLength(h):>12}, 我的心智容积 {formatVolume(v):>12}"
sleep(1000)
when isMainModule:
main()