プログラミング

Bonanzaの対称性すげー!

左右反転した盤でコンピュータと将棋を指してみたいと思った。相振り飛車の感覚で相居飛車をやったら自分はどんな陣形を目指すのか。逆の相振り飛車や対抗型も気になる。将棋というゲームは左右を入れ換えても本質的には何も変わらないのだが、だからこそ、…

プログラマにも、数学型と物理型がいると思う

数学者は、微分方程式を前にして解が存在するかどうかを考えている。物理学者は、これで解けたっぽいからこれでいいじゃんと言う。 数学は、何でもやる。センスのかけらもない人間が研究するのだから、厳密にやらないといけない。物理では、そもそも解のない…

残念なランダムドットにならないために

ランダムドットステレオグラム。うっかり作ると右のようになってしまう。見た目が汚いというのもあるが、描かれている図形が何となくわかってしまうというのが、ノイズにしか見えないのが売りのランダムドットとしては致命的だ。 基本となるランダムドットを…

プログラミング的ゲーム

アルゴリズム体験ゲーム・アルゴロジック|JEITAソフトウェアで未来をつくるこのゲーム、面白いだけでなく、きっちりプログラミングの風味が入っている。 荒削りで走らせてみて、失敗の瞬間にあそこがバグだとわかる。難しそうな対象が、やってくうちに本質…

プログラマの性

ニコリのスラロームというパズルを解いていたのだが、旗門の総数が5で、ある旗門の番号が4だったとき、そこから直接(他の旗門を通らず)○へつながると思ってしまった。4の次には5番目の旗門が残っているというのに。

直角三角形の分割(5個に)

同形5分割はカオスを意味する辺の長さが1:2:√5の直角三角形(正方形を横に半分、次に対角線で半分にした形)は、自身と相似である5つの合同な直角三角形に分割できるらしい。しかも、分割を繰り返すだけで非周期的なタイル貼りができるというじゃないか!こ…

音でオシロスコープ

ついつい起動して口笛を吹いてしまうことうけあい。ノートPCなら大抵マイクが内蔵されている。ダウンロードはこちらから

ルビンの壷みたいなの

ノートPCの内蔵マイクを使ってスペアナのようなものを作っている。そしたら下図のように、1ドットの白い隙間ができてしまった。(段々になってるのは、周波数分解能が足りないことによる仕様で問題ない)しばらく考えてソースの間違いを見つけ、この現象は解…

プログラミング言語のあるべき姿

人間が書くものだから、人間にわかりやすい言語がいい、という考え方はあると思う。動作が多少遅くても、それがデメリットとなるケースは稀で、メリットは遥かに大きい。 しかし、多少なりとも速度を考えながらコーディングするというときには、CPUの仕様に…

C++でステータスバーに表示するテキストを右揃えにする方法

By default, text is left-aligned within the specified part of a status bar. You can embed tab characters (\ t) in the text to center or right-align it. Text to the right of a single tab character is centered, and text to the right of a sec…

桜井政博がすごすぎる

http://www.project-sora.co.jp/interview/04.htmlWii.com JP - 移転いたしました 「ものがまったくできていないときに 完成イメージが頭の中で ほぼ完璧にできて動いている」 http://wii.com/jp/articles/smashbros/crv/vol1/page4.html ちょっとすごい能力…

円周率を暗記していると少しは役に立つ

小学6年生辺りで、70桁までほぼ定着した。その後もこつこつ覚えようとしたが、ほとんど忘れてしまった。しかしいつでも70桁まではスラスラ言えるカラダになった。 例えば円周率を100桁計算させるプログラムを試作したとき、目視で正しいことを確認できる。こ…

お行儀よく書く意味って何なの

グローバル変数使ったりgoto使ったり。今までの経験や勉強したことから、論理的に「これはダメだ」と思ったときは、もちろんちゃんとお行儀よく書くようにしている。 問題はそうじゃないときで、ここであえて泥沼に突っ込まない理由がわからない。変な書き方…

CRC-32について

とりあえず、CRC値を計算するためのコードを示す。CRCを計算するフリーソフト2つと出力が一致したので、多分あってると思う。 #include <cstdio> class CRC32 { unsigned long table[256]; public: unsigned long calc(void *d, int len) { unsigned char *c = (unsi</cstdio>…

char同士の演算もintで行われる

次のコード(C言語)を実行すると、どのように出力されるだろうか。 #include <stdio.h> int main(){ unsigned char a = 0, b = ~a; if (b == ~a){ printf("b == ~a\n"); } else { printf("b != ~a\n"); } printf("%d\n", ~a); printf("%d\n", b); return 0; } 実際に</stdio.h>…

TT_IME 1.4

http://merom686.g1.xrea.com/soft.htmlアイコンのチラつきや、タスクバーのIMEの状態を表示してしまうのを改善。アイコンの切り替えをワンテンポ(タイマーで15ms)遅延させただけ。何ヶ月も見てないコードを触るのは怖いので更新が遅れてしまった。だから…

b2u公開(Bonzna to USI)

b2uBonanzaを、USI対応の将棋GUIで使うためのもの。既にそういうソフトはあるけど、Bonanzaにはmove restraintというコマンドがあって、その機能を使ってみたかった。 * move restraint 次の一手を思考.但し,restraint.dat 内に羅列されている合法手を指さ…

かんたんなのにできない

慣れた人にとっては簡単な問題があって、自分がそれに直面したとき。まず一目で簡単そうだと直観し、どんなに汚いコードでもいいならこう書けばとりあえず仕様通りの動作になるなとイメージできたとする。ここで、きれいな書き方や高速に動作する書き方がわ…

C#飽きた、やっぱりC/C++が好き

C#で、マルチスレッドでマンデルブロ集合を描くプログラムを書いていて詰まった。詰まったというかやる気が出なくなった。性格的にLockBitsしてからMarshal.Copyなんてやってられないわけで、背後にあるWindowsAPIを見ながら最も無駄のないコードを目指す。…

最近流行りのC#

Visual C#をインストールしたPCのメモリが壊れていたorzなのでここ数日は普段のPCで、IDEなしでC#をいじっている。.NET Frameworkだけインストールすればとりあえず開発できるらしい。 テキストエディタでコーディングし、csc.exeでコンパイル。MSBuild.exe…

多数のフラグを「フラグを表す配列を初期化せずに」初期化して使う方法

http://d.hatena.ne.jp/kaminarioyaji/20081204/1228387500http://research.swtch.com/2008/03/using-uninitialized-memory-for-fun-and.html下のリンクは長い英語なので読んでないが、同じことを言ってるらしい。完全に理解したわけではないが、この方法が…

C#、複素数クラスの罠

CompileAssemblyFromSourceという素敵メソッドを発見。C#ならこういうことができると思っていた。テキストボックスにz*z*z+cなどと入力してマンデルブロ集合を表示させたいと前から思っていたが、これで簡単に、そしてC言語に近いくらい高速に実現できる。さ…

C#でアセンブラを使う方法

MSILのことじゃないよ。MASMでアセンブルするx86アセンブラ。手元の環境はMicrosoft Visual C# 2010 Express。以下、使うための手順。MASM32 SDKのSDKか、Visual C++をインストールして、ml.exe(アセンブルする)とlink.exe(DLLを作る)をゲット。それらと…

3日目のC#

相変わらずアセンブラを頑張り中。 外部ツールを使うときに、「保存してから」開くという動作ができなくて困った。代わりに、「ビルド前に実行するコマンド ライン」という素敵な機能を発見。アセンブラのファイルをMASMでDLL化するバッチファイルを書いて登…

明日から、第20回世界コンピュータ将棋選手権

http://www.computer-shogi.org/5/2(日)一次予選、5/3(月)二次予選、5/4(火)決勝。 いよいよ明日。元々コンピュータ将棋には興味があったけど、自分で将棋を指せるようになっていて本当によかった。プログラミングも将棋もヘボだけど、とにかく自分の目で観…

2日目のC#

「C#ならこれができるだろう」と思ったことが大体できてしまう感覚がいい。VBの使いやすさとVC++のかっこよさをあわせ持つ感じで気持ちいい。起動時間や全体的な重さは、PentiumIIマシンでVB6.0を使っていたときのようだ。たまにはMicrosoftも、一瞬で起動す…

初めてのC#

ついにVisual Studio 2010が出てきた。かねがね試してみたいと思っていたC#をここからダウンロード。普段使っているPenM+SSDのマシンではきついので別PCで、使ってみた。 とりあえずライフゲームでも作ってみようと思ったのだが、時間変化するものは難しそう…

1000 1001 1110 1111 1001 1000 0110 0010 1000 0011 0101 1000 1000 0011 1000 1100

1000 0010 1011 0001 1000 0010 1100 1100 1000 0011 0101 1000 1000 0011 1000 1100 1000 0010 1100 1100 1000 0010 1011 0001 1000 0010 1100 0110 1000 0010 1100 1101 1000 0010 1010 1111 1000 0010 1100 0001 1000 0010 1011 0001 1000 0010 1010 0100…

色の立方体の断面を見たい!

カラーキューブの断面パソコンのディスプレイは、通常16777216種類の色を表示できる。赤の明るさが0から255までの256通り、緑と青も同様に256通り。256の3乗で16777216通りだ。要するに、256×256×256の立方体に全ての色が入るのだ。となれば、その立方体を見…

JavaScriptで再帰しすぎてエラーに

アッカーマン関数をJavaScriptで書き、関数呼び出し回数をカウントした。すると、Ack(3, 3)は61だが、関数は2432回も呼び出された。この何の工夫もしないバージョンでは、ChromeがFirefoxよりも圧倒的に速かった。一度計算した結果を二次元配列に残して再利…