c
githubに。なんかライブラリ風にまとめてみた。stackallocのテストと同様の動作をするobstackを使うプログラムも同梱。 http://github.com/hogelog/stackalloc 総じてobstackの方が性能良いけど、stackallocは使う道具を標準libcに限ってるので、こんなもん…
obstackという、正にそのものがあった。MIT LicenseのLuaに組み込む目的なのでインターフェースなど参考にしつつ、こっちを組み込んでビルドすることもできるようにしておこう。thanks! alohakun id:kikx
要はこういうスタック割り当て、案外便利っすよと。 #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct Frame { struct Frame *prevframe; void *top; size_t index; } Frame; typedef struct Slot { void *slot; void *last; size_t size; } Slot; typedef str</assert.h></stdlib.h></stdio.h>…
rubyのソースコードを眺めていたらrb_str_timesの実装がおもしろかったので、実際そういった書き方をすることでどれだけパフォーマンスに差が出てくるのか試してみました。http://codepad.org/AQbS4Ilu #include <stdio.h> #include <stdlib.h> #include <string.h> inline unsigned long </string.h></stdlib.h></stdio.h>…
twitterで hogelog bufで1024とかつい2のn乗確保するけど、なんか2のn乗じゃなくて○○の方が良いとかそんな意見をどっかで見たことあるような気がすんだけど、気のせいだろうか anemo @hogelog mallocが2^nで確保するのは、初期段階で必要なサイズがわからな…
たぶん設定ファイルをS式にしてほげほげとか考えてたんだと思う。最低限の機能にした。読めるのは整数と文字列と識別子と、リストだけ。内部的にはコンスセルによるリスト。 http://konbu.s13.xrea.com/lib/etc/sexp.zipC言語リハビリということで。例外処理…
数値計算っぽい雰囲気のレポートに使うプログラムが、どうしてもうまくいかんなーと思ってたら行列の積を求める関数が死んでた。 double **mat_mat_multiply(double **result, double **x, double **y, int n){ int i, j, k; double **tmp = makeMatrix(n); …
そういえば俺最近C言語の本とか読んでねえなあと思って、今大学の図書館で K&R の原本を借りてちょいちょい読んでる。英語慣れしたいから英語の本読んでんだけど、なんか変に読み飛ばす癖が付いてるような気もしてほげら。 Appendix がありがたいです。Gramm…
なんか最近微妙にまわりでダイクストラ法がブームらしいので、C言語で書いてみる。つっても、汎用的な書き方ってのをどうやるかは知らないんだけど。大学の同級生とか後輩とかがプログラムで迷路を解く課題に苦しめられたらしいので、俺的理解のダイクストラ…
http://d.hatena.ne.jp/shinichiro_h/20060830 shinhさんのコード参考に。 % cat imain.c int main = 0x90c332b0; % cc imain.c -o imain % ./imain.exe ; echo $? 50 % cat cmain.c char main[] = "\xb0\x32\xc3"; % cc cmain.c -o cmain % ./cmain.exe ; e…
わりとありがちなネタで。まったく関係ない講義受けてるときにふと思いついた。 #include <stdio.h> #include <string.h> char COUNTER_CODE[] = { 0x55,0x89,0xe5,0xff, 0x05,0x00,0x00,0x00, 0x00,0xa1,0x00,0x00, 0x00,0x00,0xc9,0xc3 }; /* int falsecounter(){ return ++*(</string.h></stdio.h>…
「簡単なシェルプログラムをつくってレポートを提出しなさい。でも A4 4枚程度に収まる程度でよろしく」なんて講義がありまして。後ろの条件が無ければまた脳みそ熱くなって馬鹿かますところですけど、まあ適当に fork して exec する程度のプログラム書け…
高階関数が使えるとどんな場面で便利かなー、と。とりあえずsort関数とか。 #include <stdio.h> int lt(int a, int b){return a<b?1:0;} int gt(int a, int b){return a>b?1:0;} void sort(int list[], int n, int (*compare)()){ int i, j, t; for(i=1;i<n;++i){ t = list[i]; for(j=i;j>0 && (*compare)(list[j-1], t);--j) list[j] = list[j</n;++i){></b?1:0;}></stdio.h>…
そういえばC言語でも高階関数できるんだよなあ、と。よく考えればそうじゃなきゃ、qsort関数とか役にたたないな。 #include <stdio.h> int plus(int a, int b){return a+b;} int minus(int a, int b){return a-b;} int acum(int (*f)(), int a, int b){ return f(a, b</stdio.h>…
なんかおもいつきでBrainf*ckインタプリタを作ってみた。過去に何度か作ろうとしたけど、ちゃんと動かなかったりした。んで「ああ俺やっぱりプログラミングとか向いてねーなー」と思ったものですが。今回作ってみたら特につまることもなくスムーズにできた。…
1B 1B 1B 1B 2C 2C 33 98 98 98 というデータを 04 1B 02 2C 01 33 03 98 というような、データとそれが連続して出た回数で書き記すような方法をランレングス法(RLE)と呼びます。でも少し考えるとわかることがありまして。連続出現が0回のデータなんて出て…
圧縮プログラムenc、伸張プログラムdec。 % cc enc.c -o enc % cc dec.c -o dec % cat hoge abc abbc abc cde cde cdeeacd cabe abe cafe age fage aaaabbbbcccc abc abc abcc abc fbcd fbcd fcbd ddcb dcb % ./enc hoge % ll hoge* -rw-r--r-- 1 sun31048 J…
なんか、ハフマン符号化が少しわかった気がするぞ。あと二分木とか。プログラムを書いてようやく。実践を伴わない知識っていうのは宙に浮いてるようで、なんか居心地が悪い。実際に使ってみると、なんだか錨で固定したような気分になれるなあ。二分木に関し…
文字列型で渡された"10111"みたいなビット列を、実際のビット列として書き出す関数putbitsを作ろう。でも困ったことにコンピュータさんは、8の倍数ビット単位での読み書きしかできないらしい。というか、だからこんな関数が必要になるわけだが。putbits("101…
変換辞書と、データ部分は別ファイルに。 % gcc press.c % ./a.out bar % ls -l bar* -rw-r--r-- 1 sun31048 J03A 24 Nov 16 19:09 bar -rw-r--r-- 1 sun31048 J03A 10 Nov 16 19:10 bar.code -rw-r--r-- 1 sun31048 J03A 4 Nov 16 19:10 bar.data % cat bar…
そういえば俺がコンピュータほげほげにはまったキッカケの一つって、「圧縮」がすごいおもしろかったから、だったよなあ。今をときめくK.INABAさんを知ったのもそれでだ。「今をときめく」ってどういう表現だ? と思い、教えてgoo辞書さん「ときめく」したら…
C言語で文字単位の2-gramモデルの統計を取って、統計データから適当に文章を出力してみた。マルコフモデルだN-gram統計だにしろ、文章出力するためのものってわけでもないけど、それにも使える。 N-gramと最尤推定法で、そのうちなんか遊んでみたいなあ。Cと…
とりあえずなんでもunsignedをつけてるとfor(unsigned int i=10;i>0;--i)とかやって無限ループやりがち 一文字変数名は制御用の変数としてi, jとか使う程度にしてほしい。l(小文字のエル)とか使う奴は、なんの嫌がらせですかそれ。