1: 2011-03-07 (月) 08:54:35 k-tan |
2: 2011-03-07 (月) 09:44:24 k-tan |
| --C言語の文法を全部使っていいもの(インラインアセンブラなどは不可)。サイズ制限なし。 | | --C言語の文法を全部使っていいもの(インラインアセンブラなどは不可)。サイズ制限なし。 |
| --blikeを使っていれば、もうなんでもあり(アセンブラからblikeを使うなども可)。 | | --blikeを使っていれば、もうなんでもあり(アセンブラからblikeを使うなども可)。 |
- | -長さの基準ですが、俗に言う「1画面」を単位に考えようと思います。つまり80x25=2000文字です。しかし25行以内というわけではありません。それはあまりに読みにくくなってしまうと思うからです。スペース類を含めずに数えて2000文字なら「1画面」とします。数えるためのプログラムはあとで示します。ということでインデントなどは普通にやってもらってOKです。 | + | -長さの基準ですが、俗に言う「1画面」を単位に考えようと思います。つまり80x25=2000文字です。しかし25行以内というわけではありません。それはあまりに読みにくくなってしまうと思うからです。スペース類を含めずに数えて2000文字なら「1画面」とします。ということでインデントなどは普通にやってもらってOKです。数えるためのプログラムはあとで示します。 |
| -難しさについては、 | | -難しさについては、 |
| --プリプロセッサ命令を使わない(だから#defineもダメ)、関数を作らない、switchを使わない、構造体を使わない、ポインタを使わない | | --プリプロセッサ命令を使わない(だから#defineもダメ)、関数を作らない、switchを使わない、構造体を使わない、ポインタを使わない |
| -を基準とします。配列を使わなければさらにいいですが、使ってもいいです。使う場合は、「少し難しい」に分類します。ちなみにwhileやdo-whileも使わなければもっといいですが(つまりループはforのみ)、まあ必要だったら使ってもいいです。 | | -を基準とします。配列を使わなければさらにいいですが、使ってもいいです。使う場合は、「少し難しい」に分類します。ちなみにwhileやdo-whileも使わなければもっといいですが(つまりループはforのみ)、まあ必要だったら使ってもいいです。 |
| + | -このページ群はKによって管理されているので、自作のプログラムを勝手に登録することはできません。しかしサンプルは多いほうがいいので、もしプログラムをいただければ、審査・調整の上、分類して掲載させていただきます。応募は掲示板などでお願いします。 |
| + | *** 目次 [#b997e8bf] |
| + | -A: proglen <= 2000 && 配列なし |
| + | -B: proglen <= 4000 && 少し難しい |
| + | -C: C言語only |
| + | -D: blikeを使えばOK |
| + | ---- |
| + | -[[blike/works/p0001]] : (A, proglen=1233) 宇宙基地到着ゲーム |
| + | |
| + | *** 文字数を数えるプログラム [#kf0ac3d3] |
| + | -proglen0.c |
| + | #include <stdio.h> |
| + | #include <stdlib.h> |
| + | |
| + | int main(int argc, unsigned char **argv) |
| + | { |
| + | unsigned char *b = malloc(1024 * 1024); |
| + | FILE *fp; |
| + | int s, i, l; |
| + | char f; |
| + | if (argc >= 2) { |
| + | fp = fopen(argv[1], "rb"); |
| + | if (fp != NULL) { |
| + | *b++ = 0; |
| + | s = fread(b, 1, 1024 * 1024 - 2, fp); |
| + | fclose(fp); |
| + | f = 0; l = 0; |
| + | for (i = 0; i < s; i++) { |
| + | if (b[i] == '\n') f = 0; |
| + | if (b[i] == '\"' && b[i - 1] != '\\') f ^= 1; |
| + | if (f != 0 || b[i] > ' ') l++; |
| + | } |
| + | free(b - 1); |
| + | printf("proglen = %d\n", l); |
| + | } |
| + | } |
| + | return 0; |
| + | } |
| + | -まだblikeでファイルやコマンドラインをどう扱うかを決めてなくて、とりあえず標準関数で書きました。すみません。 |
| + | -このproglen0.cのproglenは367になりました。 |