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 M
i N
są liczbami niedociążenia M i N, to :N*
jest liczbą N + 1 i MN
jest 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
x
jest 2*A117498(x)
tam, gdzie A117498 daje optymalną kombinację metod binarnych i czynnikowych do znalezienia łańcucha dodatków.