Biorąc pod uwagę liczbę całkowitą n ≥ 0, wypisz ją w niepozycjonowanej notacji bazowej 3, używając cyfr 139ABCDE…
i separatora 1-znakowego. Każda cyfra jest kolejną potęgą 3, a cyfry po lewej stronie separatora są negowane, np. A931 | B → 81− (1 + 3 + 9 + 27) → 41 . Cyfra może pojawić się tylko raz.
Rygorystycznie, niech wartość cyfry będzie:
- jego wartość, jeżeli cyfra to 1, 3 lub 9
- 27 jeśli cyfra to
A
- 3-krotność wartości cyfry tuż przed nią dla
B
…Z
Twój wynik powinien spełniać sumę (wartość cyfr po prawej stronie |
) - suma (wartość cyfr po lewej stronie |
) == input .
Przykłady
input output
----------------
0 |
1 |1
7 3|91
730 |D1
9999 FEDC|GA9
Możesz użyć innego znaku spacji jako separatora. Możesz również nie mieć separatora, w którym to przypadku największa cyfra rozpoczyna sekwencję dodatnią. Nie potrzeba do obsługi niczego większy niż 2 32 -1 ( PMIGDCBA9|RQNLH3
).
Możesz napisać pełny program lub funkcję, a dane wejściowe i wyjściowe mogą być dostarczane na zwykłych kanałach.
To jest golf golfowy , więc im krótsza odpowiedź, tym lepiej!
źródło
|
a pozytywy po prawej stronie.Odpowiedzi:
Java 10,
120113112109107102 bajtów-3 bajty przy użyciu części sztuczki odpowiedzi JavaScript (ES6) @Arnauld ,
zmiana
i=0
ii++<1?49:i<3?51:i<4?57:i+61
nai=4
i++i>9?i+55:i>8?57:++i+43
.-6 bajtów dzięki @Arnauld bezpośrednio, pozbywając się
i
.Kolejność produkcji: od najwyższej do najniższej,
|
-delimiter, od najniższej do najwyższej.Wyjaśnienie:
Wypróbuj online.
źródło
r
w ciele pętli. Dzięki!i
i kiedy ponownie używaszc
)?p=1
nie zawiera*1
kodu, jeśli tak jest - nawet jeśli nie prowadzi to do lepszej formuły w tym przypadku.)Python 3 ,
1039991 bajtów4 bajty dzięki Lynn.
8 bajtów dzięki ovs.
Wypróbuj online!
Kredyty dla xnor za logikę.
źródło
JavaScript (ES6),
828079 bajtówDane wyjściowe pisane są małymi literami, co powinno mieć nadzieję.
Wypróbuj online!
Podobna do odpowiedzi Nieczystej „Mistrzyni Ninja” Dziurawej a także na podstawie odpowiedzi Xnora .
Konwersja cyfr
Zaczynamy od k = 4 . Podczas gdy k jest mniejsze niż 9 , zwiększamy go dwukrotnie przy każdej iteracji i odejmujemy 5 . Następnie zwiększamy go tylko raz i przekształcamy w base-36.
źródło
Galaretka , 26 bajtów
Wypróbuj online!
Użyj nowej linii jako separatora.
źródło
Perl 6 , 80 bajtów
Wypróbuj online!
Bez separatora. Na podstawie odpowiedzi xnora .
źródło
Stax ,
3029 bajtówUruchom i debuguj
Port mojej odpowiedzi Stax w Balanced Ternary Converter .
Wyjaśnienie
Używa rozpakowanej wersji do wyjaśnienia.
źródło
C # .NET, 103 bajty
Port mojej odpowiedzi Java 10 . Gdyby możliwy był bezpośredni port (z wyjątkiem
n->
don=>
), edytowałbym swoją odpowiedź Java za pomocą tego poliglota. Niestety,c+=
w przypadku postaci lub posiadaniec=49
nie jest możliwe w C #, stąd ta luźna przeniesiona odpowiedź.Wypróbuj online.
źródło
Perl 5
-p
,7169 bajtównie używa separatora. Części ujemne i dodatnie są w „kolejności rzymskiej” (pierwsza cyfra na początku)
Wypróbuj online!
źródło
Ruby ,
878482 bajtówZaoszczędzono 2 bajty dzięki @ benj2240.
Wypróbuj online!
źródło
redo
sztuczki: Wypróbuj online!J , 129 bajtów
Wypróbuj online!
Zbyt długi, szczególnie w przypadku programu J ...
Wyjaśnienie:
źródło
C,
int
:138123 bajtówlong
:152131 bajtówStworzyłem dwie wersje tego, ponieważ limit wyzwań dla maksymalnego działania
0x100000000
wydawał się nieco dziwny. Jedna wersja działa z 32-bitowymi liczbami całkowitymi (która z oczywistych powodów nie spełnia limitu), druga wersja działa z 64 bitami (co znacznie wykracza poza podany limit, kosztem148 dodatkowych bajtów).Wersja 32-bitowa:
Wersja 64-bitowa:
Jest to identyczne, z tą różnicą, że deklaruje zmienną całkowitą
long
(która ma 64 bity w Linux).Wersja bez golfa
long
:Jak widać, działa to przez rekurencyjne przyzwoite: Jeśli reszta to 1, odpowiedni znak jest dołączany do ciągu wyjściowego po wywołaniu rekurencyjnym. Jeśli reszta to 2, dane wyjściowe są wykonywane przed powtórzeniem. W tym przypadku zwiększam również wartość o jeden, aby poprawnie obsługiwać cyfrę ujemną. Daje to dodatkową korzyść polegającą na zmianie reszty na zero, co pozwala mi korzystać
value%3
jako warunku dla rekursji po rekursji if.Wynik konwersji jest umieszczany w buforze globalnym. Zadaniem
g()
otoki jest prawidłowe zakończenie wynikowego łańcucha i zresetowanieresult
wskaźnika do jego początku (tak też jestg()
„zwraca” wynik).Przetestuj
long
wersję za pomocą tego kodu:Możliwe dalsze, ale destrukcyjne golfa:
-4 bajty: zmień funkcję na jedną, usuwając wskaźnik resetujący
g()
.-5 bajtów: zmusza program wywołujący do zakończenia łańcucha, zwracając ciąg bez zakończenia w
buffer
, a koniec łańcucha wresult
.źródło
Węgiel drzewny , 36 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wprowadź wartość.
Wciśnij trzy puste listy do predefiniowanej pustej listy.
Pętla znaków
139
i alfabetu.Cyklicznie indeksuj listę list wartością i wypychaj do niej bieżący znak.
Podzielić wartość przez 3, ale zaokrąglić, dodając najpierw 1.
Pętla dwa razy. Za drugim razem wydrukuj a
|
.W każdej pętli wstawiamy ostatni wpis z listy; po raz pierwszy daje nam to wpisy, które miały resztę
2
(co odpowiada zrównoważonej cyfrze trójskładnikowej-1
), podczas gdy po raz drugi daje nam wpisy odpowiadające zrównoważonej cyfrze trójskładnikowej1
. Powstały układ normalnie drukowałby pionowo, ale obrócenie kierunku drukowania w górę anuluje to.źródło
J ,
69 6458 bajtówWypróbuj online!
źródło
Perl 5 ,
9289 bajtówZainspirowany odpowiedziami Java i Python.
Wypróbuj online!
Z białą przestrzenią:
źródło
PHP, 73 bajty
port odpowiedzi xnora , 53 bajty
Uruchom jako potok z
-nr
lub wypróbuj je online .źródło