tło
Wiele ezoterycznych języków programowania nie ma liczb wbudowanych w literały, więc musisz je obliczyć w czasie wykonywania; w wielu przypadkach reprezentacja liczb może być dość interesująca. Mieliśmy już wyzwanie dotyczące reprezentowania liczb w przypadku niedociążenia. Wyzwanie polega na reprezentowaniu liczb w Modular SNUSP . (Pamiętaj, że nie musisz uczyć się SNUSP, aby ukończyć to wyzwanie - wszystkie potrzebne informacje znajdują się w specyfikacji - ale tło może być dla ciebie interesujące).
Zadanie
Dla celów tego wyzwania, szereg Modular SNUSP to ciąg utworzony z bohaterów @, +oraz =z tym, że ostatni znak to #, że charakter i przedostatni musi być +albo =(nie może być @). Na przykład, ważne numery zawierać @+#, ==#oraz @@+@=#; Przykłady obejmują liczby nieważnych +=, @@#i +?+#.
Wartość modułowego numeru SNUSP oblicza się rekurencyjnie w następujący sposób:
#ma wartość 0 (to jest przypadek podstawowy).- Jeśli liczba ma postać
=x, dla dowolnego łańcuchaxjej wartość jest równa wartościx. - Jeśli liczba ma postać
+x, dla dowolnego łańcuchaxjej wartość jest równa wartościxplus 1. - Jeśli liczba ma postać
@cx, dla dowolnego pojedynczego znakuci dowolnego łańcuchax, jego wartość jest równa wartościxplus wartośćcx.
Aby sprostać temu wyzwaniu, musisz napisać program, który przyjmuje nieujemną liczbę całkowitą jako dane wejściowe i generuje ciąg, który jest najkrótszym możliwym Modularnym numerem SNUSP o wartości równej wartości wejściowej.
Wyjaśnienia
- Jest całkiem możliwe, że będzie więcej niż jeden ciąg o tej samej wartości, a w szczególności dla niektórych liczb całkowitych będzie remis dla najkrótszego Modularnego numeru SNUSP o tej wartości. W takim przypadku możesz wypisać dowolną liczbę związaną z remisem.
- Nie ma ograniczeń w algorytmie używanym do znalezienia liczby; na przykład brutalne wymuszanie ciągów i ich ocenianie jest taktyką prawną, ale robi coś mądrzejszego, aby zmniejszyć przestrzeń wyszukiwania.
- Jak zwykle w PPCG, twoje zgłoszenie może być pełnym programem lub funkcją (wybierz ten, który jest bardziej zwięzły w twoim języku).
- Nie jest to problem z obsługą formatów wejściowych i wyjściowych, więc możesz użyć wszelkich rozsądnych środków, aby wprowadzić nieujemną liczbę całkowitą i wyprowadzić ciąg. Istnieje pełny przewodnik na temat meta , ale najczęściej stosowanymi metodami prawnymi są argumenty / powroty funkcji, argumenty wiersza poleceń oraz standardowe wejście / standardowe wyjście.
Przypadki testowe
Oto najkrótsze przedstawienia pierwszych kilku liczb:
- 0 :
# - 1 :
+# - 2) :
++# - 3 :
+++#lub@++# - 4 :
++++#lub+@++#lub@=++# - 5 :
@+++#lub@@++# - 6 :
+@+++#lub+@@++#lub@=+++#lub@=@++#lub@@=++# - 7 :
@++++#lub@+@++# - 8 :
@@+++#lub@@@++# - 9 :
+@@+++#lub+@@@++#lub@+++++#lub@++@++#lub@+@=++#lub@@=+++#lub@@=@++# - 10 :
@=@+++#lub@=@@++#lub@@@=++#( jest to dość ważny przypadek testowy do sprawdzenia , ponieważ wszystkie możliwe odpowiedzi obejmują=) - 11 :
@+@+++#lub@+@@++#lub@@++++#lub@@+@++# - 12 :
+@+@+++#lub+@+@@++#lub+@@++++#lub+@@+@++#lub@=+@+++#lub@=+@@++#lub@=@=+++#lub@=@=@++#lub@=@@=++#lub@@=++++#lub@@=+@++#lub@@=@=++# - 13 :
@@@+++#lub@@@@++# - 14 :
+@@@+++#lub+@@@@++#lub@=@++++#lub@=@+@++#lub@@+++++#lub@@++@++#lub@@+@=++# - 15 :
@+@++++#lub@+@+@++#lub@@=@+++#lub@@=@@++#lub@@@=+++#lub@@@=@++#
W większej testu na wyjściu z wejściem 40 powinny być @@@=@@+++#, @@@=@@@++#, @@@@=@+++#lub @@@@=@@++#.
Warunek zwycięstwa
Jako wyzwanie dla golfa , zwycięzca jest najkrótszym wejściem, mierzonym w bajtach.
=optymalnie wystąpi tylko jako@=, prawda?