ratio - rational - irrational

« ワークステートエンジン欲すぃ。 | Main | Collatz予想のRubyによる実装と言い替え »

2006年07月12日

Collatz予想step数の最大値

キミならどう書く 2.0 ROUND 2が出題された。なんか、Rubyの回答は割と綺麗な実装がもう出ちゃってるね。

そこで、Ruby以外でってことで、私のお気に入りの某関数型言語で書いてみた。

g++ 3.3.5で通ったよ。まともな処理系ならキャッシュしてくれるから速いはず。

#include <iostream>

template <bool cond, unsigned x, unsigned y>
struct choice
{
  enum { value = x };
};
template <unsigned x, unsigned y>
struct choice<false, x, y>
{
  enum { value = y };
};

template <unsigned n, bool is_odd = n%2>
struct g
{
  enum { value = g<3*n+1>::value + 1 };
};
template <unsigned n>
struct g<n, false>
{
  enum { value = g<n/2>::value + 1 };
};

template <>
struct g<1>
{
  enum { value = 1 };
};


template <unsigned n>
struct h
{
  enum {
    value =
      choice<
        (unsigned(g<n>::value) > unsigned(g<h<n-1>::value>::value)), 
        n,
        h<n-1>::value
      >::value
  };
};
template <>
struct h<1>
{
  enum { value = 1 };
};

using namespace std;

int main()
{
  cout << h<100>::value << endl;
  return 0;
}

Perl覚えるまで私ゃ日々のスクリプトを全部これで書いてたんだから、断固としてこれはLLです。



トラックバック

この記事のトラックバックpingのURL:
http://idm.s9.xrea.com/blog/mt-tb.cgi/481

コメント

 書いてた書いてたwRuby覚えるまで。私には重かったけど。

  • Posted by: babie at 2006年07月12日 05:56

新しくコメントをつける

よくわからない理由により、コメントが即座には反映されないかもしれませんか゛、ボタンを押して元の画面に戻ってきたならたぶん正しく送信されています。




blog操作

検索


カテゴリー

このブログについて

あわせて読みたい

follow yugui at http://twitter.com
© 2006 Yugui

Powered by Movable Type 3.2-ja-2