Size: a a a

2021 January 17

A

Aragaer in Haskell Start
мне нужно найти такой набор из a и b, чтобы World пришел из некоторого исходного состояния в некоторое конечное
источник

A

Aragaer in Haskell Start
при этом если просто сделать State World [a], то ветвлений слишком много
источник

к

кана in Haskell Start
так, интересно

если a.b = 1 и b.a = 1, то возможны только комбинации a^n и b^n, все остальные сводятся в этим двум
источник

к

кана in Haskell Start
aaaaba
=
aaa(ab)a
=
aaaa

bababab
~
b(ab)(ab)(ab)
~
b
~
(ba)(ba)b(ab)
~
b
~
...
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Звучит как A* с эвристикой "a . b == b . a"
источник

AP

Aleksei (astynax) Pi... in Haskell Start
А если будет "a . b . c == c . a"?
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Имхо, nub должна вызывающая сторона делать
источник

A

Aragaer in Haskell Start
ок, тогда еще более конкретно. Функция listActions :: World -> [World -> World]
источник

A

Aragaer in Haskell Start
но известно, что любые два действия коммутируют
источник

AP

Aleksei (astynax) Pi... in Haskell Start
В BFS/DFS с отбрасыванием дублей путей как раз так и делают. Но никто не пишет DFS в инстансе монады
источник

к

кана in Haskell Start
кана
так, интересно

если a.b = 1 и b.a = 1, то возможны только комбинации a^n и b^n, все остальные сводятся в этим двум
а, черт, нет, ошибся, нет правила что ab=1=ba
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Aragaer
но известно, что любые два действия коммутируют
Они все identity? Или их всего два? :)
источник

к

кана in Haskell Start
ну тогда каждая комбинация это пара из двух чисел, где
type Action = (Int, Int)
runAction (n, m) = iter n a . iter m a

iter :: Int -> (a -> a) -> (a -> a)
источник

A

Aragaer in Haskell Start
они все не identity
источник

к

кана in Haskell Start
значит нужно просто перебирать два числа, n и m
источник

A

Aragaer in Haskell Start
Гм. Ну World это некоторая структура с разными полями, а каждое из экшнов это "взять что-то из одних полей и положить в другие"
источник

A

Aragaer in Haskell Start
причем "взять" и "положить" это сложение и вычитание
источник

A

Aragaer in Haskell Start
допустим a w = w{field1=field1 w + 1}, а b w = w{field2=field2 w + 1}
источник

A

Aragaer in Haskell Start
они не идентити, но они коммутируют
источник

к

кана in Haskell Start
без всякого стейта,

f result x = head do
 n <- [0..]
 m <- [0..n]
 let guess = iter n a . iter m a $ x
 guard $ guess == result
 pure guess

iter 0 f = id
iter n f = f . iter (dec n) f
источник