Hatena::ブログ(Diary)

ドレッシングのような このページをアンテナに追加 RSSフィード

2011-08-15

『お題:文字列を先頭から見て同じところまで除去』への回答 (Haskell 編)

Haskell 力を高めるための練習として『お題:文字列を先頭から見て同じところまで除去』への回答を Haskell でも作りました。皆さんからのツッコミを歓迎します。

2010-01-29

ghci で Collatz 予想

$ ghci
GHCi, version 6.12.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.i
Prelude> let f n = if n == 1 then 1 else if even n then f (n `div` 2) else f (3 * n + 1);;
Prelude> f 10
1
Prelude> f 100
1
Prelude> f 1000
1
Prelude> f 1001
1
Prelude> f 1010101
1
Prelude> f 12345
1
Prelude> f 1111111111111111111111111
1
Prelude> f 11111111111111111111111111111111111111111111119
1
Prelude> f 111111111111111111111111111111111111111111111121
1

2008-07-26

たらいまわし関数を C++ のテンプレートで作った

あとで書く.

#include <iostream>

template<int x, int y, int z>
struct tarai;

template<int x, int y, int z, bool f>
struct tarai_
{
  enum {
    value = tarai<
      tarai<x - 1, y, z>::value,
      tarai<y - 1, z, x>::value,
      tarai<z - 1, x, y>::value
    >::value
  };
};

template<int x, int y, int z>
struct tarai_<x, y, z, true>
{
  enum { value = y };
};

template<int x, int y, int z>
struct tarai
{
  enum {
    value = tarai_<x, y, z, (x <= y)>::value
  };
};

int
main(void)
{
  std::cout << tarai<20, 10, 5>::value
            << std::endl;
  return 0;
}