C言語によるショートコーディング(パスカルの三角形)第1回

| コメントをどうぞ

1年くらい前にCodeIQで出た問題をもう一度やってみる。

問題
C言語を使って、パスカルの三角形を20行表示するプログラムのソースコードを可能な限り小さくする。なお、メモリリークしてもとにかく動けばよい。
動作確認はideone(language:C)で行います。
http://ideone.com/

期待する結果は以下のとおり。

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1

なお、改行コードはCR, LF, CR-LFのどれでもよく、各行の末尾(改行の直前)にブランクがあっても、なくてもよいものとする。

Webで検索したら以下の素直に書いたソースがあったので、これを元にソースコードを縮めることにする。

\#include <stdio.h>

int v[20][20];

int main(){
    int i,j;
    for(i=0;i<20;i++){
        for(j=0;j<=i;j++){
            if(j==0)
                v[i][j]=1;
            else
                v[i][j]=v[i-1][j-1]+v[i-1][j];
            printf("%d ",v[i][j]);
        }
        printf("\n");
    }
}

とりあえずstdio.hのincludeは不要で、不要なブランクや改行を機械的に取り除いてみた。ideoneで実行すると”Runtime error”と表示されますが、main()にreturn 0;していないからです。そんな細かいことを気にしてはソースコードは短くなりません。

int v[20][20];int main(){int i,j;for(i=0;i<20;i++){for(j=0;j<=i;j++){if(j==0)v[i][j]=1;else v[i][j]=v[i-1][j-1]+v[i-1][j];printf("%d ",v[i][j]);}printf("\n");}}

これで160Bです。これで完成?いえいえ、ここからがスタートなのです。
つづく

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>