Dalam tantangan ini, Anda akan menghitung angka dari urutan yang aneh.
Input Anda adalah bilangan bulat non-negatif desimal tunggal. Membalikkan bit dalam integer ini dan kemudian kuadratkan angka untuk mendapatkan output yang diperlukan.
Saat membalikkan bit Anda tidak harus menggunakan nol terkemuka di input. Sebagai contoh:
26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121
25 input / output pertama dari urutan ini:
0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9
Solusi Anda harus bekerja untuk bilangan bulat berukuran sewenang-wenang. Jika bahasa Anda tidak memiliki metode bawaan yang praktis untuk menggunakannya, implementasikan jawaban Anda seolah-olah itu. Anda kemudian dimaafkan jika jawaban Anda terlalu banyak. Namun, jangan gunakan trik / batasan yang hanya berfungsi untuk domain terbatas (seperti tabel pencarian).
Skor Anda adalah jumlah byte kode sumber.
-50% bonus jika Anda tidak pernah mengkonversi nomor ke / dari biner. Ini tidak terbatas pada builtin, jika Anda mengulangi angka sedikit demi sedikit (baik dengan menggeser atau menutupi atau metode lainnya), itu juga akan dihitung sebagai konversi. Saya tidak tahu apakah ini benar-benar mungkin, tetapi memberi insentif untuk menemukan pola dalam urutan.
Kemenangan skor terkecil.
Jawaban:
Par , 5 byte
Itu baca-biner-terbalik-biner-persegi.
sumber
Mathematica,
4221 byteTerima kasih kepada alephalpha untuk mengurangi separuh skor.
Alasan sebenarnya saya melakukan ini di Mathematica adalah karena saya ingin melihat plot ... itu pasti terlihat lucu:
sumber
Minkolang 0,14 , 43 byte
Terima kasih kepada Mego untuk menginspirasi ini.
Uji kode di sini dan periksa semua kotak uji di sini .
Penjelasan
Ini menggunakan relasi perulangan ini:
Jika
n
input, makaa(n)
nomor yang dihasilkan setelah urutan binernya dibalik. 0 dan 1 sudah jelas. Untuka(2n) = a(n)
, pertimbangkan bahwax0
(di manax
urutan angka biner) dibalik adalah0x
, yang sama denganx
. Sebaba(2n+1)
, alasannya sedikit lebih rumit.x1
membalik adalah1x
, yang sama denganx + 2^k
untuk beberapak
. Inik
adalah satu lebih dari jumlah digitx
, yaitufloor(log_2(n))+1
. Rumus lengkapnya mengikuti, kecuali itu sedikit dimodifikasi. Inilah yang sebenarnya saya kode:Saat Mego dan saya berolahraga dalam obrolan
floor(n/2) = (n - n%2)/2
,. Jadilog_2(floor(n/2))+1 = log_2(n - n%2)
,. Lebih jauh lagi, mengalikan dengan(n%2)
meruntuhkan bagian aneh dan genap menjadi satu ekspresi.Akhirnya, tanpa basa-basi lagi, inilah kodenya, dijelaskan.
sumber
2n
dan2n+1
dalam hubungan perulangan, Anda harus segera menganggapnya sebagai perulangan bit.Japt ,
2928117 byte(Anda dapat menyimpan program sebagai file 7-byte IEC_8859-1 yang disandikan, kemudian mengunggahnya ke penerjemah .)
Japt adalah JavaScript singkat yang dibuat oleh produk ETH .
Cobalah online!
Penjelasan:
¢
adalah jalan pintas keUs2
, yang dikompilasi keU.s(2)
.U
adalah input (implisit),.s(2)
dipanggil oleh angka, memanggil.toString(2)
(mengkonversi ke biner, mem-parsing sebagai string).w
mengkompilasi ke.w()
, yang membalikkan string (.split('').reverse().join('')
).n2
berfungsi sebagaiparseInt(<number>,2)
, yaitu mengkonversi biner ke desimal.²
memanggilMath.pow(<number>,2)
, yaitu kuadrat nomornya.sumber
n
, jadi Anda bisa melakukannyaUs2 a w a n2 p2
. Kerja bagus!w
bekerja sama pada string seperti halnya pada array, sehingga Anda tidak perlu keduanyaa
:)Us2
=¢
, danp2
=²
, membawanya ke 7 byte:¢w n2 ²
Python, 32 byte
Cobalah online.
Kode ini cukup mudah:,
bin(6)
misalnya, memberi0b110
, representasi biner dari 6.[:1:-1]
membalikkan string dan menghapus0b
.int
mengubah string menjadi integer dari biner, dan**2
kuadratkan.sumber
Jolf , 7 byte
Jalankan saja. Input pada halaman tidak berfungsi.
Penjelasan
Saya menambahkan
Q
perintah, yang menghasilkan 6 byte:QC_Bj2
sumber
TeaScript , 9 byte
11TeaScript adalah Javascript untuk bermain golf
Akan bermain golf lagi setelah saya kembali ke komputer saya
Cobalah online!
Tes semua
sumber
Serius ,
87 byteTantangan seperti ini sempurna untuk Serius :)
Cobalah online
Penjelasan:
sumber
J,
109 byteIni adalah kata kerja monadik diam-diam. Cobalah online!
Terima kasih kepada @randomra untuk bermain golf 1 byte!
Bagaimana itu bekerja
sumber
CJam, 10 byte
Cobalah online
sumber
JavaScript,
64635653 byteSaya sadar saya ekstra panjang, tapi hei, saya bisa melakukannya: P
Demo
sumber
parseInt(
yang dapat Anda lakukan+("0b"+
[...n.toString(2)]
dan.join``
n=>+("0b"+[...n.toString(2)].reverse().join``)**2
. Belum berfungsi di peramban mana punPerl 6 , 21 byte
Contoh penggunaan:
sumber
PHP, 45 byte
sumber
Shell, 25
Input / output melalui STDIN / STDOUT:
sumber
Pyth - 9 byte
Konversi langsung. Saya benar-benar ditugaskan 2 ke var yang sangat aneh.
Test Suite .
sumber
Pyth, 9 byte
Ini adalah jawaban berbasis pyth yang sangat sederhana mirip dengan yang Python
sumber
𝔼𝕊𝕄𝕚𝕟, 12 karakter / 21 byte
Try it here (Firefox only).
Jawaban tidak kompetitif, 9 karakter / 18 byte
Try it here (Firefox only).
sumber
Ruby, 35 byte
sumber
TI-Basic (TI-84 Plus CE), 42 byte
sumber