Otrzymasz listę liczb L = [17, 5, 9, 17, 59, 14], torbę operatorów O = {+:7, -:3, *:5, /:1}i numer N = 569.
Zadanie
Wyprowadź równanie, które używa wszystkich liczb Lpo lewej stronie i tylko liczby Npo prawej stronie. Jeśli nie jest to możliwe, wypisz False. Przykładowe rozwiązanie:
59*(17-5)-9*17+14 = 569
Ograniczenia i wyjaśnienia
- Nie można
[13,37]łączyć liczb ( nie można ich używać jako1337) - Pojawią się tylko liczby naturalne i zero
L. - Kolejność
Lnie ma znaczenia. - Musisz użyć wszystkich cyfr w
L. - Tylko podmioty
+,-,*,/pojawi sięO. Omoże mieć więcej operatorów niż potrzebujesz, ale przynajmniej|L|-1operatorów- Możesz użyć każdego operatora dowolną liczbę razy, aż do wartości w
O. - Wszystkie cztery operacje
Osą standardowymi operacjami matematycznymi; w szczególności/jest to normalny podział z dokładnymi ułamkami.
Zwrotnica
- Im mniej punktów, tym lepiej
- Każdy znak kodu daje jeden punkt
Musisz dostarczyć wersję bez gry w golfa, która jest łatwa do odczytania.
tło
Podobne pytanie został poproszony na przepełnienie stosu. Pomyślałem, że może to być interesujące wyzwanie dla golfa.
Złożoność obliczeniowa
Jak powiedział Peter Taylor w komentarzach, możesz rozwiązać sumę podzbiorów za pomocą:
- Masz instancję sumy podzbioru (stąd zestaw S liczb całkowitych i liczby x)
- L: = S + [0, ..., 0] (| S | razy zero), N: = x, O: = {+: | S | -1, *: | S | - 1, /: 0, -: 0}
- Teraz rozwiąż ten przykład mojego problemu
- Rozwiązaniem dla sumy podzbiorów są liczby S, które nie są mnożone przez zero.
Jeśli znajdziesz algorytm lepszy niż O (2 ^ n), udowodnisz, że P = NP. Ponieważ P vs NP to problem z nagrodą milenijną, a zatem warty 1 000 000 dolarów amerykańskich, jest bardzo mało prawdopodobne, aby ktoś znalazł na to rozwiązanie. Więc usunąłem tę część rankingu.
Przypadki testowe
Poniższe nie są jedynymi prawidłowymi odpowiedziami, istnieją inne rozwiązania i są dozwolone:
- (
[17,5,9,17,59,14],{+:7, -:3, *:5, /:1},569)
=>59 * (17-5)- 9 * 17 + 14 = 569 - (
[2,2],{'+':3, '-':3, '*':3, '/':3},1)
=>2/2 = 1 - (
[2,3,5,7,10,0,0,0,0,0,0,0],{'+':20, '-':20, '*':20, '/':20},16)
=>5+10-2*3+7+0+0+0+0+0+0+0 = 16 - (
[2,3,5,7,10,0,0,0,0,0,0,0],{'+':20, '-':20, '*':20, '/':20},15)
=>5+10+0*(2+3+7)+0+0+0+0+0+0 = 15
/≡ div), tylko liczby zmiennoprzecinkowe i błędy braku zaokrąglania, ...
5+10+2*3+7*0+0...
m = |L|? Jeśli tak, to jak możesz oczekiwać, że środowisko wykonawcze nie będzie zależeć od wielkości tej listy? Na przykład[2,2],[+,+,...,+,/],1. W rzeczywistości, skoro n oznacza O (m), możesz po prostu napisać to wszystko w kategoriach m.