Memasukkan:
Kami mengambil dua input:
- Input
b
dengan dua nilai berbeda:Left
danRight
. † - Dan bilangan bulat positif
n
.
Keluaran:
Berdasarkan input Kiri / Kanan, kami menampilkan salah satu dari dua urutan berikut dalam kisaran 1-n
(dalam urutan di bawah 125 item pertama ditampilkan):
Left:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966, 967, 1016, 1017, 1022, 1023, 31744, 31745, 31750, 31751, 31800, 31801, 31806, 31807, 32704, 32705, 32710, 32711, 32760, 32761, 32766, 32767, 2064384, 2064385, 2064390, 2064391, 2064440, 2064441, 2064446, 2064447, 2065344, 2065345, 2065350, 2065351, 2065400, 2065401, 2065406, 2065407, 2096128, 2096129, 2096134, 2096135, 2096184, 2096185, 2096190, 2096191, 2097088, 2097089, 2097094, 2097095, 2097144, 2097145, 2097150, 2097151, 266338304, 266338305, 266338310, 266338311, 266338360, 266338361, 266338366, 266338367, 266339264, 266339265, 266339270, 266339271, 266339320, 266339321, 266339326, 266339327, 266370048, 266370049, 266370054, 266370055, 266370104, 266370105, 266370110, 266370111, 266371008, 266371009, 266371014, 266371015, 266371064, 266371065, 266371070, 266371071, 268402688, 268402689, 268402694, 268402695, 268402744, 268402745, 268402750, 268402751, 268403648, 268403649, 268403654, 268403655, 268403704, 268403705, 268403710, 268403711, 268434432, 268434433, 268434438, 268434439, 268434488, 268434489, 268434494, 268434495, 268435392, 268435393, 268435398, 268435399, 268435448, 268435449
Right:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624, 639, 896, 911, 1008, 1023, 16384, 16415, 16864, 16895, 19968, 19999, 20448, 20479, 28672, 28703, 29152, 29183, 32256, 32287, 32736, 32767, 1048576, 1048639, 1050560, 1050623, 1079296, 1079359, 1081280, 1081343, 1277952, 1278015, 1279936, 1279999, 1308672, 1308735, 1310656, 1310719, 1835008, 1835071, 1836992, 1837055, 1865728, 1865791, 1867712, 1867775, 2064384, 2064447, 2066368, 2066431, 2095104, 2095167, 2097088, 2097151, 134217728, 134217855, 134225792, 134225919, 134471680, 134471807, 134479744, 134479871, 138149888, 138150015, 138157952, 138158079, 138403840, 138403967, 138411904, 138412031, 163577856, 163577983, 163585920, 163586047, 163831808, 163831935, 163839872, 163839999, 167510016, 167510143, 167518080, 167518207, 167763968, 167764095, 167772032, 167772159, 234881024, 234881151, 234889088, 234889215, 235134976, 235135103, 235143040, 235143167, 238813184, 238813311, 238821248, 238821375, 239067136, 239067263, 239075200, 239075327, 264241152, 264241279, 264249216, 264249343, 264495104, 264495231, 264503168, 264503295, 268173312, 268173439, 268181376, 268181503, 268427264, 268427391
Bagaimana urutan ini dihasilkan Anda bertanya?
Urutan default dari 1 hingga n=10
adalah:
As integer:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
As binary:
1 10 11 100 101 110 111 1000 1001 1010
Ketika kita meregang ke kiri, biner akan menjadi ini:
1, 110, 111, 111000, 111001, 111110, 111111, 1111000000, 1111000001, 1111000110
Mengapa? Bit terakhir digunakan satu kali; yang terakhir digunakan dua kali; yang kedua terakhir digunakan tiga kali; dll.
So `1010` will become (spaces added as clarification): `1111 000 11 0`
Dan string biner kiri baru ini diubah kembali menjadi bilangan bulat:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966
Sedangkan untuk stretched right, bit pertama digunakan sekali; kedua dua kali; ketiga tiga kali; dll. Seperti ini:
As binary:
1, 100, 111, 100000, 100111, 111000, 111111, 1000000000, 1000001111, 1001110000
As integer:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624
Aturan tantangan:
- † Anda dapat mengambil dua nilai berbeda, tetapi nyatakan mana yang Anda gunakan. Jadi bisa
1/0
,true/false
,null/undefined
,"left"/"right"
, dll n
selalu lebih besar dari 0.- Anda harus mendukung output maksimum setidaknya integer default bahasa Anda (yang 32-bit untuk sebagian besar bahasa).
- Format output fleksibel. Dapat dicetak atau dikembalikan sebagai array / daftar. Dapat dengan spasi, koma, pipa, dan sama sebagai pembatas. Panggilanmu. (Sekali lagi, sebutkan apa yang telah Anda gunakan.)
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
n < 128
, sehingga hasilnya sesuai dengan bilangan bulat 32-bit?Jawaban:
Jelly , 9 byte
Cobalah online!
-1
untuk kiri,1
kanan.sumber
Python 2 ,
10296 byte-1 untuk kiri, 1 untuk kanan
Cobalah online!
sumber
05AB1E ,
1413 byteDisimpan 1 byte berkat Erik the Outgolfer
1
untuk kiri.0
(atau apa pun) untuk benar.Cobalah online!
Penjelasan
sumber
ε
untuk -1:LbεIiRƶRëƶ}JC
ë
. Mendapat masalahif
dalam menerapkan dalam kasus ini :)Sekam , 13 byte
Itu banyak surat bertitik ...
Diambil pertama
b
(0
untuk kiri dan1
kanan), lalun
. Cobalah online!Penjelasan
sumber
b
secara langsung ḣ atau ṫ, menghemat tiga byte :)b
dan meminta solusi saya hanyaI
...Japt ,
191817 bytes0
untuk "kiri",1
untuk "kanan". (Ini benar-benar dapat mengambil nilai-nilai falsey atau kebenaran di tempat mereka 2.)Menguji
Penjelasan
Input bilangan bulat implisit
U
&V
.Buat array bilangan bulat dari 1 hingga
U
inklusif.Lewati setiap fungsi.
Ubah integer saat ini menjadi string biner
Peta di atas string, melewati setiap karakter melalui fungsi, di mana
E
indeks saat ini danF
adalah string penuh.Ulangi karakter saat ini
©
logis AND (&&
) danª
logis OR||
, jadi di sini kami memeriksa apakahV
benar (tidak nol) atau tidak.Jika
V
benar makaX
akan diulangY+1
kali.Jika
V
falsey makaX
diulangY
dikurangi dari (n
) panjang (l
)Z
kali.Konversi kembali ke basis 10 integer.
Secara implisit menampilkan array yang dihasilkan.
sumber
Gaia , 15 byte
Penggunaan
-1
untuk kiri dan1
kanan.Cobalah online!
Penjelasan
sumber
Proton , 79 byte
0
kiri,1
benar.Cobalah online!
Tidak disatukan
sumber
C # (.NET Core) ,
192187 + 23 byte-5 byte terima kasih kepada TheLethalCoder
Hitungan byte juga mencakup:
Cobalah online!
Input:
left
adalahtrue
,right
adalahfalse
Penjelasan:
sumber
using System.Linq;
lebih pendek darinamespace System.Linq{}
, atau saya kehilangan sesuatu di sini? Dahulu kala saya memprogram dalam. NET tbh ..Math
danConvert
keduanya berada diSystem
namespace, jadi perginamespace System.Linq
adalah yang terpendek - memungkinkan untuk menggunakan keduanyaSystem
danSystem.Linq
kelas.Dyalog APL, 23 byte
kiri adalah
1
kanan adalah0
(dilewatkan sebagai argumen fungsi kiri)⍳
adalah generator indeks{
...}¨
terapkan fungsi di kawat gigi untuk setiap item di sebelah kananb←2⊥⍣¯1⊢⍵
b adalah ⍵ disandikan sebagai biner (menggunakan kebalikan dari decode untuk mendapatkan jumlah bit minimum yang diperlukan untuk mewakili⍵
dalam basis 2)⍳≢b
menghasilkan indeks untuk vektor b (≢b
panjang b)⌽⍣⍺
⍺
waktu mundur (digunakan secara kondisional untuk peregangan kiri atau kanan)b/⍨
b direplikasi oleh (mereplikasi bit sesuai indeks (kebalikan))2⊥
decode dari basis 2TryAPL online
sumber
JavaScript (ES6), 131 byte
Ini jauh lebih lama dari jawaban Shaggy , tetapi saya ingin mencoba pendekatan bitwise murni.
Karena batas operasi bitwise JS 32 bit, ini hanya berfungsi untuk n <128 .
Mengambil input dalam sintaks currying
(n)(r)
, di mana r adalah falsy untuk kiri / kebenaran untuk kanan.Diformat dan dikomentari
Demo
Tampilkan cuplikan kode
sumber
JavaScript (ES6), 113 byte
Oh, ini terlalu lama! Inilah yang terjadi ketika Anda menghabiskan hari menulis JavaScript "asli", kiddies; Anda lupa cara bermain golf dengan benar!
Gunakan nilai-nilai yang benar atau salah untuk
b
, denganfalse
menjadi "kiri" dantrue
"benar".Cobalah
sumber
Jelly , 11 byte
Cobalah online!
Argumen # 1:
n
Argumen # 2:
1
untuk kiri,0
untuk kanan.sumber
Retina , 111 byte
Cobalah online! Mengambil nomor dan salah satu
L
atauR
sebagai sufiks (atau pada baris terpisah). Penjelasan:Konversi dari desimal ke unary dan hitung dari 1 ke
n
.Konversi dari unary ke binary.
Bungkus setiap bit
R
danL
karakter sesuai dengan posisinya di baris.Ganti karakter yang relevan
R
atauL
dengan angka berdekatan yang sesuai.Hapus karakter sisa dan konversi dari biner ke desimal.
sumber
1
hinggan
. Bukan hanya angkan
ke-10.JavaScript (ES6),
130127 byte3 byte, terima kasih Kevin
Saya yakin tidak cukup tahu ES6 untuk situs ini, tetapi saya sudah mencoba! Loop melalui setiap angka, dan loop melalui setiap representasi biner untuk nomor itu, ulangi setiap karakter berapa kali dibutuhkan.
sumber
d=>n=>
), seperti dua jawaban JS ES6 lainnya. Juga, saya pikir Anda dapat menyimpan 2 byte lain dengan mengubahk=-1,l=b.length;while(++k<l)s+=b[k].repeat(d?k+1:l-k);
kek=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l+~k);
(mulaik=0
alih-alih-1
, danl-k-1
yang kemudian disingkat menjadil+~k
). Juga, apakah tanda kurung(i).toString(2)
diperlukan?+~k
tampaknya seperti itu harus bekerja, tapi aku tidak bisa mencari tahu, terus menjadi gila. Terima kasih atas tips lainnya!l+~k
itu tidak benar, karena tidakl-k-1
hanyal-k+1
.. Buruk saya. Anda masih dapat golf satu byte dengan memulaik
dari nol meskipun:k=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l-k+1);
.Ruby, 98 byte
sumber
a{r ?a:a.reverse}
diperlukan??
,r?
akan ditafsirkan sebagai nama metode.Java 8, 136 byte
Lambda (kari) dari
Boolean
ke konsumenInteger
. Parameter boolean menunjukkan apakah akan merentangkan ke kiri (nilaitrue
,false
). Output dicetak ke standar keluar, dipisahkan oleh baris baru, dengan baris tambahan tambahan.Lambda yang tidak tersentuh
Cobalah secara Online
Batas
Karena semuanya terakumulasi
int
s, output dibatasi hingga 31 bit. Akibatnya, input dibatasi hingga 7 bit, sehingga input maksimum yang didukung program adalah 127.Penjelasan
Solusi ini membangun setiap nomor yang diregangkan menggunakan operasi bitwise. Lingkaran luar berulang
i
pada angka yang akan diregangkan, dari 1 ke n , dan mencetak nilai yang diregangkan setelah setiap iterasi.while
Lingkaran dalam bertambahs
dengan jumlah biti
, danfor
iterasi berikutnyac
pada setiap posisi bit. Dalam loop itu,d
menghitung hingga berapa kali untuk mengulangi bit saat ini, yang tergantung pada inputl
. Pada setiap langkah,o
bergeser ke kiri dan sedikit yang sesuaii
ditutup dan OR masuk.sumber