自分で解法を考える訓練が目的です。全てに解答しなければならないわけではありませんし、各人得意不得意もあるでしょうから、無理のない範囲で興味のあるものに挑戦してください。提出する場合、ちゃんと動作する完成品をアーカイブして送り、解法や方針がわからない場合は相談してください。
尚、履修者以外でこの文書を利用したい方は、予めご一報頂けますようお願いします。
n人によるパーティーでの互いのプレゼントが、各々自分のプレゼントに当たらない確率を n=20 まで印字せよ。また、さらに n=100 まで印字せよ。
ちなみに、この課題については解答例を末尾に紹介する。
12平均律、88鍵盤のピアノの音階の周波数を、音階名を添えて、すべて求めて印字せよ。但し、音階名A4(49番目の鍵盤)の基準ピッチは440Hzとする。
次のエノン写像の振る舞いを10000ステップほど印字せよ。 \[ \begin{aligned} x(t+1) &= y(t) + 1 - ax(t)^2\\ y(t+1) &= bx(t) \end{aligned} \] ここで、\(a=1.4, b=0.3, x(0)=0.2, y(0)=0.1\)とする。
次の第2種スターリング数を\(n (0\le n\le 10), k (0\le k\le n)\)について求めて印字せよ。 \[ \begin{aligned} \dstirlii{n}{k} &= \frac1{k!}\sum_{i=1}^{k}(-1)^{k-i}\dbinom{k}{i}i^n \end{aligned} \]
2人から100人までの、じゃんけんで「あいこ」になる確率を印字せよ。
次のカタラン数を\(n (0\le n\le 32)\)について求めて印字せよ。 \[ \begin{aligned} c_0 &= 1\\ c_{n+1} &= \frac{2(2n+1)}{n+2}c_n\\ &= \sum_{i=0}^{n}c_ic_{n-i} \end{aligned} \]
入力された文字列の括弧が正しいか判定する関数を作成し、利用して結果を表示せよ。また、\(n\)ペア\((1\le n\le 5)\)の「正しくない」括弧の場合をすべて列挙して印字せよ。
コンプガチャで400円のアイテムを8種類コンプリートする確率が9割を超えるのに掛かる費用を求めよ。
差分方程式クラスを継承した先のエノン写像クラスと次の修正ベルヌーイ写像クラスを作成し、それらの振舞いを10000ステップほど印字せよ。 \[ \theta(t+1) = \begin{cases} \theta(t) + 2^{B-1}(1 - 2\epsilon)\theta(t)^B + \epsilon &\text{ for }\theta(t) \le 0.5\\ \theta(t) - 2^{B-1}(1 - 2\epsilon)(1-\theta(t))^B - \epsilon &\text{otherwise} \end{cases} \] ここで、\(B=2, \epsilon=\mathtt{Double.min}, \theta(0)=0.3\)とする。
位置情報として移動履歴や速度履歴が20秒毎に得られたとして、過去5分間の移動手段(移動していない、徒歩、自転車、自動車、列車)を推定する手法を検討し、実装例を示せ。
import Foundation
var str = "Hello, playground. Written by Taiji Yamada"
do { // n人によるパーティーでの互いのプレゼントが、各々自分のプレゼントに当たらない確率を n=20 まで表示
print("derangement probability:")
var a = [ 0, 1 ]
print(1, Double(a[0]) / 1)
print(2, Double(a[1]) / 2)
var nf = 2
for n in 3...20 { // ここまでが Int での演算における限界
nf *= n
let an = (n - 1) * (a[1] + a[0]) // モンモール数
let p = Double(an) / Double(nf)
print(n, p)
a[0] = a[1]
a[1] = an
}
}
do { // n人によるパーティーでの互いのプレゼントが、各々自分のプレゼントに当たらない確率を n=100 まで表示
print("derangement probability:")
var k = 1.0
var f = -1.0
var p = 0.0
print(1, p)
for n in 2...100 { // 誤差を容認して Double で、別の漸化式で算出
f *= -1
k *= Double(n)
p += f / k
print(n, p)
}
print("1/e", 1.0 / exp(1.0)) // このように、これはネイピア数の逆数に漸近
}
// [参考文献]
// 1. チャート研究所「改訂版 チャート式 数学I+A」第6刷, pp. 334-335, 2017.
このように、作者を明示し、適度なコメントを添えて、参考にしたサイト等を添えておくこと。
すべての解答例(提出前の閲覧は控えてください): Exercises.playground-20180901.zip
Copyright (C) 2018 Taiji Yamada <taiji@aihara.co.jp>