Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие языки > Lua, объяснить код


Автор: konshyn 15.10.2015, 20:58
Код

function R()
    return (function(...)
                _ = 0;

                repeat
                    _ = _ + 1;
                 until# (function(...)
                    for _ = 1, (...)[(...)[1]+1]{(...)[2]} do

                        (function(...)

                            for _ = (...)[2],     (...)[1][(...)[1][1] + 1] {  (...)[1][2]  } do

                                if (    (...)[1][2] == _^(...)[1][1] + (...)[2] ^ (...)[1][1] )  then
 
                                    (function(...)
                                        (...)[1][#(...)[1]+1] = (...)[2];

                                    end){(...)[1][3], (...)[2]};
                                end;
                            end;

                        end){...,_}
                    end;


                    
                    return(...)[3];
                end) {(...)._ - 1, _, {},
                                            function(...)

                                            return(...)[1]^0.35;
                                            end
                     } ==(...)._;
             
      
                return _;
            end){_ = 4}
end

print (R())


Объяснити кто-нибудь, куда что передается? и какой выход из repeat?

Автор: Lipetsk 15.10.2015, 21:52
Красота!
А откуда это?

Могу только сказать, что repeat until выполнится лишь 1 раз, т.к. # не может вернуть ни nil ни false
Ошибся, оно потом сравнивается с (...)._
Надо подумать

Автор: Lipetsk 15.10.2015, 23:21
Здесь в функции ищутся числа, а выход произойдёт, когда найдётся 4 таких числа
Поиск чисел происходит так. Берутся последовательно натуральные числа. Взяли например число i. Если i можно представить в виде суммы кубов двух натуральных чисел, то берём меньшее из них (если совпадают, то любое)

Опять немного поторопился
Здесь ищется число, которое можно представить суммой кубов двух натуральных чисел хотябы 4-мя способами

Автор: Lipetsk 15.10.2015, 23:52
Например, двумя способами представляется число
1729=1^3+12^3=9^3+10^3
Мощности моего нетбука не хватает, чтоб за 10 минут найти число с тремя вариантами представления  smile  Попробую завтра на работе  smile 


Автор: konshyn 16.10.2015, 10:38
Цитата(Lipetsk @  15.10.2015,  23:21 Найти цитируемый пост)
Опять немного поторопился
Здесь ищется число, которое можно представить суммой кубов двух натуральных чисел хотябы 4-мя способами


Да, я вчера разобрался. Но я это сделал командной print. Не могли Вы мне объяснить, что куда и как передается, 1-2 итерации от начала до конца после repeat?) 


Цитата(Lipetsk @  15.10.2015,  23:52 Найти цитируемый пост)
Мощности моего нетбука не хватает, чтоб за 10 минут найти число с тремя вариантами представления  smile  Попробую завтра на работе  smile 

6963472309248 - вот это число

Автор: Lipetsk 17.10.2015, 15:54
Оказывается, мне уведомления об ответах перестали приходить :( в настройках всё правильно

Цитата(konshyn @  16.10.2015,  10:38 Найти цитируемый пост)
Не могли Вы мне объяснить, что куда и как передается, 1-2 итерации от начала до конца после repeat?) 

Вы просто аккуратно замените в каждом блоке имена локальных переменных на более привычные
В функциях аргумент ... замените на t1, t2, t3
Тогда останется подставить аргумент и избавится от функций, т.е. вместо
Код

(function(t1)
t1[1][1]=t1[3]+2*t1[2]  -- например, было такое тело
end){a1,a2,a3}
получится просто
Код

a1[1]=a3+2*a2


А откуда у вас этот код???
И сколько считалось? Я так и не попробовал запустить на нормальном компьютере 

Автор: konshyn 19.10.2015, 14:31
Цитата(Lipetsk @  17.10.2015,  15:54 Найти цитируемый пост)
Вы просто аккуратно замените в каждом блоке имена локальных переменных на более привычные
В функциях аргумент ... замените на t1, t2, t3
Тогда останется подставить аргумент и избавится от функций, т.е. вместо
...


о, блин, как! Разобрался, спасибо! smile


Цитата(Lipetsk @  17.10.2015,  15:54 Найти цитируемый пост)
А откуда у вас этот код???


В общем, проходит один достаточно интересный конкурс - opener от itransiotion (для тех, кто живет в Беларуси). Вот там очень занимательные задачи такого вида, или на смекалку, где-то нужно знать математику и т.п.

Если интересно, могу скинуть задания. Но если Вы сам вдруг захотите посмотреть их, то предупрежу: не получите условие следующего задания, пока не решите предыдущее:)
Вот ссылка http://opener.itransition.com


Цитата(Lipetsk @  17.10.2015,  15:54 Найти цитируемый пост)
И сколько считалось? Я так и не попробовал запустить на нормальном компьютере  

Вообще, быстрее вышло найти ответ в http://oeis.org после правильного запроса и перехода по ссылкам.
Но одновременно пока искал решение, у знакомого считало на компе. Код был переписан на С++ и оптимизирован. Минут 40 заняло.

Автор: Lipetsk 19.10.2015, 15:55
Цитата(konshyn @  19.10.2015,  14:31 Найти цитируемый пост)
Если интересно, могу скинуть задания.

Пожалуйста, в PM

Автор: Lipetsk 19.10.2015, 15:55
Цитата(konshyn @  19.10.2015,  14:31 Найти цитируемый пост)
Если интересно, могу скинуть задания.

Пожалуйста, в PM

Автор: konshyn 19.10.2015, 16:00
Цитата(Lipetsk @  19.10.2015,  15:55 Найти цитируемый пост)
Пожалуйста, в PM 

Что такое РМ и как туда скинуть?)

Добавлено через 1 минуту и 12 секунд
Нашел:)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)