Files
hakorune/examples/app_statistics.nyash
Moe Charm 0bed0c0271 🎉 initial commit: Nyash Programming Language完成版
🚀 主要機能:
• Everything is Box哲学による革新的アーキテクチャ
• WebAssemblyブラウザー対応プレイグラウンド
• アーティスト協同制作デモ - 複数Boxインスタンス実証
• 視覚的デバッグシステム - DebugBox完全統合
• static box Mainパターン - メモリ安全設計

 言語機能:
• NOT/AND/OR/除算演算子完全実装
• ジェネリクス/テンプレートシステム
• 非同期処理(nowait/await)
• try/catchエラーハンドリング
• Canvas統合グラフィックス

🎨 ブラウザー体験:
• 9種類のインタラクティブデモ
• リアルタイムコード実行
• WebCanvas/WebConsole/WebDisplay
• モバイル対応完了

🤖 Built with Claude Code collaboration
Ready for public release!
2025-08-09 15:14:44 +09:00

218 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 📊 統計計算アプリ - MathBox新機能を活用
// Everything is Box哲学による統計ライブラリ
print("📊 === Statistics Calculator ===")
print("MathBox拡張機能を活用した統計計算デモ\n")
// デバッグトラッキング開始
DEBUG = new DebugBox()
DEBUG.startTracking()
// 統計計算を行うBox
box Statistics {
init {
data,
math
}
// データ追加
func addData(value) {
me.data.push(value)
}
// データ一括追加
func addMultiple(values) {
i = 0
loop(i < values.length()) {
me.addData(values.get(i))
i = i + 1
}
}
// 平均値計算
func mean() {
if (me.data.length() == 0) {
return new NullBox()
}
sum = 0
i = 0
loop(i < me.data.length()) {
sum = sum + me.data.get(i)
i = i + 1
}
// 除算がないので掛け算で代用
count = me.data.length()
mean = sum * me.math.pow(count, -1) // sum / count
return mean
}
// 分散計算
func variance() {
if (me.data.length() == 0) {
return new NullBox()
}
avg = me.mean()
sumSquaredDiff = 0
i = 0
loop(i < me.data.length()) {
diff = me.data.get(i) - avg
sumSquaredDiff = sumSquaredDiff + (diff * diff)
i = i + 1
}
count = me.data.length()
variance = sumSquaredDiff * me.math.pow(count, -1)
return variance
}
// 標準偏差計算
func standardDeviation() {
var = me.variance()
// NullBoxかどうかチェック型チェックで判定
if (var.type_name() == "NullBox") {
return new NullBox()
}
return me.math.sqrt(var)
}
// 最大値
func max() {
if (me.data.length() == 0) {
return new NullBox()
}
maxVal = me.data.get(0)
i = 1
loop(i < me.data.length()) {
maxVal = me.math.max(maxVal, me.data.get(i))
i = i + 1
}
return maxVal
}
// 最小値
func min() {
if (me.data.length() == 0) {
return new NullBox()
}
minVal = me.data.get(0)
i = 1
loop(i < me.data.length()) {
minVal = me.math.min(minVal, me.data.get(i))
i = i + 1
}
return minVal
}
// 範囲(レンジ)
func range() {
return me.max() - me.min()
}
// データ表示
func showData() {
print("\n📈 Data points (" + me.data.length() + " items):")
i = 0
loop(i < me.data.length()) {
print(" [" + i + "] = " + me.data.get(i))
i = i + 1
}
}
// 統計サマリー表示
func summary() {
print("\n📊 Statistical Summary:")
print(" Count: " + me.data.length())
print(" Mean: " + me.mean())
print(" Std Dev: " + me.standardDeviation())
print(" Min: " + me.min())
print(" Max: " + me.max())
print(" Range: " + me.range())
}
}
// 統計インスタンスを作成する関数
function createStatistics() {
stats = new Statistics()
stats.data = new ArrayBox()
stats.math = new MathBox()
return stats
}
// テストデータで実行
print("\n🧪 Test 1: 学生のテスト得点分析")
stats = createStatistics()
DEBUG.trackBox(stats, "Statistics-TestScores")
// テストスコアを追加
scores = new ArrayBox()
scores.push(85)
scores.push(92)
scores.push(78)
scores.push(95)
scores.push(88)
scores.push(73)
scores.push(90)
scores.push(82)
stats.addMultiple(scores)
stats.showData()
stats.summary()
// 新しい機能:三角関数を使った周期データ分析
print("\n\n🌊 Test 2: 周期的データ分析(正弦波)")
wave = createStatistics()
DEBUG.trackBox(wave, "Statistics-WaveData")
// 正弦波データを生成
math = new MathBox()
pi = math.getPi()
i = 0
loop(i < 20) {
// angle = i * π / 10
angle = i * pi * 0.1 // 除算の代わり
value = math.sin(angle) * 10 + 50 // 振幅10、中心50
wave.addData(math.round(value))
i = i + 1
}
wave.showData()
wave.summary()
// 対数正規分布風のデータ
print("\n\n📈 Test 3: 成長データ分析(指数関数的)")
growth = createStatistics()
DEBUG.trackBox(growth, "Statistics-GrowthData")
i = 1
loop(i <= 10) {
// 指数関数的成長をシミュレート
value = math.exp(i * 0.3) * 10
growth.addData(math.round(value))
i = i + 1
}
growth.showData()
growth.summary()
// NullBox活用欠損データの扱い
print("\n\n🔍 Test 4: 欠損データの扱い")
incomplete = createStatistics()
incomplete.addData(10)
incomplete.addData(20)
// 空のデータセットの統計値
empty = createStatistics()
emptyMean = empty.mean()
print("Empty dataset mean is null: " + emptyMean.is_null())
// メモリ使用状況
print("\n\n💾 Memory Report:")
print(DEBUG.memoryReport())
print("\n✅ Statistics Calculator completed!")