ページへ戻る

− Links

 印刷 

blike​/works のバックアップ差分(No.2) :: OSASK計画

osaskwiki:blike/works のバックアップ差分(No.2)

« Prev[4]  Next »[5]
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になりました。
« Prev[4]  Next »[5]