"|=" - логическое "ИЛИ"? А вот дальше полный тупик...
"|=" - в данном случае побитовое "или". Эта штука поднимает биты на XX в позициях равных A[i].
И если после цикла все биты с первого по шестой окажутся равными 1, это будет означать что все цифры с 1 по 6 встретились в числе X ровно по одному разу.
0x7E - шестнадцатеричное представление двоичного числа 1111110. (правый бит - нулевой)
А может, ввсе же в С++ ? . Validate- функция одного параметра. Может по старинке... выделяем память и кэшируем bool для всех допустимых значений аргумента?
В MQL можно открыть ордер, если вдруг чудом хоккейные числа поделятся нацело! :))
А если серьёзно, то Я точно не ровня Вам.
MetaDriver:
"|=" - в данном случае побитовое "или". Эта штука поднимает биты на XX в позициях равных A[i].
И если после цикла все биты с первого по шестой окажутся равными 1, это будет означать что все цифры с 1 по 6 встретились в числе X ровно по одному разу.
0x7E - шестнадцатеричное представление двоичного числа 1111110. (правый бит - нулевой)
1. А может, ввсе же в С++ ? . 2. Validate- функция одного параметра. Может по старинке... выделяем память и кэшируем bool для всех допустимых значений аргумента?
1. Ну язык и среда это кагбе не суть. Суть - сам алгоритм.
int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
А срабатывает это условие не мало раз. Получается неплохой выигрыш в быстродействии. Хотя может и не такой существенный. Можно убрать и проверить. Но всё же Я на стороне того, что это условие оправдывает себя.
int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
А срабатывает это условие не мало раз. Получается неплохой выигрыш в быстродействии. Хотя может и не такой существенный. Можно убрать и проверить. Но всё же Я на стороне того, что это условие оправдывает себя
Но оно вроде некорректно. Например, при A4==B4 условие окажется ложным, тогда как числа могут быть и различными (например 654321 и 124365)
Понял ошибку... А Я о быстродействии твержу! :)) Голова совсем не варит. Спать уже пора. Моё местное время 6 утра...
А с кодом надо значит так:
for (int B1=1; B1<=6; B1++)
{
if (B1==B2 || B1==B3 || B1==B4 || B1==B5 || B1==B6) continue;
if (A6==B6 && A5==B5 && A4==B4 && A3==B3 && A2==B2 && A1==B1) continue;
int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
if (A < B) continue;
if (MathMod(A,B)==0)
Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
}
А вот это уже слишком
if (A==B) continue;
if (MathMod(A,B)==0)
так как скрипт будет лишний раз меньшее на большее делить...
MaxZ:
Мне изменения понятны. Я только вот это не осилил пока:
"|=" - логическое "ИЛИ"? А вот дальше полный тупик...
"|=" - в данном случае побитовое "или". Эта штука поднимает биты на XX в позициях равных A[i].
И если после цикла все биты с первого по шестой окажутся равными 1, это будет означать что все цифры с 1 по 6 встретились в числе X ровно по одному разу.
0x7E - шестнадцатеричное представление двоичного числа 1111110. (правый бит - нулевой)
А может, ввсе же в С++ ?
.
Validate- функция одного параметра.
Может по старинке... выделяем память и кэшируем bool
для всех допустимых значений аргумента?
В MQL можно открыть ордер, если вдруг чудом хоккейные числа поделятся нацело! :))
А если серьёзно, то Я точно не ровня Вам.
"|=" - в данном случае побитовое "или". Эта штука поднимает биты на XX в позициях равных A[i].
И если после цикла все биты с первого по шестой окажутся равными 1, это будет означать что все цифры с 1 по 6 встретились в числе X ровно по одному разу.
0x7E - шестнадцатеричное представление двоичного числа 1111110. (правый бит - нулевой)1. А может, ввсе же в С++ ?
.
2. Validate- функция одного параметра.
Может по старинке... выделяем память и кэшируем bool
для всех допустимых значений аргумента?
1. Ну язык и среда это кагбе не суть. Суть - сам алгоритм.
2. Эээ.. А подробнее?
Но 125 ms явно не догнать.
Зря ты так. У тебя показывает 47 ms
Жаль решения у задачки нету, результаты сложно сравнивать... :)))
.
Только я всё равно не догнал зачем сравнивать посимвольно
if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)
?
Вроде бы совпадения в отдельно взятой позиции некритичны?
Зря ты так. У тебя показывает 47 ms
Жаль решения у задачки нету, результаты сложно сравнивать... :)))
.
Только я всё равно не догнал зачем сравнивать посимвольно
if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)
?
Вроде бы совпадения в отдельно взятой позиции некритичны?
Во те на! :DDD
Я боролся за быстродействие.
Считаю, что условие:
if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1)выполнится во много раз быстрее следующих строк:
А срабатывает это условие не мало раз. Получается неплохой выигрыш в быстродействии. Хотя может и не такой существенный. Можно убрать и проверить. Но всё же Я на стороне того, что это условие оправдывает себя.
Я боролся за быстродействие:
Считаю, что условие:
if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1)выполнится во много раз быстрее следующих строк:
А срабатывает это условие не мало раз. Получается неплохой выигрыш в быстродействии. Хотя может и не такой существенный. Можно убрать и проверить. Но всё же Я на стороне того, что это условие оправдывает себя
поправил, сделал так
Те же 47 ms
Так что - нефиг париться с этим условием.
поправил, сделал так
Те же 47 ms
Так что - нефиг париться с этим условием.
Понял ошибку... А Я о быстродействии твержу! :)) Голова совсем не варит. Спать уже пора. Моё местное время 6 утра...
А с кодом надо значит так:
А вот это уже слишком
так как скрипт будет лишний раз меньшее на большее делить...
Блин. Володь И этим надо замораживаться? Ну вот - уволь! Сколько можно!
Твой - Свин. Искренне...
А с кодом надо значит так:
Ага так лучше. 31 ms.
Svinozavr 22.08.2011 01:58
Блин. Володь И этим надо замораживаться? Ну вот - уволь! Сколько можно!
Твой - Свин. Искренне...Каприз художника.... :)
За неделю надоедают меркантильные мотивации. Иногда и оторваться можно из любви к искусству. ;)