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

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

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

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

#第13回[Calendar]#

[問題]
今年のカレンダーを作る

[出力]
#1\n
 Su Mo Tu We Th Fr Sa\n
                    1\n
  2  3  4  5  6  7  8\n
  9 10 11 12 13 14 15\n
 16 17 18 19 20 21 22\n
 23 24 25 26 27 28 29\n
 30 31               \n
#2\n
 Su Mo Tu We Th Fr Sa\n
        1  2  3  4  5\n
  6  7  8  9 10 11 12\n
 13 14 15 16 17 18 19\n
 20 21 22 23 24 25 26\n
 27 28               \n
#3\n
 Su Mo Tu We Th Fr Sa\n
        1  2  3  4  5\n
  6  7  8  9 10 11 12\n
 13 14 15 16 17 18 19\n
 20 21 22 23 24 25 26\n
 27 28 29 30 31      \n
#4\n
 Su Mo Tu We Th Fr Sa\n
                 1  2\n
  3  4  5  6  7  8  9\n
 10 11 12 13 14 15 16\n
 17 18 19 20 21 22 23\n
 24 25 26 27 28 29 30\n
#5\n
 Su Mo Tu We Th Fr Sa\n
  1  2  3  4  5  6  7\n
  8  9 10 11 12 13 14\n
 15 16 17 18 19 20 21\n
 22 23 24 25 26 27 28\n
 29 30 31            \n
#6\n
 Su Mo Tu We Th Fr Sa\n
           1  2  3  4\n
  5  6  7  8  9 10 11\n
 12 13 14 15 16 17 18\n
 19 20 21 22 23 24 25\n
 26 27 28 29 30      \n
#7\n
 Su Mo Tu We Th Fr Sa\n
                 1  2\n
  3  4  5  6  7  8  9\n
 10 11 12 13 14 15 16\n
 17 18 19 20 21 22 23\n
 24 25 26 27 28 29 30\n
 31                  \n
#8\n
 Su Mo Tu We Th Fr Sa\n
     1  2  3  4  5  6\n
  7  8  9 10 11 12 13\n
 14 15 16 17 18 19 20\n
 21 22 23 24 25 26 27\n
 28 29 30 31         \n
#9\n
 Su Mo Tu We Th Fr Sa\n
              1  2  3\n
  4  5  6  7  8  9 10\n
 11 12 13 14 15 16 17\n
 18 19 20 21 22 23 24\n
 25 26 27 28 29 30   \n
#10\n
 Su Mo Tu We Th Fr Sa\n
                    1\n
  2  3  4  5  6  7  8\n
  9 10 11 12 13 14 15\n
 16 17 18 19 20 21 22\n
 23 24 25 26 27 28 29\n
 30 31               \n
#11\n
 Su Mo Tu We Th Fr Sa\n
        1  2  3  4  5\n
  6  7  8  9 10 11 12\n
 13 14 15 16 17 18 19\n
 20 21 22 23 24 25 26\n
 27 28 29 30         \n
#12\n
 Su Mo Tu We Th Fr Sa\n
              1  2  3\n
  4  5  6  7  8  9 10\n
 11 12 13 14 15 16 17\n
 18 19 20 21 22 23 24\n
 25 26 27 28 29 30 31\n
[期間]
1/1(土)22:00 ~ 1/8(土)21:59

[hr]
=結果=

投稿数 34件(6人)

1位 (177B)
nissy さん

CODE:

a,c,d=6;main(n){for(;++ad?printf("%3d",n-d),c=n:printf("   "));}
2位 (184B)
みけCAT さん

CODE:

m,y=6,s[6],a;main(d){for(;++m-13;y&&puts(a+y*3))for(printf("#%d\n Su Mo Tu We Th Fr Sa\n%s",m,memset(a=s,32,21)+21-y*3),d=1;(4460848>>m*2&3)+d-32;printf((y=++y%7)?"%3d":"%3d\n",d++));}
3位 (203B)
五反田 さん

CODE:

i=6,j,m;main(d){printf("#%d\n Su Mo Tu We Th Fr Sa\n",++m);for(j=i;i?printf("   ",--i):" @:@>@>@@>@>@"[m]/2>d;i||printf("%3d%c",d++,10|0>m*2&3)+d-32[/color][/font]

3位のコードは Q12 で使われた文字列による埋め込みです。
[font=Verdana][color=#000080]" @:@>@>@@>@>@"[m]/2[/color][/font]

式による埋め込みは高度ですが、適切な数式を発見できれば、固定データの埋め込みを上回るサイズ節約につながります。
さて、1位の式はどのように見つけたのでしょう?
nissy さんのコメントから補足:
基本的に 1月から7月の各月の日数は
[font=Verdana][color=#000080]30 + M%2[/color][/font]
で得られます(2月は例外)
それが8月以降は
[font=Verdana][color=#000080]30 + (M+1)%2[/color][/font]
となるので、
M = a+a/8 =a*9/8
とすることで、[font=Verdana][color=#000080]30 + M%2[/color][/font] の式をどの月にも共通して使えるようにしています。

[b]小手先のテクニックを自然に扱えるようにする[/b]
新年早々、ボリュームのある問題からスタートしました。
今回のランクインコードは、何をしているのかほとんど読み取れないかもしれません。
けれども、部分部分に着目すれば、今までの問題で紹介された多くのテクニックが利用されています。

第14回の問題は、初めての方にも優しい、比較的ライトな問題にしてみました。
新年を機に Code Golf の世界にチャレンジしてみるのも面白いかも!
種々のテクニックについては、過去の結果報告から復習できます。

みなさんの参戦をお待ちしています!
http://dixq.net/forum/viewforum.php?f=52

第14回の投稿受付中です。
最後に編集したユーザー あーる@Reputeless on 2011年1月08日(土) 22:54 [ 編集 5 回目 ]

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

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

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

> 五反田 さん
わぁ、ありがとうございます。ここまで短くできましたか!