Edycja: meta-golf
Wkrótce opublikuję nowszą wersję tego pytania . Trzymaj toon!
Edycja nr 2: Nie będę już aktualizować wyzwania, ale pozostawię je otwarte. meta-golf
Wersja dostępna jest tutaj: /codegolf/106509/obfuscated-number-golf
Tło:
Większość liczb można zapisać tylko za pomocą 6 różnych symboli:
e
(Stała Eulera)-
(Odejmowanie, nie negacja)^
(Potęgowanie)(
)
ln
(Naturalny logarytm)
Na przykład możesz przekonwertować liczbę urojoną i
za pomocą tego równania:
(e-e-e^(e-e))^(e^(e-e-ln(e^(e-e)-(e-e-e^(e-e)))))
Cel:
Biorąc pod uwagę liczbę całkowitą k
za pomocą dowolnych rozsądnych środków, wyprowadzaj możliwie najkrótszą reprezentację tej liczby, używając tylko tych 6 symboli.
Przykłady:
0 => "e-e"
1 => "ln(e)"
2 => "ln(ee)"
// Since - cannot be used for negation, this is not a valid solution:
// ln(e)-(-ln(e))
-1 => "e-e-ln(e)"
Uwagi:
- Końcowy nawias liczy się do całkowitej liczby znaków.
ln(
liczy się tylko jako 1 znak.- Cała reszta liczy się jako 1 postać.
n^0=1
- Obowiązuje kolejność operacji
- Nawias namnażania jest do przyjęcia, na przykład
(2)(8)=16
,2(5)=10
ieln(e)=e
. ln e
nie jest ważne, musisz to zrobićln(e)
code-golf
math
number
number-theory
Julian Lachniet
źródło
źródło
ln(ee...e)
) jest najlepszym sposobem na przedstawienie pozytywów. Edycja: nie, nie jest.ln(e^(ln(eeeee)ln(eeee)))
jest lepszy na 20ln(eeee)^ln(ee)
jest krótszy niżln(eeeeeeeeeeeeeeee)
16Odpowiedzi:
Python 3, 402 bajty
Przykładowe użycie:
Zauważ, że chociaż format wyjściowy może go nie odzwierciedlać, kod poprawnie zlicza wszystkie długości zgodnie ze specyfikacją pytania.
To głupie okrucieństwo na wszystkich możliwych długościach strun. Następnie używam zamienników, aby Python mógł to ocenić. Jeśli jest równy temu, czego chcemy, zaznaczam również, aby wykluczyć jednoargumentowe znaki ujemne, sprawdzając AST.
Nie jestem zbyt dobry w golfie w Pythonie, więc oto częściowo nieuczesany kod, jeśli ktoś chce pomóc!
źródło