http://projecteuler.net/index.php?section=problems&id=40
数字を一桁ずつ出すクラスを作る。本当はそうする必要も無いが、練習のつもりで。
#include <iostream> #include "itertools.h" using namespace std; using namespace itertools; class cDigitSeq { int n; vector<int> v; public: cDigitSeq() : n(0), v(vector<int>()) { } int next() { if(v.size() == 0) { n += 1; v = list(digits(n)); } int m = v.back(); v.pop_back(); return m; } bool exists_next() { return true; } }; typedef tuple<int,int> tup; template<typename T> int d(int n, T& g) { return snd(head(filter([n] (tup x) { return fst(x) == n; }, g))); } int main() { auto g = zip(itertools::count<>(1), cDigitSeq()); auto t = reduce([&g] (tup x, int y) { return tup(fst(x) * d(snd(x), g), snd(x) * 10); }, range<>(7), tup(1, 1)); cout << fst(t) << endl; }