コラッツ問題

最近授業でprologを扱っていて、コラッツ数列を求める、末尾再帰なコードを書くという問題が出た。

未だに末尾再帰があんまりよくわかってないんだけど、「再帰呼び出しが各手続きでの最後にある」ように書けばいいんだそうだとか。ということで以下のように書いた。

collatz(1).
collatz(N) :- A is N mod 2, A == 0, B is N / 2, write(B), write(','), collatz(B)
    C is N * 3, D is C + 1, write(D), write(','), collatz(D).

コラッツ問題は末尾再帰で書きやすい。

アッカーマン関数

C++をいじる機会があって,前々から気になっていた定数式(constexpr)にもちょっと触れてみた.
なにやら,コンパイル時に値が決定できる値をコンパイル時に計算することで,実行時の速度が早くなるとかなんとか.

アッカーマン関数を実装した.

//ack.cpp
#include <iostream>

constexpr int ack(int m, int n) {
    return m == 0 ? n+1
        : n == 0 ? ack(m-1, 1)
        : ack(m-1, ack(m, n-1));
}

int main(void) {
    constexpr int res = ack(3, 7);

    std::cout << res << std::endl;
    return 0;
}

Ack(3,6)を求めるプログラム.
C++11では定数式に書けるものは実質return文ひとつのみらしい*1ので,条件演算子を数億年ぶりに使った.

こちらは定数式を使わないバージョン.

//ack-o.cpp
#include <iostream>

int ack(int m, int n) {
    return m == 0 ? n+1
        : n == 0 ? ack(m-1, 1)
        : ack(m-1, ack(m, n-1));
}

int main(void) {
    std::cout << ack(3, 7) << std::endl;
    return 0;
}

さて,肝心の実行速度だが,

$ time ./ack
1021

real    0m0.002s
user    0m0.000s
sys     0m0.000s

$ time ./ack-o
1021

real    0m0.011s
user    0m0.010s
sys     0m0.000s

constexprを使ったほうが実行時間は速い.ただし,ack(4,1)のように再帰深度を深くすると,コンパイル時に

ack.cpp:10:33: エラー: constexpr evaluation depth exceeds maximum of 512 (use -fconstexpr-depth= to increase the maximum)

というエラーが出る.constexpr修飾された関数は再帰深度の上限がデフォルトでは512までらしい*2.試しにめちゃめちゃ大きくしてみると通った.

$time g++ -o ack ack.cpp -fconstexpr-depth=100000000

real    0m0.777s
user    0m0.703s
sys     0m0.067s

実行時計算と比べてみると

$ time ./ack-o
65533

real    0m18.664s
user    0m18.657s
sys     0m0.003s

実行時計算と同じことをさせているのに,コンパイル時計算の方が圧倒的に速い.
何がキモなんだろう.

12月終わり/2016年総括

年の瀬ですね。いかがお過ごしでしょうか。 今月もやっていきましょう。

主な活動

合唱団

本番1本。定期演奏会。他の本番と違い、1年間をかけて準備してきたため、達成感もひとしお。高専時代にはこのようなステージはなかったので、様々な初めての経験があった。また声や歌う時の姿勢など、コンクールと同じくらい自分と向き合う場面が多くあり、ステージの失敗、成功に関わらず、とても良い経験になった*1
今年度は本当に色々な事があり、運営の先輩方も苦労の連続だったと思うが、本当によく団をまとめてくださった。感謝の念が絶えない。そして、聞きに来てくださったみなさん、もちろん同期にも感謝したい。ありがとうございました。来年もどうかよろしくお願いします。

来月は本番が1本。新体制に向けて会議が1本。

授業など

ウワーっと合唱に追われているうちに過ぎ去ってしまい、何をやったかほとんど覚えていない…後期に入ってから勉強面がかなりダメなのでしっかりやりたい。

とりあえず数学を集合からやり直そうと思い、本を読み進めている。まだまだ問題を解く上での作法みたいなものが身についていないと感じる。来年も頑張りましょう。

その他

TOEIC IPを受験した。あと40点で英語の単位が取れたと思うと少し残念な結果だった。公開テストを受験したい。

実はこの文章を東北新幹線の車内で書いている。今月中旬に、突如として年始を秋田で過ごそうという発想に至った結果。盛岡を出たあたりから雪が積もっているのが見えて感動している。3日に帰る。

総括

3月が終わるギリギリまで進路が決まらないという厳しい状況で、当時はとても厳しい精神状態だったと思う。いざ大学に入ると、その頃の状況が遠いところで起こったことのようで、何とも言えない感覚だ。しかしこの苦労をした経験は明らかに自分のものなので、これを活かせるよう生きたい。

先月も書いたが、合唱団に入ってからは、自分の生活の4割が合唱、3割が数学、残りがその他という感じになり、学業面でも趣味の面でも、毎日が充実していたと思う。技術と経験を持つ多くの人々と出会うことができたのはとても幸運だった。

その場その場の評価は良し悪しそれぞれあっても、総合すれば良い年だったと思う。来年はさらに忙しくなることが予想されるが、自分のペースで、しかし地面に足をつけてしっかりとやっていきたい。

来年もどうぞよろしくお願いします。

*1:失敗したかのような書き方になったがそういうわけではない

11月終わり

忙しかったせいか10月よりも時間が経つのが早かった.SFなら時間に取り残されて老化が止まる.

主な活動

合唱団

本番は無かったが,定演まで1ヶ月を切り,ゲネプロがあった.反省点だらけ.本番1週間前にもう一度あるので,それまでの追い込みが勝負だと思う.
しかし日に日に上手くはなっている,と思いたい.今後は混声曲→男声曲→混声曲の流れの中で,声の切り替えを上手くできることを目指し,双方でパフォーマンスを発揮できるように調整していく.それと,混声曲の音に表情が乗らない問題をどうにか解決する.
それはそれとして,いつもの練習時間が定演までの間伸びることになった.妥当ではあると思うが体力は持っていかれる.
役職はすんなり決まった.とはいえ来年のことを考えると不安しか浮かんでこない.できるだけうまくやっていきたい.

ところでその定期演奏会ですが,

是非お越しください.

授業・数学

ゼミはほとんど進まなかった.論理的な思考力がほしい.
例の授業は集合と論理の分野に話題が移り,比較的楽になった.
授業としてハイキングをし,10〜15kmを二回歩いた.もう一度あり,今度はガチの登山です.
12月頭にかけてテストが多い.やっていく.

その他

結婚式出席のため,2日だけ地元に帰った.披露宴では新郎の趣味でアニソンが流れ続けており,異様なテンションで過ごした.
その後高専時代の同級生と久しぶりに会った.こうやって会うのももしかしたら最後になるかも知れないと考えると,少し寂しい.

読んだ本

今月新しく読了した本は無い気がする...

終わり

合唱が生活のほとんどを占めていることを実感する月だった.12月もこんな感じ.1月もおそらくそう.これはひと月の間ずっと男声合唱なので楽しみ.2月になれば落ち着くだろうかと考えたが,合唱団とは別の方面で一つ本番がある可能性があり,とにかくずっと忙しい.がんばりましょう.

10月終わり

今月も勢いよく過ぎ去った.時差ボケに似た体調を抱えています(後述)が,ある程度元気です.やっていきましょう.

主な活動

合唱団

本番が1本.地元の文化センターを彷彿とさせる音響のホールだった.混声曲ではあるが男性女性ともに見せ場がはっきりしている曲で,とても歌っているのが楽しい曲だった.定期演奏会でも歌うので,さらに磨きをかけたい.
定演までおよそ2ヶ月.先月よりは進捗あり. ベースのハチャメチャに上手い先輩に声を合わせられるようになってきた.
来月はこれに関する練習が,場所を移すなどのイベントと中間試験を伴ってやってくる.見た感じでは6月と同等の忙しさっぽい. 来年度の新体制に向けて役職などを決めたりとかしている.とにかくこういうのを考えるのが生理的に無理なので,一定期間中本当にうつのようになっていた.今のところスムーズに決まっているので良い.

授業・数学

そんなこんなでゼミをやっているものの,上記のスケジュールが詰め詰めであるため,頻度をしばらくの間減らす方針で考えている.しかし,この調子でやると,1冊読み終わるのに1年はゆうにかかる見通しなのでもう少しどうにかしたい.何事も両立は難しい.
このような状況ではあるがペンタブを購入して,板書みたいなことができるようになった.めっちゃ便利.
後期から理学部の授業を取ることにした.いまのところ着いていけているがどうなることやら.
それとは別に,総合科目として数学の授業を取った.授業題目は「数学への招待」.受講可能学部などの指定が無いにもかかわらず,説明もなしに行列を使って座標変換を始めたり*1,「基底」という言葉が出てくるという授業だった.確かに総合科目ではあるんだが,2Bまでしかやっていない人々は招待されていないというオチ.なお今後フーリエ変換の概念もやる模様.

その他

味覚の秋ということでいろいろなものを食べた.一人暮らしなので食事が寂しいのは仕方ないが,それでも他人と飯を食いたくなり,必然的に食費が膨らむ.宝珍楼には週1で通っている.

読んだ本

百合を数冊.本よりもアニメをかなり多く見た.
とりわけNew Gameはすごかった.幼馴染百合,朴念仁への片思い百合,飄々とした上司とその弱点である部下の百合,いろいろなものが詰まっていた.あれだけやってまだ原作2巻分らしいので2期にも期待したい.というか原作がほしい.

終わり

日本国内にいながら時差ボケっぽいものを体験している.というのも昨日19時ごろに眠気がきて,

ということにしたところ,午前2時半ごろ

となった.午前中はともかく午後からの体調が酷く,深夜テンションと寝不足の症状がないまぜになって襲いかかってきている.この文章はその勢いで書いているためまとまりがない.いつもそうだが.
ここからどうするかが来月の勝敗を決めると言っても過言ではない.
来月は忙しいが,頑張るというより,合唱と百合と数学のそれぞれを,ゆとりをもってやっていけるようにしたい.それと,一瞬実家に帰ります.各位よろしく.

*1:ゆとりなので数学3で行列が廃止された

9月

時間が経つのは早いもんで,もう夏休みが終わります.一瞬だった.今月もやっていきます.

主な活動

合唱団

5泊6日の合宿があり,福島まで行った.文字通り朝から晩まで練習をやったが,個人的にはあまり進歩がなかったかな〜みたいな気持ちが強い.
多少進歩があったのはプーランクの曲だけか.新曲はほとんどダメ.

免許

免許合宿が月始めで終わって,合宿のため伸びまくり,今日取得した.
取ったはいいが車に乗る機会が全く無いので,当分は身分証明書として使っていくほかない.

数学

免許合宿中の進捗を一気に開放しようとしたところ,スライドの枚数が膨れ上がることが予想されたため,剰余群とそれに必要な概念のみをやった.
こういう形式でゼミをやるときに,どうやったら証明をわかりやすく伝えられるかが未だにわからん.

その他

大洗に行った.とにかくガルパンがプッシュされていた.それ以外の感想は伏せる.

機龍警察の1巻と自爆条項,それと華氏451度を読み終わった.今ガニメデの優しい巨人を読んでる.
東京に行く機会があったので薄い本も多少読んだ.あとド嬢を読んでみたところSFへの言及が多すぎて読みたい本が増えまくった.

映画

シン・ゴジラガルパン(三回目),アイカツスターズ
女児アニメを見るたびに,今の子どもたちは百合コンテンツに恵まれているなあと思う.

終わり

終わりです.来月もがんばりましょう.

宝珍楼について

大学近くに宝珍楼という自称中華の店があり,とても好きで,最近はかなりの頻度で通っているが,やっぱりこれは中華ではないなあと思いながら食べていて,どうして中華ではないかといえば,たしかに中華料理のメニューは存在してラーメンや唐揚げがうまいが,それよりも人気があるのは「青菜中華丼*1」や「スタミナ丼*2」や,人気があるかどうかは別として,「ジャンボオムライス」の特盛りというもはや複数人で注文して分けて食うのが良いレベルのチャレンジングなメニューなどがあり,セットメニューはそれらが三(二)位一体となって出てくるのだが,店は掛け声の発声が独特なマスター*3,それとバイト数人で回っていて,その内調理はマスターだけがやっているので,注文後30分くらいかかって出てくることもザラなのだが,待ってでも食いたくなるような中毒性があり,その味付けのジャンキー加減が最高で,さらに大盛りは無料,皆が勧めるのは「剣道部四天王セット*4」の大盛りですが,俺は「バスケ部セット*5」が好きで,3回に1回は食っていて,お察しの通りセットメニューに名前をつけることができるが,そのためにはマスターと仲良くなる必要があったり,在学期間が新メニュー作成に被る必要があったりして難易度は非常に高く,たしかに自分の名前が付いたら嬉しいが,そういうことは関係なく通いたくなるのでおすすめです.ぜひ来年度までには仲良くなりたい.メニュー表にエビチリがありますが270円ではなく1170円なので注意が必要です.

*1:ほうれん草と謎の肉と片栗粉を素揚げして飯にかけたもの

*2:肉,卵などが飯にかかっているが詳細は忘れた

*3:店長

*4:青菜中華丼+唐揚げ+ラーメン

*5:焼肉丼+ラーメン