Specyfikacja Mathemania:
Każdy fragment kodu Mathemania zaczyna się od cyfry 2
. Z poziomu 2
możesz wykonać następujące operacje:
e
: Potęgowanie. Domyślnym poleceniem jest podniesienie liczby do kwadratu.f
: Factorial. Domyślnie to polecenie używa pojedynczego silnia na liczbie (using f on 2 = 2! = 2
).r
: Root. Domyślnym poleceniem jest zrootowanie liczby na kwadrat.c
: Funkcja sufitowa.l
: Funkcja podłogi.
Aby wygenerować liczbę w Mathemanii, musisz połączyć te polecenia, które są wykonywane od lewej do prawej na numerze 2
.
Przykłady:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
Te e
, f
oraz r
polecenia mogą być zmieniane przez dodatkowych poleceń Mathemania (które również rozpocząć się 2
jako „bazy” liczba) w celu wytworzenia różnych exponentiations, silnię i korzeni poprzez umieszczenie wsporników po funkcji zmienionego i wprowadzania poleceń Mathemania środku.
Na przykład, aby utworzyć sześcian zamiast kwadratu, możesz wstawić polecenie 3
po e
:
e(efrrc) -> cube a number, "efrrc" = 3
UWAGA: w naszym celu polecenie silnia ( f
) zaczyna się 2
od pojedynczego silnia. Więc jeśli to zrobisz f(efrrc)
, zostanie to ocenione do podwójnego silnia, a nie potrójnego silnia.
W przypadku n
współczynników (np. Podwójnych silni = 2-silniak, potrójnego silni = 3-silniak itp.) Liczbę podstawową mnoży się przez liczbę, która jest n
mniejsza od niego, i n
mniejsza, i tak dalej, aż do ostatecznej liczby nie będzie odejmowane przez n
bez stawania się 0
lub ujemne.
Na przykład:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Aby uzyskać więcej informacji, zobacz tutaj .
Możesz wstawić go w dowolnym miejscu, a Mathemania potraktuje go jako jedną funkcję:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Możesz także zagnieżdżać je w sobie:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Aby znaleźć tłumacza kodu Mathemania, kliknij tutaj (na zdrowie, @ BradGilbertb2gills!)
Zadanie:
Twoim zadaniem jest stworzenie programu, który po podaniu dodatniej liczby całkowitej n
jako sygnału wejściowego generuje program Mathemania, który po uruchomieniu zwraca n
.
Jednak programy Mathemania które generują musi być tak małe (grałem), jak to możliwe, a końcowy wynik jest określony przez sumę liczby bajtów w wygenerowanym programów Mathemania próbki, które są liczbami całkowitymi 10,000
do 10,100
. Najniższy wynik wygrywa.
Zasady i specyfikacje:
- Twój program musi wypisać prawidłowy program Mathemania dla dowolnej dodatniej liczby całkowitej, ale tylko liczby między
10,000
i10,100
zostaną przetestowane. - Nie wolno wyprowadzać programów Mathemania, które nie dają liczb całkowitych. Jeśli to zrobisz, Twój program zostanie zdyskwalifikowany.
- Dla poleceń
e
,f
ir
kod Mathemania wewnątrz tych funkcji (na przykłade(efrrc)
, w przypadku gdyefrrc
jest to kod wewnątrz funkcji) musi dawać w wyniku dodatnia powyżej2
. Jeśli twój program nie przestrzega tej zasady, również jest zdyskwalifikowany. - Twój program musi zwrócić program Mathemania dla jednej ze 101 liczb całkowitych testowych w najwyżej 30 minut na nowoczesnym laptopie.
- Twój program musi zwracać to samo rozwiązanie dla dowolnej liczby całkowitej przy każdym uruchomieniu. Na przykład, gdy program otrzymuje dane wejściowe
5
i wyświetla dane wyjścioweefrc
, musi je wyprowadzać za każdym razem, gdy dane wejściowe5
są podawane. - Nie możesz na stałe kodować żadnych rozwiązań dla dodatniej liczby całkowitej.
- Aby w pełni zmaksymalizować potencjał gry w golfa, twój program powinien być w stanie obsłużyć dowolnie duże liczby całkowite. Nie jest to wymagane, ale powodzenia, jeśli Twój język tego nie obsługuje.
To jest metagolf , więc wygrywa najniższy wynik!
ef
na przykład, czy kod może „pomijać” i wyświetlać wynik przedef
operacją?Odpowiedzi:
Python 3.5, wynik ??
Na razie nie mam danych wyjściowych dla wszystkich 101 danych wejściowych, ale po uruchomieniu programu dla wszystkich przypadków testowych zaktualizuję swój wynik.
Ponadto nie byłem w stanie zweryfikować wyników niektórych przypadków testowych, które wypróbowałem ze względu na samą liczbę liczb, i w tym momencie upłynął limit czasu tłumacza online @ BradGilbertb2gills. Mam nadzieję, że wszystkie wyjścia działają.
źródło