Diberikan bilangan bulat n ≥ 0, mengeluarkannya dalam notasi basis-3 non-posisional, menggunakan digit 139ABCDE…
dan pemisah 1 karakter. Setiap digit adalah kekuatan 3 berturut-turut dan digit di sisi kiri separator dinegasikan, misalnya A931 | B → 81− (1 + 3 + 9 + 27) → 41 . Digit hanya dapat muncul sekali.
Dengan ketat, biarkan nilai digit menjadi:
- nilainya jika digitnya adalah 1, 3 atau 9
- 27 jika digitnya adalah
A
- 3 kali nilai digit tepat sebelum untuk
B
..Z
Output Anda harus memenuhi jumlah (nilai digit di sebelah kanan |
) - jumlah (nilai digit di sebelah kiri |
) == input .
Contohnya
input output
----------------
0 |
1 |1
7 3|91
730 |D1
9999 FEDC|GA9
Anda dapat menggunakan karakter non-spasi yang berbeda sebagai pemisah. Anda juga diizinkan untuk tidak memiliki pemisah, dalam hal ini digit terbesar memulai urutan positif. Anda tidak perlu menangani apa pun yang lebih besar dari 2 32 −1 ( PMIGDCBA9|RQNLH3
).
Anda dapat menulis program atau fungsi lengkap, dan input dan output dapat disediakan di salah satu saluran yang biasa.
Ini kode-golf , jadi semakin pendek jawaban Anda, semakin baik!
sumber
|
dan sisi positif di sebelah kanan.Jawaban:
Java 10,
120113112109107102 byte-3 byte dengan menggunakan bagian dari trik @Arnauld JavaScript (ES6) jawaban 's ,
mengubah
i=0
dani++<1?49:i<3?51:i<4?57:i+61
untuki=4
dan++i>9?i+55:i>8?57:++i+43
.-6 byte terima kasih kepada @Arnauld secara langsung, dengan menyingkirkan
i
.Urutan output: Tertinggi ke terendah,
|
-delimiter, terendah ke tertinggi.Penjelasan:
Cobalah online.
sumber
r
di loop body. Terima kasih!i
, dan ketika Anda menggunakannya kembalic
)?p=1
dan tidak termasuk*1
dalam kode jika itu - meskipun tidak mengarah pada formula yang lebih baik dalam hal ini.)Python 3 ,
1039991 byte4 byte berkat Lynn.
8 byte berkat ovs.
Cobalah online!
Kredit ke xnor untuk logika.
sumber
JavaScript (ES6),
828079 byteOutput dalam huruf kecil, yang semoga baik-baik saja.
Cobalah online!
Mirip dengan jawaban Nun Leaky "Master Ninja" dan juga berdasarkan jawaban xnor .
Konversi digit
Kita mulai dengan k = 4 . Meskipun k kurang dari 9 , kami menambahnya dua kali pada setiap iterasi dan mengurangi 5 . Setelah itu, kami menambahnya hanya sekali dan mengubahnya menjadi basis-36.
sumber
Jelly , 26 byte
Cobalah online!
Gunakan baris baru sebagai pemisah.
sumber
Perl 6 , 80 byte
Cobalah online!
Tidak ada pemisah. Berdasarkan jawaban xnor .
sumber
Stax ,
3029 byteJalankan dan debug itu
Port of Stax saya menjawab dalam Balanced Ternary Converter .
Penjelasan
Gunakan versi yang belum dibongkar untuk menjelaskan.
sumber
C # .NET, 103 byte
Port of Java 10 saya jawab . Jika port langsung (kecuali
n->
untukn=>
) akan mungkin terjadi, saya akan mengedit jawaban Java saya dengan polyglot ini. Sayangnya,c+=
pada karakter atau memilikic=49
tidak mungkin dalam C #, maka ini jawaban porting longgar.Cobalah online.
sumber
Perl 5
-p
,7169 bytetidak menggunakan pemisah. Bagian negatif dan positif adalah dalam "urutan roman" (digit terbesar pertama)
Cobalah online!
sumber
Ruby ,
878482 byteDisimpan 2 byte berkat @ benj2240.
Cobalah online!
sumber
redo
trik: Coba online!J , 129 byte
Cobalah online!
Terlalu panjang, terutama untuk program J ...
Penjelasan:
sumber
C,
int
:138123 byte,long
:152131 byteSaya telah membuat dua versi ini, karena batasan tantangan dari input maks yang berfungsi
0x100000000
sepertinya sedikit aneh. Satu versi bekerja dengan bilangan bulat 32 bit (yang gagal batas karena alasan yang jelas), versi lain bekerja dengan 64 bit (yang jauh melampaui batas yang diberikan, dengan biaya148 byte tambahan).Versi 32 bit:
Versi 64 bit:
Ini identik kecuali bahwa ia menyatakan variabel integer menjadi
long
(yaitu 64 bit di linux).Versi ungolfed
long
:Seperti yang Anda lihat, ini bekerja dengan layak rekursif: Jika sisanya adalah 1, karakter masing-masing ditambahkan ke string output setelah panggilan rekursif. Jika sisanya 2, output dilakukan sebelum pengulangan. Dalam hal ini, saya juga menambah nilainya satu per satu untuk menangani digit negatif dengan benar. Ini memiliki manfaat tambahan untuk mengubah sisanya menjadi nol, yang memungkinkan saya untuk digunakan
value%3
sebagai syarat untuk pasca-rekursi jika.Hasil konversi ditempatkan ke buffer global. The
g()
wrapper memiliki tugas nol mengakhiri string yang dihasilkan benar, dan untuk me-resetresult
pointer ke awal (yang juga bagaimanag()
"kembali" hasilnya).Uji
long
versi dengan kode ini:Kemungkinan lebih lanjut, tetapi golf destruktif:
-4 bytes: jadikan fungsi ini satu-shot dengan menghapus pointer reset
g()
.-5 byte: memaksa pemanggil untuk melakukan pemutusan tali, kembali string tanpa penghentian dalam
buffer
, dan akhir string diresult
.sumber
Arang , 36 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukkan nilainya.
Dorong tiga daftar kosong ke daftar kosong yang telah ditentukan.
Ulangi karakter
139
dan alfabet huruf besar.Cyclically mengindeks daftar daftar dengan nilai dan mendorong karakter saat ini ke sana.
Bagi nilai dengan 3 tetapi bulatkan dengan menambahkan 1 terlebih dahulu.
Ulangi dua kali. Kedua kalinya, cetak a
|
.Setiap loop kami pop entri terakhir dari daftar; pertama kali ini memberi kita entri yang memiliki sisa
2
(yang sesuai dengan digit terner seimbang-1
), sedangkan kedua kali ini memberi kita entri yang sesuai dengan digit terner seimbang1
. Array yang dihasilkan biasanya akan mencetak secara vertikal, tetapi memutar arah cetak ke atas membatalkannya.sumber
J ,
69 6458 byteCobalah online!
sumber
Perl 5 ,
9289 byteTerinspirasi oleh jawaban java dan python.
Cobalah online!
Dengan sedikit ruang putih:
sumber
PHP, 73 byte
port jawaban xnor , 53 byte
Jalankan sebagai pipa dengan
-nr
atau coba online .sumber