Diberikan integer N lakukan langkah-langkah berikut: (menggunakan 9 sebagai contoh).
- Terima input N. (
9
) - Ubah N dari base10 ke base2. (
1001
) - Tambah setiap bit sebanyak 1. (
2112
) - Perlakukan hasilnya sebagai base3 dan ubah kembali ke base10. (
68
) - Kembali / Keluarkan hasilnya.
Memasukkan
Dapat diterima dalam format angka apa pun.
Anda hanya perlu menangani case di mana N> 0.
Keluaran
Baik kembali sebagai angka atau string, atau dicetak ke stdout
.
Aturan
- Ini adalah kode-golf , kode terpendek dalam byte yang menang.
- Celah default dilarang.
Uji Kasus
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
code-golf
number
base-conversion
Ian H.
sumber
sumber
+n%2+1
menambahkan bit biner paling kanan plus 1 ke nilai balik,n/2
menggeser-kanann
1 bit biner,3*f(n/2)
secara rekursif menambahkan 3 kali perhitungan ini pada bit-bit yang bergeser kanan, dann and
mengakhiri rekursi ketikan
0JavaScript (Node.js) , 23 byte
Cobalah online!
sumber
x>>1
sama sepertix/2
bukan?Infinity
di JS .. Coba online. (Anda mungkin ingin menambahkan tautan TIO untuk jawaban Anda, I4m2 )1>>1=0
sambil1/2=0.5
n/2
, dan alasan saya menyarankannya di sini.Java (JDK 10) , 44 byte
Cobalah online!
sumber
-~
akan membantu?long
? :) Dan di sini saya pikir pendekatan urutan saya cerdas .. Anda gagal keluar dari taman dalam waktu kurang dari 5 menit ..>.>: '(Jelly , 4 byte
Cobalah online!
sumber
J , 7 byte
Cobalah online!
Terima kasih Galen Ivanov untuk -4 byte! Saya benar-benar perlu meningkatkan keterampilan J golf saya ...
sumber
3#.1+#:
TIO: 0
.R ,
5543 byteCobalah online!
Menggunakan trik konversi basis standar di R, kenaikan, dan kemudian menggunakan produk titik dengan kekuatan
3
untuk mengkonversi kembali ke integer.Terima kasih kepada @ user2390246 karena telah menjatuhkan 12 byte!
sumber
05AB1E , 5 byte
Cobalah online!
05AB1E , 5 byte
Cobalah online!
sumber
S
bekerja€
juga.Java 10,
8152 byte (Konversi basis)Cobalah online.
-29 byte terima kasih kepada @ Holger .
Penjelasan:
Java 10,
171167151150149 byte (Urutan)-16 byte terima kasih kepada @ musicman523 , ubah
(int)Math.pow(2,t)
menjadi(1<<t)
.-1 byte terima kasih kepada @ Holger , ubah
(int)(Math.log(n)/Math.log(2))
ke31-n.numberOfLeadingZeros(n)
.Cobalah online.
Penjelasan:
Ketika kita melihat urutannya:
Kita dapat melihat banyak bagian:
Jadi urutan yang ditanyakan adalah:
Saya payah menemukan pola, jadi saya bangga dengan apa yang saya temukan di atas .. Karena itu, @ user202729 menemukan pendekatan yang lebih baik dan lebih pendek di Jawa dalam beberapa menit ..: '(
sumber
n.toString(n,2).getBytes()
... Saya pikir konversi manual mungkin lebih pendek.long
dan tidakint
?(int)Math.pow(2,t)
untuk1<<t
... dan kemudian sebariskan ekspresi itu dan drop variabel i ( 152 bytes )31-Integer.numberOfLeadingZeros(n)
sebagai gantinya(int)(Math.log(n)/Math.log(2))
, tapi itu tidak lebih pendek. Kecuali Anda menggunakanimport static
di header, yang mungkin meregangkan aturan terlalu jauh.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 byte
Cobalah online!
sumber
Brachylog , 7 byte
Cobalah online!
Penjelasan
Bukan berarti Anda benar-benar membutuhkannya, tapi ...
sumber
Ruby , 27 byte
Cobalah online!
sumber
Python 2 ,
5655 byteCobalah online!
sumber
Attache , 19 byte
Cobalah online!
Ini adalah komposisi dari tiga fungsi:
FromBase&3
1&`+
Bin
Ini pertama-tama mengonversi menjadi binary (
Bin
), menambahkannya (1&`+
), kemudian mengubahnya menjadi ternary (FromBase&3
).Alternatif
Non-pointfree, 21 byte:
{FromBase[Bin!_+1,3]}
Tanpa builtin, 57 byte:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
sumber
Retina 0.8.2 , 36 byte
Cobalah online! Penjelasan:
Konversi dari desimal ke unary.
Divmod berulang kali dengan 2, dan tambahkan 1 ke hasil modulo.
Tambahkan 1 ke digit pertama juga.
Konversi dari basis 3 tanpa kode ke basis unary.
Konversikan ke desimal.
sumber
Japt , 6 byte
Mengambil input sebagai angka, menghasilkan angka.
Cobalah online!
sumber
MATL ,
1276 byteCobalah online!
Disimpan 5 byte berkat Giuseppe dan satu lagi berkat Luis Mendo.
Jawaban 7 byte lama:
Cobalah online!
Penjelasan:
Yang lama untuk 12 byte:
Cobalah online!
Ya ampun, itu berantakan ... Jadi ini: `BQ3GBn: q ^! Y *.
Penjelasan:
sumber
C # (Visual C # Compiler) , 128 byte
Cobalah online!
Saya menghitung
System
karena saya menggunakanConvert
danMath
.sumber
z
variabel Anda . Juga di tubuh ekspresi Anda bisa menghilangkan{
,}
danreturn
pernyataan. Jadi sesuatu seperti inin=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 byteCobalah online!
sumber
C,
3227 byteBerdasarkan jawaban Java user202729 . Cobalah online di sini . Terima kasih kepada Kevin Cruijssen untuk bermain golf 5 byte.
Versi tidak disatukan:
sumber
return
denganx=
dan membalikkan terner sehingga!
tidak lagi diperlukan:n(x){x=x?x%2+1+3*n(x/2):0;}
Sekam , 5 byte
Cobalah online!
Penjelasan
sumber
Oktaf dengan kotak alat komunikasi,
3332 byteCobalah online!
Mengonversi input ke vektor biner menggunakan
de2bi
, dan menambah semua angka. Apakah perkalian matriks dengan vektor vertikal 3 dinaikkan ke kekuatan yang sesuai:,1, 3, 9, ...
sehingga mendapatkan jumlah tanpa panggilan eksplisit untuksum
.sumber
@(x)base2dec(de2bi(x)+49,3)
selama 27 (kesempatan langka di mana MATLAB lebih lunak daripada Oktaf)PHP,
8464 BytesCobalah online !!
Kode ASLI
Cobalah online !!
Berkat Cristoph , lebih sedikit byte jika dijalankan dengan php -R
Penjelasan
sumber
strtr
<?="Will do!!"
CJam , 8 byte
Cobalah online!
Penjelasan
sumber
:)
..Ruang putih , 117 byte
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Cobalah online (dengan spasi, tab, dan hanya baris baru).
Penjelasan dalam pseudo-code:
Saya pertama-tama mengonversi fungsi rekursif
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
ke bentuk berulang (dalam pseudo-code):Dan saya kemudian menerapkan pendekatan berulang ini di Whitespace bahasa berbasis stack, menggunakan stack default itu.
Contoh berjalan:
Memasukkan:
1
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Berhenti dengan kesalahan: Keluar tidak ditentukan.
Memasukkan:
4
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Berhenti dengan kesalahan: Keluar tidak ditentukan.
sumber
n < 1
cek dengan mendorong nilai sampai n adalah 0 dan kemudian muncul sampai Anda mencapai nilai batas Anda (0). Kedalaman tumpukan tidak perlu disimpan secara eksplisit dan bahkan tidak perlu bertukar (jika Anda maksud menukar dua nilai teratas seperti din < 1
(ataun == 0
) IS mendorong nilai sampain
0 .. Atau saya salah mengartikan sesuatu di sini ..: S " Kedalaman tumpukan tidak perlu disimpan secara eksplisit " Di Jawa itu, jika tidak saya tidak bisa membuat array. Saya bisa menggunakan, sebagaijava.util.Stack
gantinya, tapi saya hanya menggunakan array untuk membuatnya kurang bertele-tele. Di Whitespace tumpukan adalah ukuran yang tidak ditentukan.Brain-Flak , 74 byte
Cobalah online!
Versi "Dapat dibaca"
sumber
Tambahkan ++ , 14 byte
Cobalah online!
sumber
Japt , 7 byte
Coba di sini
sumber
Haskell , 32 byte
Cobalah online!
sumber
Perl 5 , 36 byte
Cobalah online!
sumber
Pyth, 8
Cara menghilangkan ruang dan membuat
Q
tersirat?Pyth online .
sumber
Q
tersirat? Saya pikir kamu tidak bisa.