数年前にMITの学生が7行のperlのコードで,DVDの暗号を解くプログラムを公開しました.
7行のコードでも意外と色々な事ができる物です.
このページでは7行で書けたプログラムを公開します*1

7行プログラム

DFAシミュ

Cで書いた,決定性有限オートマトン(DFA)のシミュレータです.

#include <stdio.h>
#include <stdlib.h>
int main(int c,char**v){int i=0,T;int*S,*N;FILE*f;char*L=malloc(256);if(c<2
||!(f=fopen(v[1],"r")))return 1;S=calloc(sizeof(int)*256,atoi(fgets(L,255,f))+1)
;while(!feof(f))fscanf(f,"%d,%c",&T,&c)^1?(S[i*256+(char)c+1]=T+1):(S[(++i)*256]
=T);fclose(f);N=S+256;fgets(L,255,stdin);while(*(L)&&(*(L)!='\n')&&(*(L)!=13))N=
S+N[*(L++)+1]*256;*N?puts("受理しました"):puts("受理しませんでした");return 0;}

解説はこちら

シェル

Cで書いたUNIX用のシェルです.大学の課題で提出しました.
実行時に

./ish PATH=/usr/bin TZ=-9

のようにすると,環境変数を指定できます.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern char**environ;main(int c,char**a){char*V[9],B[99],**A,*C,i;for(environ=a+
1;printf(">")&&fgets(B,99,stdin);){*strchr(B,10)=0;for(*(A=V)=C=B;C=strchr(C,32)
;*++A=C)*C++=0;*++A=0;if(!strcmp(*V,"exit"))exit(0);if(strcmp(*V,"cd")||chdir(V[
1])){switch(fork()){case 0:execvp(*V,V);case-1:puts("err");exit(0);}wait(0);}}}

7行では残念ながらパイプやリダイレクトの実装はできませんでした.

1行プログラム

おまけです.

英単語の数を数える

perlで書いた,英単語の数を数えるプログラムです.
標準入力から取り込んだテキストファイル中に含まれる単語の数を数え,
単語と出現回数を出現頻度順に(降順に)ソートして出力します.
ただし,単語の大文字,小文字は区別せず,出力時には全て小文字で出力します.

map{s/\w+/$w{lc$&}++/ge}<>;map{print"$_ $w{$_}\n"}sort{$w{$b}-$w{$a}}keys%w

解説はこちら

リンク集

  • 256b.htm Competition
    256バイトのHTMLファイルでどれだけ面白いウェブページが作れるか競うコンテストです.
    256バイトとは思えないくらい動きます.

*1 大学の課題ばかり^^;