LINUX.ORG.RU
ФорумTalks

Веселые плюсы - комбинаторная задача


0

0
Сколько инстанций темплейтов попробует создать компилятор? =) Особо упрямые могут еще попробовать скомпилировать хехе.


template<int Depth, int A, typename B>
struct K17 {
static const int x =
K17 <Depth+1, 0, K17<Depth,A,B> >::x
+ K17 <Depth+1, 1, K17<Depth,A,B> >::x
+ K17 <Depth+1, 2, K17<Depth,A,B> >::x
+ K17 <Depth+1, 3, K17<Depth,A,B> >:x
+ K17 <Depth+1, 4, K17<Depth,A,B> >::x;
};
template <int A, typename B>
struct K17 <16,A,B> { static const int x = 1;
};
static const int z = K17 <0,0,int>::x;
int main(void) { }
Вы, батенька, случайно не индус?

PS /me вошел в рекурсию и не осилил...

UrbanSerj
()
c++ - ошибка. Лисп - наше все.
anonymous
()
Those who don't know Lisp are doomed to reinvent it again and again...
Miguel ★★★★★
()
Сначала переписываем задачу с дебильного недоязыка шаблонов на язык
математики, игнорируя не относящуюся к делу муть:

f x = | 1             если x = 16
      | 5 * f (x + 1) если x /= 16

z = f 0

После чего думаем, что курил автор задачи...
anonymous
()
Неформально говоря, там введен параметр B, который при инстанцировании хранит всю предысторию разворачиваний, при каждом увеличении Depth на 1 количество шаблонов увеличивается в 5 раз и того

1+5^1+...+5^16 = (5^17-1)/4

А сама задача откуда? На "занимательную штукенцию" не похожа, на задачу из быдлокнижек тоже, на практическую тем более.

ival ★★
()
Ответ на: комментарий от anonymous
Компилица, компилица. Просто разворачиваться будет дооооооолго. Сутки-двое. Зависит от системы.
anonymousI
() автор топика
Ответ на: комментарий от anonymousI
Brainfuck тоже Turing Complete. Метапрограммирование на шаблонах С++ недалеко от него ушло по выразительности.
anonymous
()
Ответ на: комментарий от anonymousI
А почему там 5^17, а не (5^17-1)/4?

PS. То, что C++ Templates are Turing Complete становится очевидно, после прочтения любой книги по логике :)

ival ★★
()
Ответ на: комментарий от anonymousI
> Indiana University

Ахха! Если забыть, где эта Индиана, то всё сходицо.

m57
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.