1: 2011-03-07 (月) 08:54:35 k-tan[6] [7] | 2: 2011-03-07 (月) 09:44:24 k-tan[6] [8] | ||
---|---|---|---|
Line 9: | Line 9: | ||
--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になりました。 |
(This host) = http://osask.net