I tu pojawia się moje pytanie. Jak wpaść na to rozwiązanie.
Im większa wiedza i doświadczenie, tym łatwiej wpaść na rozwiązanie tego typu problemów. Jest w tym dużo losowości, bo zdarzają się sytuacje, gdy rozwiązanie przychodzi łatwo, i zdarzają się sytuacje, gdy nie można znaleźć rozwiązania mimo długiego zastanawiania się nad nim, a też czasami rozwiązanie nagle przychodzi w nieoczekiwanym momencie. Z tym jest tak samo, jak z rozwiązywaniem zagadek. Dobrze jest znać wzorce, które umożliwiają rozwiązywanie problemów bez konieczności wymyślania czegoś od nowa. W programowaniu takich wzorców jest dużo.
Można też wymyślić algorytm na sprawdzenie wszystkich możliwości. Na takiej samej zasadzie działają algorytmy znajdujące najkorzystniejszy ruch w grach, najkrótszą drogę, sekwencję o najmniejszej ilości kroków. Można utworzyć drzewo ze wszystkimi możliwościami i przeszukać je w głąb w celu znalezienia tych pasujących możliwości. Np. jeśli chcesz znaleźć takie rozwiązanie dla operacji +
i -
i dla uproszczenia zakładasz, że wystarczą trzy kroki, żeby osiągnąć cel, to drzewo wyglądałoby tak, że każdy element nadrzędny posiada cztery elementy podrzędne:
- a = a + b
- a = a - b
- b = a + b
- b = a - b
Mój program znalazł takie rozwiązania dla +
i -
:
1) a = a + b, b = a - b, a = a - b
2) b = a - b, a = a - b, b = a + b
Podobne dla *
i /
:
1) a = a * b, b = a / b, a = a / b
2) b = a / b, a = a / b, b = a * b
Możliwe, że to działa tylko dla par operacji odwrotnych względem siebie. Xor
jest odwrotny dla samego siebie. Jak będę miał więcej czasu, to zrobię to samo dla większej kombinacji operacji.