第9回 mixC++ Code Golf 結果報告

アバター
あーる@Reputeless
記事: 84
登録日時: 15年前
住所: 千葉

第9回 mixC++ Code Golf 結果報告

投稿記事 by あーる@Reputeless » 14年前

#第9回 [Sierpinski gasket]#

[問題]
# を使ってシェルピンスキーのギャスケットを左詰めで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回の結果発表をご覧ください。
.
最後に編集したユーザー あーる@Reputeless on 2011年1月01日(土) 21:33 [ 編集 2 回目 ]

xxx
記事: 26
登録日時: 15年前

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by xxx » 14年前

おー4位だー
毎回1位のコードは見るたびに驚かされますね・・・
何とかして上位に入りたい・・・

五反田さんのヒントがなかったら配列なんか使ってた私

CODE:

a[32],i,j;
main(){
  for(*a=1;i++<32;){
    for(;j<32;)
      putchar(a[j++]&1?35:32);
    for(puts("");j;)
      a[j]+=a[j---1];
  }
}

アバター
あーる@Reputeless
記事: 84
登録日時: 15年前
住所: 千葉

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by あーる@Reputeless » 14年前

> roxion1377 さん
僕も最初は配列を使う方法しか思いつきませんでした (´╹◡╹`;;;

アバター
沖 滉均
記事: 237
登録日時: 14年前

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by 沖 滉均 » 14年前

roxionさん、自分も最初配列使ってましたよ
その結果最初は138Bもあったんですよorz

アバター
あーる@Reputeless
記事: 84
登録日時: 15年前
住所: 千葉

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by あーる@Reputeless » 14年前

> 沖 滉均 さん
五反田さんの記事のおかげか、中間発表後はビット演算方式のコードが怒涛の勢いでやってきました。

アバター
沖 滉均
記事: 237
登録日時: 14年前

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by 沖 滉均 » 14年前

確か、中間発表の時点では2人でしたよね?
ということは自分含めて5人がアレをベースに作成していたのだろうか…

アバター
ideyan
記事: 2
登録日時: 15年前

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by ideyan » 14年前

おぉ、同率1位だー、やったー!1番のりじゃないけど嬉しい!
中間発表のときの77byteからここまで縮めるのに目茶目茶苦労しました。。。

アバター
五反田
記事: 21
登録日時: 15年前

RE: 第9回 mixC++ Code Golf 結果報告

投稿記事 by 五反田 » 14年前

結局追いつかれてしまったようですね。
何人かの人には縮めるのに自分の記事が役立ったようで、よかったです。

あと、a5uaさんのアイディアを拝借です。(67byte)

CODE:

j;main(s){for(j=1;putchar(j?s&j?35:32:10),j;j*=2);~s&&main(s^s*2);}
実行結果
http://ideone.com/7Axwm

それと、あーるさんに自分の出題参加メッセージが届いているか心配なのですが、気づいていますか?

アバター
あーる@Reputeless
記事: 84
登録日時: 15年前
住所: 千葉

Re: 第9回 mixC++ Code Golf 結果報告

投稿記事 by あーる@Reputeless » 14年前

> 沖 滉均 さん
中間で2人とか、一時はどうなることかと・・・(笑)
惜しくもランクインを逃された初挑戦の方もいらっしゃり、久々な盛況でした。

> ideyan さん
おめでとうございます!
上位のコードは洗練されてて、圧倒的なインテリジェンスを感じます!!

> 五反田 さん
あらら、70B を切ってしまった・・・ ( ゚Д゚)

*出題参加について
ただいまご案内のPMを用意しております。
早ければ今夜中に送りますのでよろしくお願いします (╹◡╹