[問題]
# を使ってシェルピンスキーのギャスケットを左詰めで32段目まで描く
[出力]
# \n ## \n # # \n #### \n # # \n ## ## \n # # # # \n ######## \n # # \n ## ## \n # # # # \n #### #### \n # # # # \n ## ## ## ## \n # # # # # # # # \n ################ \n # # \n ## ## \n # # # # \n #### #### \n # # # # \n ## ## ## ## \n # # # # # # # # \n ######## ######## \n # # # # \n ## ## ## ## \n # # # # # # # # \n #### #### #### #### \n # # # # # # # # \n ## ## ## ## ## ## ## ## \n # # # # # # # # # # # # # # # # \n ################################\n[期間]
12/4(土)22:00 ~ 12/11(土)21:59
[hr]
=結果=
投稿数 20件(7人)
1位 (71B)
五反田 さん
main(s,j){for(j=0;putchar(j-32?s>>j++&1?35:32:10)/j;);~s&&main(s^s*2);}
ideyan さん
i;main(a){for(i=33;i;)putchar(--i?a>>32-i&1?35:32:13);~a&&main(a^a*2);}
3位 (77B)
a5ua さん
j;main(i){do for(j=1;j;j*=2)printf(i&j?"#":" ");while(puts(""),(i=i^i*2)-1);}
4位 (80B)
roxion1377 さん
i,j;main(a){for(;i++>j++?35:32);}
*1位1番乗り
五反田 さん
[hr]
★解説
どうやってパターンを作るか
パスカルの三角形の奇数を塗りつぶすとシェルピンスキーのギャスケットが現れます。
奇数を ビット列の 1、 偶数を 0 に置き換える方針でプログラムを組んだのが、上位のコードです。
[table=width:330px;border:1px solid #cccccc;][tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]3 = 1^(1*2)[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]5 = 3^(3*2)[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]15 = 5^(5*2)[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]17 = 15^(15*2)[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]51 = 17^(17*2)[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]0[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]85 = 51^(51*2)[/td][/tr]
[tr=text-align:center;][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]1[/td][td=border:1px solid #cccccc;]255 = 85^(85*2)[/td][/tr][/table]
興味深いことに、1 からそれ自身の2倍とのXOR演算を繰り返すことで、延々とシェルピンスキーのギャスケットの模様を得ることができます。
この方法だと、一番下の段が 0xffffffff になるので、終了判定が ~ 演算だけで済む利点もありました。
興味が出てきたら、コミュニティ「Code Golf を楽しもう」まで!
初心者歓迎、参戦&観戦いつでもお待ちしています!
http://dixq.net/forum/viewforum.php?f=52
第10回の投稿受付中です。
[hr]
コミュメンバーからの出題企画について
対象となった第8回投稿者の方は、企画の参加について 12 月中にコミュ主までご連絡ください。
詳しくは第8回の結果発表をご覧ください。
.