[Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей - страница 509

 
Mischek:

Не будут. У червяков тоже будут выпученные глаза. А это отпугивает.

Надо же. Отмазался. Настоящий самокиллер-профессионал.

 

Хоккеисты не хотели отпускать. В тупой надежде на наш зевок написал переборный скрипт. Тоже говорит "не существует".

Може в скрипте чего зеванул? Желающие могут проверить.

// Поправил скрипт. Был некритичный косячок. Результат не изменился.

Файлы:
hockey_1.mq5  2 kb
 
MetaDriver:

Хоккеисты не хотели отпускать. В тупой надежде на наш зевок написал переборный скрипт. Тоже говорит "не существует".

Може в скрипте чего зеванул? Желающие могут проверить.

// Поправил скрипт. Был некритичный косячок. Результат не изменился.

Я после сделал тоже самое. Ответ тот же! :)))
 
MaxZ:
Я после сделал тоже самое. Ответ тот же! :)))
Покаж исходник, если не жалко. Интересует твой алгоритм. Можно в личку.
 

Алгоритм в лоб. Писал не думая (3-5 минут). Считает долго! :D

for (int A6 = 1; A6 <= 6; A6++)
for (int A5 = 1; A5 <= 6; A5++)
for (int A4 = 1; A4 <= 6; A4++)
for (int A3 = 1; A3 <= 6; A3++)
for (int A2 = 1; A2 <= 6; A2++)
for (int A1 = 1; A1 <= 6; A1++)
for (int B6 = 1; B6 <= 6; B6++)
for (int B5 = 1; B5 <= 6; B5++)
for (int B4 = 1; B4 <= 6; B4++)
for (int B3 = 1; B3 <= 6; B3++)
for (int B2 = 1; B2 <= 6; B2++)
for (int B1 = 1; B1 <= 6; B1++)
   if (A6 != A5 && A6 != A4 && A6 != A3 && A6 != A2 && A6 != A1
                && A5 != A4 && A5 != A3 && A5 != A2 && A5 != A1
                            && A4 != A3 && A4 != A2 && A4 != A1
                                        && A3 != A2 && A3 != A1
                                                    && A2 != A1
    && B6 != B5 && B6 != B4 && B6 != B3 && B6 != B2 && B6 != B1
                && B5 != B4 && B5 != B3 && B5 != B2 && B5 != B1
                            && B4 != B3 && B4 != B2 && B4 != B1
                                        && B3 != B2 && B3 != B1
                                                    && B2 != B1
    && A6 != B6 && A5 != B5 && A4 != B4
    && A3 != B3 && A2 != B2 && A1 != 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;
      if (MathMod(A, B) == 0)
         Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
   }

P.S.: потом уже понял, что можно было бы итераций по B-ым массивам сделать на много меньше...

 
Понял, спасибо!
 
MaxZ:

Алгоритм в лоб. Писал не думая (3-5 минут). Считает долго! :D

P.S.: потом уже понял, что можно было бы итераций по B-ым массивам сделать на много меньше...

Вапче интересно, как и насколько этот перебор можно оптимизировать.

Вот у меня считает ~875 ms на тормозной машине. (у тебя 17516 ms)

Как бы извратиться ещё раз в десять ускорить?

Вижу два резерва: (1) отсечение лишнего перебора, (2) ускорение валидации.

Какие идеи?

// Приглашаю желающих. Вполне сгодится за следующую задачку.

 
MetaDriver:

// Приглашаю желающих. Вполне сгодится за следующую задачку.

По поводу задачки, Я об этом тоже думал, когда писал код! :))) Хотел предложить. Но пропал, так как тему новую создавать пришлось. Как ускорить код, знаю (правда, не очень красиво получится). Но хочется не просто ускорить его, а ещё и сделать красивым!


MetaDriver:

Вапче интересно, как и насколько этот перебор можно оптимизировать.

Моя машина тоже ужас... Сложный советник не потестируешь, а простой и без сложностей оптимизируется долго! :D


MetaDriver:

Вот у меня считает ~875 ms на тормозной машине. (у тебя 17516 ms)

Как бы извратиться ещё раз в десять ускорить?

Вижу два резерва: (1) отсечение лишнего перебора, (2) ускорение валидации.

Какие идеи?

Думаю, если отсечь лишний перебор, то время выполнение приблизится к Твоему результату (посмотрел Я внимательно на разницу в цифрах и подумал "вряд ли")! По поводу идеи, продолжаю думать.

 

А ускорить Мой код можно разбив if, состоящий из сложного 36-кратного проверочного условия, на 36 if-ов с простым условием! :)))

Думаю, код заметно ускорится, хотя, чтобы знать точно нужно разбираться в машинных инструкциях, которые получаться в результате компиляции.

И вообще, тема быстродействия работы Меня всегда волновала не меньше всего остального.

 
MaxZ:И вообще, тема быстродействия работы Меня всегда волновала не меньше всего остального.
не люблю пользоваться операторами continue и break, но может быть чем нибудь помогут Вам, тем более 36-кратное вложение if на mql может и "не прокатить"