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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.