Aragaer
a = permutations(filter_out(m, (1,2,3,4,5,6,7)))
for e in a {
for (i = 0; i < n; i++)
q[i] = e[i];
q[i++] = m;
for (; i < 8; i++)
q[i] = e[i-1];
process(q);
}
Alexander
@aragaer не надо filter_out(m, тогда и в правду много раз генерить
Aragaer
перестановки можно генерить достаточно шустро, вроде есть какой-то там алгоритм от кнута чтле
Alexander
нужно сделать так чтобы m перешло в 8
Aragaer
когда ты просто берешь входной список и начинаешь его деструктивно переставлять
Alexander
(8-m) % 8
Alexander
блин
分解物質
Alexander
не надо!!!!
Alexander
:(
分解物質
Alexander
доктор меня все игнорируют
分解物質
я не совсе понимаю твою идею
Alexander
смотри
Alexander
пусть у тебя есть числа 1..7
Aragaer
ну я ж человек простой, я тут вообще списков не вижу, вижу массив в 8 интов 8)
Alexander
ты можешь сделать преобразование в {1..8} \ {m} ?
分解物質
分解物質
для каждого m отдельно
Alexander
там должна быть функция какая-то из % и арифметики, для всех подходящая
Alexander
вот тогда теперь, если ты генеришь перестановки для 1..7
Alexander
1 шт.
Alexander
то из них ты можешь создать все перестановки для 1..8 с m на заданной позиции
Alexander
по правилу n_i, i<позиция = f(e[i]), n_позиция =m, ...
Alexander
где f твоя функция
Alexander
в общем-то вот и все
Alexander
ты генеришь перестановки и сохраняешь их
分解物質
Alexander
потом ты просто проходишься по этому списку, применяя формулу (это плата за алгоритм), для того, чтобы создать свой массив
Alexander
что-то типа f(i) = (i + 8 - m) % 9
Alexander
т.е. m-ный элемент перейдет в 8 которого в списке нету
Alexander
остальные перейдут в 0..7
Alexander
так у нас с единицы было
Alexander
f(i) = 1 + (i+8-m) % 9
Alexander
Prelude Control.Monad Data.List> let f m i = 1 + (i + 8 - m) `mod` 8
Prelude Control.Monad Data.List> map (f 5) [0..7]
[4,5,6,7,8,1,2,3]
Alexander
блин не, все не то, но формула есть
分解物質
Alexander
Prelude Control.Monad Data.List> let f m i = 1 + (i + m - 8) `mod` 8
Prelude Control.Monad Data.List> map (f 5) [0..7]
[6,7,8,1,2,3,4,5]
Alexander
во
Alexander
т.е. при m=5 пятерке соотвествует 8-ка, которой нету в списке, 1-7 отображаются на {1..8} \\ {5}
Alexander
т.е. q[i] = 1+(e[i]+m-8) % 8
Alexander
для любого m
Alexander
дальше 7!*цена-генерации-элемента + 7! * цену сборки 8 элементного массива vs 8!*цена-генерации-элемента по скорости
Alexander
7!*(размер перестановки)+1 vs 8!*(размер перестановки) по памяти
Alexander
по скорости я не учитывал прыжки по индексам во втором случае и посчитав их бесплатными
Alexander
@yellow_apple норм?
分解物質
Alexander
зачем?
Alexander
не надо
Alexander
ты же понимаешь что из одной перестановки (1..7) ты можешь получить все перестановки чисел (1..8) с m на позиции n
Alexander
т.е. тебе нужно сгенерить 1 перестановку
Alexander
в смысле сгенерить все перестановки {1..7} 1 раз
分解物質
мы же можем искать разные числа на разных позициях
а это генерирует только одно число на разных позициях
Alexander
нет!!!
分解物質
ааа
Alexander
сдвиг на что?
Alexander
1+(e[i]+m-8)%8
Alexander
для 1-based
Alexander
ладно я ушел на время, если будут вопросы то пиши
分解物質
мне нужно оптимизировать цикл в примерно таком коде
a = permutations (1,2,3,4,5,6,7,8)
for e in a {
if e[n] == m {
process(e)
}
}
кароче, я хочу
a = permutations (1,2,3,4,5,6,7,8)
for i from 0 to 7! {
process(a[f(i, n, m)])
}
при этом функции f прийдётся знать о порядке в котором permutations будет генерировать перестановки
или можно ещё лучше?
Alexander
я все ещё не вижу почему мой варинт хуже.. ну да ладно
Влод
Alexander
а где что?
Alexander
хороший пакет, да
Влод
ну прост искал парсер джавы (не надеясь что такой бывает) и тут хоба инлайн джава. звучит забавно/больно
Anonymous
ого а можно спросить зачем?
Влод
думаю норм было бы знакомить человека с хаскелем показывая инлайн джаву
Alexander
ilia спарк надо использовать было, в java экосистему клиента интегрироваться и т.п.
Alexander
я его почти не делал, что-то на раннем этапе
Anonymous
я про парсинг джавы в хаскеле
Alexander
из этих inline-X я только inline-r много делал
Alexander
а
Alexander
к слову fpconf попросили архитектурную штуку, а не inline-X иначе бы я про это говорил на fpconf
Alexander
но т.к. fby говорит, что ответит через неделю
Alexander
каждую неделю, то вот
Влод
я про парсинг джавы в хаскеле
да неочевидно.
да просто генерить идиоматичный котлин из джава либы.
хаскел использую как люди используют перл - для мелких парсеров на коленке
Anonymous
а, как scalagen?
Alexander
как rust-чо-то-там?
Alexander
который раст из сишки делает?