Skip to content

Instantly share code, notes, and snippets.

View k3kaimu's full-sized avatar

Kazuki Komatsu k3kaimu

  • Toyohashi University of Technology
  • X @k3k0ma
View GitHub Profile
@k3kaimu
k3kaimu / gist:5307790
Last active December 15, 2015 18:59
素因数分解とか
void findXY(int m)
{
int x = (int)sqrt(m),
y = 0;
int diff = x * x - y * y - m;
while(diff != 0){
if(diff < 0)
++x;
else
@k3kaimu
k3kaimu / map.d
Last active December 17, 2015 08:58 — forked from majiang/map.d
コンパイルしてないので動くかどうか不明
module map;
auto map(FT, ATR)(FT f, ATR x)
if(isInputRange!ATR && is(typeof(f(x.front))) && !is(typeof(f(x.front)) == void))
{
static struct R
{
auto front()
{
return f(x.front);
void oct2bin(const char *oct, int n, int nbit, char *bin, int skipLast, int flip)
{
int i, cnt = 0, skip = 0;
const static char octlist[8][3]={{1,1,1},{1,1,-1},{1,-1,1},{1,-1,-1},{-1,1,1},{-1,1,-1},{-1,-1,1},{-1,-1,-1}}; /* 0=>1, 1=>-1 */
if(n * 3 >= nbit)
skip = skipLast ? nbit : (n * 3 - nbit);
for(i = 0; i < n * 3; ++i){
if(skipLast){
@k3kaimu
k3kaimu / gist:5603730
Last active December 17, 2015 11:39
gen_legendre_sequence ・全要素が1となる ・速度遅い のを修正したコード
void gen_legendre_sequence()
{
int i;
for(i = 0; i < 10223; ++i)
legendre[i] = 1;
for(i = 0; i < 10224; ++i)
legendre[(i * i) % 10223] = -1;
legendre[0] = 1;
@k3kaimu
k3kaimu / gist:5693467
Last active December 17, 2015 23:59
//##$ dmc %src% //## %src.exe% みたいに使う。
/** ソースファイルの先頭に書かれた"//##"行を読み取って、コマンドを打ち込みます。
* "//##"行は複数でも構いません。複数行の場合には、上から順番に実行されます。
//##$ <commands> このようにすると、shellでコマンドを打ち込みます。
commandsの中に"%identifier%"があれば、展開されます。
commandsはスペース区切りで入力する必要があります。
//##& set waitTime <long> プロセスを待つ最大の時間を設定します。
//##& let <identifier> = <string> <identifier>を<string>に束縛します。
<string>には%src%や%arg[n]%など%<identifier>%を入れることもでき、それらは展開されます。
@k3kaimu
k3kaimu / gist:5787336
Last active December 18, 2015 13:08
d-manual, 「007 その他の制御文」途中まで

その他の制御文

goto文とラベル

アセンブリ言語や機械語を書いたことのある人なら「ジャンプ命令」は知っていると思います。 「ジャンプ命令」とは、プログラムの実行位置(制御位置)を指定アドレスに移動する命令です。 アセンブリ言語では、for文とかforeach, while, ifなどの構造化文ありませんから、それらはジャンプ命令を使って実現します。

たとえば、次のD言語のコードを、Z80アセンブラで記述し、さらにD言語のコードに変換してみましょう。

配列

配列(Array)とは?

配列というのは「メモリ上に連続した値のリスト(list)」です。 たとえばint型の配列は、int型の値がメモリ上に連続しているリストのことを言います。 配列を構成する個々の値のことを要素(element)とよび、各要素にアクセスするにはメモリ上での順番と同じインデックス(添字, Index)という整数値を使い、arr[idx]とします。 arrは配列型の値で、idxはインデックスを表す整数型の値です。 インデックスはメモリ上での順番に沿って0, 1, 2, 3, ...と割り振れるため、インデックスが0の要素arr[0]を「先頭要素」、インデックスがidxな要素arr[idx]を「idx番目の要素」などと言ったりします。 注意しなければいけないのは、「先頭要素」と「0番目の要素」は同じ意味です。

@k3kaimu
k3kaimu / gist:5891381
Last active December 19, 2015 03:38
d-manual, 「009 連想配列」 誤字脱字チェック:未完 推敲:未完

連想配列

連想配列(Associative Array)とは?

連想配列は、その名前の通り、「キー(key)から、値(value)を連想する」配列です。 ちゃんと言うと、「インデックスが整数じゃなかったり、飛び飛びの値になっている配列」になります。 つまり、「文字列をインデックスとしてdouble型の値を格納した連想配列」というのもできます。 連想配列では、配列でインデックスと呼ばれたものは「キー(key)」といわれます。

基本操作

@k3kaimu
k3kaimu / gist:5942930
Last active December 19, 2015 10:49
010 ポインタ

ポインタ

ポインタとは(復習)

これまでの記事でポインタは何回も出てきたので、ここまで読み進めた方にはわかると思いますが、ポインタとは「メモリ上でのアドレス」です。

@k3kaimu
k3kaimu / gist:5997753
Last active December 19, 2015 18:19
011 関数

関数とデリゲート

関数とは?

関数は、有限のデータ(引数, argument, parameter)を受け取って、なにか処理や加工を行なった結果のデータ(戻り値, 返り値)を返すものです。 数学的な関数は、同じ引数が与えられれば同じ結果を返しますが、プログラムの関数はそうではありません。

関数は、パッケージ化の最小単位とも言えます。 まとまった処理を、関数として書いておけば、後から再利用できます。