Tekst aromatyzujący
Stos oparte esolang niedoci¿eniem ma jakieś ciekawe powiązania programowania funkcjonalnego. Jednym z nich jest traktowanie liczbowego typu danych - podobnie jak rachunek lambda, reprezentujesz liczbę naturalną N za pomocą funkcji, która wykonuje akcję N razy.
Aby uprościć sprawę, rozważymy tylko następujący podzbiór poleceń niedociążenia:
:- To polecenie powiela najwyższy element na stosie.*- To polecenie łączy dwa górne elementy stosu w jeden element.
Określamy niedociążenia liczbowy N jako łańcuch :i *która, gdy jest wykonywany, zajmują pozycję górną na stosie, i wytwarzania N kopii tego elementu sklejone. Kilka przykładów:
- Nie ma cyfr niedociążenia 0, -1, 1/2, π.
- Pusty ciąg
jest liczbą niedociążoną 1, ponieważ pozostawia stos nietknięty. :*jest liczbą niedociążoną 2, ponieważ kopiuje najwyższy element, a następnie łączy te dwie kopie razem w jeden element:(A):*=(A)(A)*=(AA).::**jest liczbą niedociążenia 3:(A)::**=(A)(A):**=(A)(AA)*=(AAA).:::***jest liczbą niedociążenia 4.:*:*jest również liczbą niedociążenia 4:(A):*:*=(AA):*=(AA)(AA)*=(AAAA).
Ogólnie rzecz biorąc, przekonasz się, że jeśli Mi Nsą liczbami niedociążenia M i N, to :N*jest liczbą N + 1 i MNjest liczbą M × N.
Wyzwanie
Twoim zadaniem jest napisanie najkrótszego programu (przyjmującego dane wejściowe na STDIN) lub funkcji (przyjmującego dane wejściowe za pomocą argumentu), który tworzy najkrótszą reprezentację liczby niedociążenia dla jej danych wejściowych w postaci łańcucha. To znaczy, jeśli wejściowa liczba jest dodatnią liczbą naturalną N> 1, musisz utworzyć liczbę niedociążenia N, której długość w znakach jest mniejsza lub równa długości każdej innej liczby niedociążenia N.
Przykładowe wejścia i wyjścia: („Input - OUTPUT.”)
- 1 -
. - 2 -
:*. - 5 -
::*:**(2 × 2 + 1). - 7 -
::*::***(2 × 3 + 1) lub:::**:**(3 × 2 + 1). - 33 -
::*:*:*:*:**(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***(16 × 3 + 1, długość 14), ale nie::*::***::*::***(7 × 7, długość 16).
Jeśli dane wejściowe nie są dodatnią liczbą naturalną, możesz zwrócić błąd, wywołać niezdefiniowane zachowanie, a nawet nie zakończyć działania. Docenione zostanie wyjaśnienie metody przesłania odpowiedzi.
Standardowe ograniczenia loophole zastosowania: brak dodatkowego nakładu, żadnych żądań internetowych, wartość wyjściowa / powrót musi być dokładnie taka odpowiedź i nie nieskończony strumień losowych :i *itp
xjest 2*A117498(x)tam, gdzie A117498 daje optymalną kombinację metod binarnych i czynnikowych do znalezienia łańcucha dodatków.