なが月・12日目

12日目

午前

さっそくC++14(GCC 5.4.1)で解答した。GCCでは#include <bits/stdc++.h>するだけで標準ライブラリをすべて利用できるようになるということで使うことにした。手元の環境はCLion(C++14)で、出力ログを見る限りMinGWgcc/g++を使っているようなのでこれでよさそうだ。

Pythonのfor文ならコード補完なしにスッと書いても大して時間はかからないが、括弧でくくりイコールを入れセミコロンを打ち不等号を入力し++を書きブレースで囲む、というのを手でやっていては甚だ煩わしいので、repl.itではなくIDEに頼っている。

環境準備もあってABC130A-Cで終わった。C問題ではW, H ≦ 10^9であるためW * Hはint(およそ±2.15*10^9)ではオーバーフローしてしまう。最初そのことを意識しておらずWAを出してしまった。値の取りうる範囲を意識して書くことが求められるということであった。

午後

C++の続きである。https://atcoder.jp/contests/apg4bにもC++の解説が載っていることが分かったので、数値計算が求められる授業の予習のために標準関数として使えるものを知っておくときに使えそうだ。問題は授業でC++を使えるか、そして並列計算において標準関数が正しく動作するかどうかだが。

今日はnewの働きについて学んだ。new Tは動的にT型用のメモリ領域を確保し、その領域(インスタンス)へのポインタを返す。この時コンストラクタが呼ばれ、class Tブロックのpublic内でT(仮引数){初期化処理}と定義されたものが行われる。定義がない場合は特になにもせず、T(){}に等しくなる。そしてnewの反対がdeleteであり、デストラクタが呼ばれる。デストラクタは~T(仮引数){破棄時処理}である。newはC#に類似するが戻り値がポインタ型であるところが違う。そしてC#では不必要な冗長さを避けるためvar someInstance = new someT();と、someTの代わりにvarを使うことができるところ、C++ではauto *someInstance = new someT();と書けるらしい。varとautoを同一視してよいかはまだわからない。

レベルデザイン講座では「他人が自分のデザインしたレベルをプレイするのを見ているのは屈辱的体験(humbling experience)」だという説明に苦笑した。自分のゲームを一番スムーズかつ良く演出された状態でプレイできるのは自分だけなのである。

昨日のキャラクターデザイン講座では「あっこういう『解がなく明確な手法もない』作業には向いてないな…」と思ったが、今日のエンバイロメントデザインはもう少し理論的な感じで心が折れずに済んだ。