- 1
- 2
- 3
- 4
- 5
- 6
- 7
// Возвращает квадрат натурального числа
// 4^2 = 1 + 3 + 5 + 7
int sqr(int n) {
int result = 0;
for(int i = 1, a = 1; i <= n; i++, a = a + 2) result += a;
return result;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+68
// Возвращает квадрат натурального числа
// 4^2 = 1 + 3 + 5 + 7
int sqr(int n) {
int result = 0;
for(int i = 1, a = 1; i <= n; i++, a = a + 2) result += a;
return result;
}
Нестандартные решения - залог успешности проекта.
wvxvw 08.12.2014 20:41 # +1
3.14159265 08.12.2014 22:58 # 0
Какие простые множители? Можно поподробнее?
bormand 08.12.2014 22:59 # 0
3.14159265 08.12.2014 23:01 # 0
То есть возвести множетель в кважрат?
Но ведь тогда задача сводится к предыдущей. Не понимаю.
Ведь оп считает вторую степень числа через суммирование.
wvxvw 08.12.2014 23:13 # 0
1. Получаем сверхэкспонентное время.
2. Используем символьную арифметику для нахождения квадрата (мы же копируем выражение, а не значение).
3.14159265 09.12.2014 00:59 # 0
Во. С такой точки зрения принимается.
Хотя сложность можно нарастить многими способами.
Думаю сложнее чем рекурсивное сложение инкрементами, рекурсивное умножение рекурсивными сложениями инкрементами, и рекурсивное возведение в степень рекурсивными умножениями рекурсивными сложениями инкрементами, итд до стрелочной нотации, придумать трудно.
И. Важно сделать это парой функций, то есть обобщить для любой вложенности.
bormand 09.12.2014 07:14 # 0
Функция hyper(), которая при n=0 - инкремент, при n=1 - сложение, при n=2 - умножение, при n=3 - степень и т.п.? Забыл, как она правильно называется ;(
bormand 09.12.2014 07:20 # 0
3.14159265 09.12.2014 20:07 # +5
H(0,3,9) // инкремент 9
H(1,3,5) // 3+5
H(2,3,5) // 3*5
H(3,3,5) // 3**5
bormand 09.12.2014 20:16 # 0
3.14159265 09.12.2014 20:22 # +1
Блин. Так это практически она и есть, я там ниже в спойлере еще вчера её упоминал.
Только у Аккермана для джвух, а у меня для трёх:
>H(op-1,a,H(op,a,b-1))
Сравните, http://upload.wikimedia.org/math/f/8/2/f826ff51d40963b01fd8fee2dbe8ff0a.png
Проблема в том что стек быстро заканчивается.
3.14159265 09.12.2014 23:50 # 0
Сделать генератор кода, который будет вычислять гиперфункцию произвольных двух чисел и записывать ответ в переданный массив.
*Задача повышенной сложности (в O-нотации).Полагаю такой способ будет еще более ресурсоёмким.
bot 10.12.2014 00:08 # +4
bormand 10.12.2014 06:28 # 0
Кстати, а почему до сих пор нет AES на брейнфаке?
1024-- 10.12.2014 10:00 # 0
Если про пару десятков принципов ООП сложной жабы надо прочитать 0..2 книжки, а про философию простого хаскеля - 5..20 книжек, то про простейший брейнфак нужно читать 20..100 книг, чтобы писать одни и те же программы.
После #14528 можно ожидать и AES на брейнфаке.
bormand 10.12.2014 10:25 # 0
defecate-plusplus 10.12.2014 11:23 # 0
по специальности "математик, системный программист" машину Тьюринга изучают чуть ли не первой
bormand 10.12.2014 11:37 # 0
inkanus-gray 10.12.2014 16:55 # +4
Требуется: придумать непротиворечивое определение Hyper(f, x, n) на случай нецелых значений n и, пользуясь только интерпретатором Brainfuck, найти символьное выражение Hyper(f, x, √2̅) для основных тригонометрических функций.
3.14159265 10.12.2014 17:51 # 0
3.14159265 09.12.2014 12:27 # 0
Блин, пример не в ту ветку попал:
http://govnokod.ru/17276#comment258717
Главное — то чтоб эта функция наиболее неоптимально реализована: через понижение порядка самой себя.
bormand 08.12.2014 23:29 # +1
1) возведению простого числа в энную степень
2) перемножению пачки взаимнопростых чисел
3.14159265 09.12.2014 01:38 # +2
Нет ничего хуже чем нестабильный по сложности алгоритм. В оп коде сложность предсказуема.
А вдруг злоумышленник будет присылать для возведения в степень специально подобранные простые числа.
Что тогда? Ведь sqr тогда сведется к тривиальному возведению в квадрат.
В этом случае будут простаивать проплаченные наперёд вычислительные мощности и теряться деньги.
Чтобы не понести убыток, я рекомендую добавить элегантное решение добавить if и проверить n на простоту.
if (isPrime(n)) использовать формулу n*n-1=(n-1)*(n+1)
n-1 и n+1 — гарантированно составные числа (при n>4)
и уже их разбить на множители и перемножать.
Таким образом вы защититесь от prime-атак и минимизируете убытки.
inkanus-gray 09.12.2014 07:53 # 0
bot 09.12.2014 10:02 # 0
wvxvw 08.12.2014 23:11 # 0
Или по-русски это не простые множители (prime factors)?
3.14159265 09.12.2014 00:56 # 0
>Квадрат любого числа в таком случае будет просто повторение этого произведения еще раз: 36^2 = (2 * 2 * 3 * 3) * (2 * 2 * 3 * 3) = 1296.
Ну это всё копетанство.
Меня насторожило:
> а потом каждый из них удвоить.
Удвоить, по-русски, это обычно умножить на джва.
3.14159265 09.12.2014 01:03 # 0
var calc=function(op, count){../*говняно-рекурсивная реализация через понижение count, when count=0 понижение порядка op*/...};
Где op - операция.
op = 1 - сложение с count
op = 2 - умножение на count
op = 3 - возведение в степень count
var sqr=calc(3,2);
f(5)=25;
Блджад что-то похожее на Аккермана получается. Переизобрёл велосипед.
TarasB 08.12.2014 23:59 # +1
wvxvw 09.12.2014 00:10 # 0
bot 09.12.2014 01:39 # +1
Pythoner 09.12.2014 02:34 # +2
http://ideone.com/tMEsSq
wvxvw 09.12.2014 09:34 # 0
Pythoner 09.12.2014 10:13 # 0
someone 09.12.2014 08:23 # 0
Gouvere 09.12.2014 09:58 # 0
В этой строчке есть C++.
someone 09.12.2014 10:02 # +2
Gouvere 09.12.2014 10:18 # +2
guest 09.12.2014 13:00 # 0
Gouvere 09.12.2014 13:52 # 0
Во всяком случае Visual Studio 2013 не ругается на это.
kipar 09.12.2014 13:54 # +1
3.14159265 09.12.2014 13:56 # +1
Наоборот же.
Это первая версия студии, которая худо-бедно поддерживает C99.
kipar 09.12.2014 14:13 # 0
3.14159265 09.12.2014 14:20 # 0
Ёпты, ну погуглите
http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx
>там что - правда массивы переменной длины запилили?
Конкретно эту фичу нет. Но хотя бы в хедеры внесли функции, и то радует.
http://msdn.microsoft.com/en-us/library/vstudio/zb1574zs(v=vs.120).aspx
kipar 09.12.2014 14:26 # 0
>To summarize, we added declarations and implementations for missing functions in the following headers
чисто заголовки добавленные, а про функции языка ничего.
Насколько я знаю массивов переменной длины в VS нет, потому что в С++ они не нужны, а для VS важнее поддержка С++.
И в комментах к статье это вроде подтверждают. Так что нет, VS не поддерживает С99.
3.14159265 09.12.2014 14:28 # 0
>Так что нет, VS не поддерживает С99.
Я сказал "худо-бедно". Если так разобраться gcc тоже не все фичи C99 поддерживает.
kipar 09.12.2014 14:35 # 0
А я сказал "не поддерживает".
Поэтому использовать его для проверки совместимости со стандартом нет смысла.
В gcc может тоже не все поддерживается, но у VS вообще своя, особая атмосфера.
guest 09.12.2014 22:02 # +1
inkanus-gray 10.12.2014 16:47 # +1
Gouvere 09.12.2014 14:10 # +1
kipar 09.12.2014 14:19 # +1
Gouvere 09.12.2014 14:30 # 0
https://ru.wikipedia.org/wiki/C99
kipar 09.12.2014 14:38 # 0
Ну мы что тут, практики что ли собрались?
guest 09.12.2014 22:02 # 0
bot 09.12.2014 10:04 # +3
vladthesparrow 10.12.2014 14:39 # −1
sql(-2) = 0
отправить на доработку
inkanus-gray 10.12.2014 16:42 # +1
Qwertiy 10.12.2014 16:52 # +1
short чисто для ускорения - сервак не даёт проге достаточно времени, чтобы просчитать int (http://codepad.org/M9WfLzE8).
Qwertiy 10.12.2014 16:55 # +1
qulinxao 12.12.2014 01:15 # 0
bormand 12.12.2014 01:23 # 0