2015年06月

2015年06月28日

なんかちょうどいい機会だったのでAtCoder Beginner Contest 025に参加してみました。
今回は楽なのでRubyで参加しました。
過去のBeginner Contestだと3問くらいは解けたのでなんとかなるかと思いましたが今回のは難しかったらしく2問(AとBだけ)しか解けませんでした。
C問題は最適な手を打つみたいな方法をプログラムできず終わり、D問題は総当たりでやれば部分点までは取れそうだと思ったもののコードがうまく書けず終了という感じでした。

C問題の最適な手順についてですがゲームのAIでよく使われる手法として相手が最適な手を打ってくる前提で自分が一番いい手を打つアルゴリズムについて話聞いたなーと思い出しました。大学の勉強ってちゃんと役に立つんですね。
方法がわかってもプログラムしないと問題は解けないのでまあ解けなかったわけですがこういうのをちゃんとプログラムできるようにしないとダメですね。

(01:16)

2015年06月19日

競技プログラミングを始めてみました。
プログラミングの能力を競うもののように聞こえますがプログラミングという範囲でパズルを解く様な感覚に近いです。パズルが好きなので結構楽しくやっています。
パズルが好きなら結構おすすめです。
レベルを上げてアイテムを集めてアイテムや魔法の使い方を考えてボスを倒していくようなゲームと似た楽しさもあります。

今まではRubyとC#がプログラミングのほとんどでしたがなんとなくC++でやっています。
理由は勉強の為とRubyだと簡単すぎる問題もあったりするからです。Rubyだと場合によっては簡単に答えが出せてしまうものもあるのである程度手ごたえがあった方が楽しいです。C++だと細かいことは何も考えなくていい現代的な言語と違って、使って行くとコンピュータがどう動いているかもイメージできるようになってくるような気がします。昔コンピュータの動く仕組みを勉強しましたが今更なるほどなぁとか思ってます。
あとビット演算で変数を振り回したり弱い型付けを利用して違う方のデータを計算したり他ではあまりできない(少なくとも自分が使った言語では)のでそういうので遊んだりうまく使えたりするのも楽しいですね。
よく使う例だと文字から数を引いたりbool以外の変数をif文の条件に使ったりできます。


//0が入力されるまでループ
int n;
scanf("%d", &n);
while(n){
//なんかの処理
scanf("%d", &n);
}


//改行が入力されるまでループ
char c;
scanf("%c", &c);
while(c - 10){
//なんかの処理
scanf("%c", &c);
}


//ファイルの終わりまでループ
int n;
while(scanf("%d", &n) + 1){
//なんかの処理
}

とかでしょうか。開発とかだとあまり良くない書き方とされそうですがまあこういう書き方のが楽しいのでこんな感じで書いています。
あとビット演算とかも面白いですね。最後のファイルの終わりまで読み込むループではビット反転の演算子を使って~scanf()としてもいいみたいです。


競技プログラミングを始めたところで面白い問題を見つけました。こちら
最初の問題じゃなくてちょっと進んだところ(16番)の本題です。
数学的に解ける問題らしい(読んでません)ですがちょうどいい機会(競技プログラミングの問題として扱えそう)だったのでプログラムで解いてみました。
適当な範囲で数列を作ってから条件を満たすNを順番に探していく方法で解けました。予想以上に答えが大きい数字で最初はエラーになりましたがそこそこ楽しかったです。


(00:36)

2015年06月10日

たまたまRealForce106S(All30)を入手してしまいました。

動作不能ジャンクとのことでしたが何故かつないだら動いたのでそのまま使ってます。
動けばこっちのもんです。

動作したのは運が良かっただけですが、さすがにかなり古く動きも悪かったのでオーバーホールしてみました。
オーバーホールする前はラバードーム以外の抵抗感もありましたがオーバーホールしたら結構スッキリした打鍵感になって復活しました。
タイプウェルを打ってもそこそこいい感じの記録が出てます。

ちょっと使ってみた感想ですが、タイピングには非常に向いているというか指の動きが邪魔されず”押しこむ”という感覚が全く必要なく”キーボードの上で指を動かす”という感覚で入力できます。
慣れてしまうとなかなか他のキーボードで打てませんね。指の動かし方が完全に変わってしまいます(個人差があります)。All45のリアフォですら結構重く感じます。
かすりミスが増えるとよく言われますが自分の場合はキーが打てなかった場合の詰まりミスが減るのと力が抜けて余分な指の動きが減るのでミスは減る(ピアニストはできるだけ力を入れないようにすることでミスしにくくしているらしいです)傾向が出ています。この辺りは個人差がありますね。

タイピング(と言うかタイプウェル)に関しては文句がないくらい打ちやすいのですがやはり106キーボードということで使いにくい部分もあります。
いろんなキーボードを使ってきましたが106キーボードというかWinキーがついていないキーボードを使った記憶はありません。
余計なキーはいらないとかいって頑なにWinキーがついてないキーボードを好む人もいますが今の時代はこのキーが無いと結構厳しいです。
Winキーを使ったショートカットは結構豊富でWin+E(エクスプローラを開く)とかWinキー+数字でピン止めしたアプリに飛べるとか使っていたのでなくなると結構困ります。ちなみにWindowsだけでなくLinuxとかでも結構使います。Windows以上にショートカットキーが豊富な気もします。

タイピング以外でしか困らないように見えますが実はタイピングで結構面倒なことになることが一つあります。それは言語の切り替えのショートカットキーに使われる(Winキー+Space)ことです。
日本語だけ使うなら使うことはないですが多言語タイピングのために外国語キーボードに切り替えようとするとこれを使うので切り替えられなくなってしまいました。

というわけで多言語タイピングはしばらくお休み。

(01:02)