第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 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前

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

投稿記事 by みけCAT » 14年前

不思議な数式wwwww
でも2位か...
まあ、また次回がんばろう。

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

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

投稿記事 by xxx » 14年前

nissyさんが強い(-_-;)
みんなすごいコード書きますねー

この1年で1回は五反田さんに勝ちたいですね・・・今年はこれが目標だ!

アバター
zentR
記事: 26
登録日時: 15年前

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

投稿記事 by zentR » 14年前

あと2Bでランクインしたのに・・・

最後まで粘っとけばよかった・・・orz

nissy
記事: 11
登録日時: 15年前

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

投稿記事 by nissy » 14年前

8月から31と30が逆になってるので
a+a/8=a*9/8
としました。

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

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

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

> みけCAT さん
その発想はなかったというか、どうやって発想するのか・・・

挑戦しはじめてから、ランクインが続いてますね!
コードサイズを削って、自分の時間を削りすぎないように! これ、3つ目のポイントです。

> roxion1377 さん
数バイトの差でランクインを逃した方を含め、今回はみんなレベルの高いコードを投稿してくれました。
全部のテクニックを組み合わせるともっと削れる気がするのですが、僕の残念な頭ではムリでした _ノ乙(、ン、)_

どなたか思い浮かんだ方がいたら、教えてください (╹◡╹*

> zentR さん
今までも1Bや2Bの差で上位半数にランクインしなかった方が多くいましたが、今回は特に惜しかったです!

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

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

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

> nissy さん
Oh... いたってシンプルでした (つ∀=
短くなると、式本来の意味が分からなくなってしまいますね

アバター
bitter_fox
記事: 607
登録日時: 14年前

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

投稿記事 by bitter_fox » 14年前

惜しかった、、、僕も、あと2B縮めれたらランクインできてたのに・・・orz

次ぐらいには、3番手には入っておきたいですね。。。
にしても、上位陣は相変わらずカオスなコードになってる・・・

そして、意外なことに、上位陣は誰も、
printf("%*s", n, "")を使って無いという・・・

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

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

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

会社にコードを忘れてきた残念な人の登場です。
だから、今回は忘れるとかそういうことが起こらないように気をつけよう(・ω・`)
そして今年の目標は、年内に1回は1位を取ることだ!

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

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

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

> bitter_fox さん
空白をどう埋めるかもポイントでしたなぁ。
出題するときに僕がつくったコードは sprintf を使ったりもしてました (201B)
w,d,m,e;main(s){for(;++m>m*2);d0&d 沖 滉均 さん
メンバー出題が本格的に始まれば、今度こそ僕も1位を狙います!

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

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

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

なんとか、ランクインは出来たものの上位との差はあまり小さくないですね。
出力に使う関数やfor文を使い過ぎたかんがあります。

悔しいので、nissyさんのコードを解読しつつ、見つけられた縮められそうなところを短縮(171B)

CODE:

a,c,d=6;
main(n){
	for(;++ad?"%3d"+!(c=n):"   ",n-d));
}