渦巻き生成ってめんどくさい
どうも、72日ぶりの更新の@orisanoです。
渦巻き生成っていざコードに落とそうと思うとめんどくさいって思いました。
(ICPCのD問題を見た感想)
なので、てきとーに関数を作っておけばいいと思ったので作りました(てきとー
可読性もひったくれも無いコード。
int make_spiral(int *m, int s, int n, int hour, int is_cw) { int x, y; int c, l, v, i; int t[] = {0, -1, 0, 1, 0, -1, 0, 1}; int *d = t + (hour / 3 % 4 + 4 & 3); n & 1 || n++; x = y = n / 2; c = l = v = 0; n *= n; for (m[y * s + x] = ++c; c < n; v &= 3){ for (i = 0; i < l; i++){ x += d[v + 1]; y += d[v] * (is_cw ? 1 : -1); m[y * s + x] = ++c; } if (++v & 1) l++; } return (0); }
試しに使ってみたのがこれです。http://ideone.com/zDWAgk
コメントはめんどくさかったので書きませんでした。察してください。
あと回転が始まる方向は時計の針の方向を採用しました。
3時、6時、9時、12時の方向が選べるはず、それが引数のhourですね。
久々の更新が適当ですいません。