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

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

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

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

#第12回[Sum of digits of a factorial]#

[問題]
入力された1以上の数を階乗し、その値の各桁の和を出力する
階乗後の値は int の最大値以下である

[入力|例1]
1

[出力|例1]
1\n

[入力|例2]
5

[出力|例2]
3\n

[入力|例3]
12

[出力|例3]
27\n

[期間]
12/25(土)22:00 ~ 1/1(土)21:59

[hr]
=結果=

投稿数 22件(9人)

1位 (61B)
a5ua さん
main(x){scanf("%d",&x);printf("%d\n"," #$((%+++==F="[x]-34);}

nissy さん
main(a){scanf("%d",&a);printf("%d\n","_QRVVSYYYkktk"[a]-80);}

みけCAT さん
main(i){scanf("%d",&i);printf("%d\n","112663999KKTK"-48);}

4位 (74B)
五反田 さん
main(s){scanf("%d",&s);printf("%d\n",s<3?s:s-5?s<9?9-5/s*3:s-11?27:36:3);}

*1位1番乗り
a5ua さん

[hr]
★解説

今回のポイントは次の2つです。

文字列に数値を埋め込む
今回の問題は、Q8 でも活躍した「埋め込み」が効果的でした。
埋め込みは、そのデータサイズや個数に応じて、ビット埋め込み、文字列埋め込み、直接埋め込みなどを使い分けましょう。
埋め込みを使わない方法では、みけCAT さんの このコード(76B) が最短でした。
i,s;main(k){for(scanf("%d",&i);i?k*=i--:(s+=k%10,k/=10););printf("%d\n",s);}

インデックスの演算を節約する
今回埋め込みデータの参照に使われるインデックスは 1 ~ 12 で、0 がありません。
それを調整しようとすると、例えば1位のコードでは
"#$((%+++==F="[x-1] となりますが、文字列の先頭に空のデータを挿入することで、その演算を回避しています。

Code Golf に興味が出てきたら、コミュニティ「Code Golf を楽しもう」まで!
初心者歓迎、参戦&観戦いつでもお待ちしています!
http://dixq.net/forum/viewforum.php?f=52

第13回の投稿受付中です。
[hr]画像
今年もよろしくお願いいたします。

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

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

投稿記事 by xxx » 14年前

みんないいコード書いてくれてよかったです
参加者も多かったですし
また機会があれば出題と管理もやらせてもらいますね

ちなみに私のかいたやつ

CODE:

n;
main(a){
  for(scanf("%d",&n);n;)
    a*=n--;
  for(;a;a/=10)
    n+=a%10;
  printf("%d\n",n);
}

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

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

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

> roxion1377 さん
問題作成ありがとうございました。
今回は多くの方が、そんなコードで 78Bでした (╹◡╹

次の出題企画にもどうぞご参加ください!

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

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

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

全然届きませんでしたね。
ずっともやもやしてたので、すっきりして良かったです。

今年もよろしくお願いします。

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

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

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

> 五反田 さん
今年もミラクルなコードを生み出してください!