Urutan berisi representasi desimal dari angka-angka biner dari bentuk 10101...
:, di mana istilah ke-n memiliki n bit.
Urutannya mungkin paling mudah untuk dijelaskan dengan hanya menunjukkan hubungan antara representasi biner dan desimal angka:
0 -> 0
1 -> 1
10 -> 2
101 -> 5
1010 -> 10
10101 -> 21
101010 -> 42
Tantangan:
Ambil integer input n
, dan kembalikan angka n pertama dalam urutan. Anda dapat memilih untuk memiliki urutan 0-diindeks atau 1-diindeks.
Kasus uji:
n = 1 <- 1-indexed
0
n = 18
0, 1, 2, 5, 10, 21, 42, 85, 170, 341, 682, 1365, 2730, 5461, 10922, 21845, 43690, 87381
Penjelasan didorong, seperti biasa.
Ini adalah OEIS A000975 .
[85,[42,[21,[10,[5,[2,[1,0]]]]]]]
?Jawaban:
Python 2 , 36 byte
Cobalah online! Penjelasan: Representasi biner dari adalah sehingga ia tinggal mengalikannya dengan kekuatan 2 yang sesuai dan mengambil bagian integer.23
0.101010101...
sumber
05AB1E , 4 byte
2 byte disimpan menggunakan trik Neil 2/3
Cobalah online!
Penjelasan
05AB1E , 6 byte
Cobalah online!
Penjelasan
sumber
Jelly ,
...4 byteTerima kasih mil untuk -1 byte!
Cobalah online!
Penjelasan:
Jelly , 4 byte
Versi Jonathan Allan.
Cobalah online!
Versi yang didasarkan pada trik Neil 2/3 menghasilkan 5 byte, lihat riwayat revisi.
sumber
ḶḂḄƤ
awalan cepat dibuat untuk iniḶ€ḂḄ
juga akan berfungsi.MATL , 5 byte
Berdasarkan jawaban Neil .
Penjelasan
Cobalah online!
MATL , 9 byte
Cobalah online!
Penjelasan
sumber
Python 2 ,
453736 byte-3 byte terima kasih kepada pengguna202729
-1 byte berkat mathmandan
Cobalah online!
sumber
s
adalah sama dengan menambahkans
ke dirinya sendiri, jadi saya percaya Anda bisa lakukans+=s+~s%2
untuk menghemat satu byte.Python 3,
6861544843 byteTerima kasih kepada user202729 untuk membantu menghemat 19 byte dan ovs karena membantu menghemat 6 byte.
Cobalah secara Online
sumber
x == 0
setara dengannot x
jikax
adalah bilangan bulat, swap operan (yaitu,x if c else y
=y if not c else x
) akan menghemat lebih banyak byte.i%2
dan menggunakan1-r%2
sebagai gantinyai
.Sekam , 7 byte
Cobalah online!
Berbasis 1, jadi input n memberikan hasil pertama n .
Penjelasan
sumber
APL (Dyalog Unicode) , 11 byte SBCS
Diasumsikan
⎕IO
( I ndex O rigin)0
, yang merupakan default pada banyak sistem. Fungsi awalan diam-diam anonim. 1-diindeks.Cobalah online!
⍳
ɩ ndices 0… n − 1(
...)¨
terapkan fungsi diam-diam berikut untuk masing-masing⍴∘1 0
cyclically membentuk kembali daftar[1,0]
dengan panjang itu2⊥
mengkonversi dari basis-2 (biner) ke angka normalsumber
Perl
v5.10
-n
, 24 +1 byte-3 byte terima kasih kepada Nahuel Fouilleul !
Cobalah online!
Logikanya sama dengan versi Ruby saya, tetapi lebih pendek karena perl lebih ringkas. Untuk beberapa alasan aneh,
print
tidak akan melakukan pemisah (sialan!), Jadi saya harus menggunakansay
dariv5.10;
agar menjalankan ini, saya tidak yakin bagaimana untuk mencetak ini, jadi saya meninggalkannya untuk sekarang ?. ..Penjelasan
sumber
-n
) = 28 byte, karena untuk menjalankan perl satu-liner, orang harus menggunakan-e
dan menggunakan 5.10 Anda hanya perlu menggunakan-E
, yang panjangnya sama$|--
bukan($.^=1)
Haskell , 33 byte
Cobalah online!
sumber
APL (Dyalog) , 7 byte
Cobalah online!
APL (Dyalog) , 11 byte
Cobalah online!
Penggunaan
⎕IO←0
.sumber
⎕IO←0
(tapi klaim itu 1-diindeks!) Dan ubah0,
ke1+
:(2⊥2|⍳)¨1+⍳
C ,
81 5559 byte1 diindeks.
Program lengkap, kurang golf:
Cobalah online!
EDIT 2: Saya berada di bawah asumsi bahwa fungsi tidak perlu dapat digunakan kembali sekarang ketika saya memikirkannya, masuk akal jika mereka harus dapat digunakan kembali: P
EDIT: Saya di bawah kesalahpahaman bahwa saya harus memasukkan seluruh program dalam jawaban, ternyata saya hanya membutuhkan fungsi yang melakukannya. Itu bagus.
Saya cukup yakin saya bisa mencukur beberapa byte di sana-sini. Saya sudah menggunakan beberapa trik. Sebagian besar dari program ini didedikasikan untuk mendapatkan argumen dan mengubahnya menjadi sebuah int. Ini golf kode pertamaku. Jika saya melakukan kesalahan, beri tahu saya: P
sumber
i++
dan mengubahi&1
kei++&1
. Juga, meskipun sebagai variabel globali
danj
diinisialisasi ke nol pada awalnya, mereka perlu diinisialisasi di dalam fungsi, karena pengiriman fungsi harus dapat digunakan kembali .i,j;f(c){for(i=j=0;i<c;)printf("%d ",j+=j+i++%2);}
Cobalah secara online!Haskell ,
47405349444034 byte-4 byte terima kasih kepada pengguna202729
-6 byte terima kasih kepada Laikoni
Cobalah online!
sumber
otherwise
dengan eg1>0
(otherwise == True
)Ruby , 26 byte
Cobalah online!
Mengalahkan semua jawaban ruby yang lebih tua.
Penjelasan
1/3
dalam binary terlihat seperti0.01010101...
, jadi Jika Anda mengalikannya dengan kekuatan dua, Anda mendapatkan:Tapi Ruby memberi angka pada divisi int, memberi saya urutan yang saya butuhkan.
sumber
J , 9 byte
Bagaimana itu bekerja?
i.
- daftar 0..n-12|
- daftar item mod 2\
- semua awalan#.
- ke desimal[:
- tutup garpu (karena saya memiliki angka genap (4) dari kata kerja)Cobalah online!
sumber
Retina , 28 byte
Cobalah online!
Berbasis 0, jadi input n memberikan hasil pertama n + 1 .
Penjelasan
Menggunakan rekursi dari OEIS:
Mari kita pergi melalui program:
Ini adalah tahap konstan: membuang input dan mengatur string yang bekerja ke
0
, nilai awal dari urutan. The)
membungkus tahap ini dalam kelompok. Grup itu sendiri tidak melakukan apa-apa, tetapi hampir setiap tahap (termasuk tahap grup) mencatat hasilnya dalam sebuah log, dan kita akan membutuhkan dua salinan0
log tersebut agar program dapat berfungsi.Ada banyak konfigurasi di sini:
"$+"+
membungkus panggung dalam satu lingkaran. Ini"$+"
diperlakukan sebagai substitusi, dan$+
mengacu pada input program, yaitu n . Ini berarti bahwa loop dijalankan n kali.Kemudian
¶<
bungkus setiap iterasi dalam tahap output, yang mencetak input stage dengan trafeed linefeed (jadi iterasi pertama mencetak nol, iterasi kedua mencetak hasil iterasi pertama dan seterusnya).Tahap itu sendiri menggantikan seluruh string kerja dengan substitusi pada baris terakhir. Yang itu menggunakan kurung penutup implisit dan argumen implisit untuk operator pengulangan
*
, jadi itu sebenarnya kependekan dari:Barang-barang di dalam tanda kurung dapat dipecah menjadi tiga bagian:
$&*_
: memberikan string dari (n-1)_
s._
: memberikan satu_
.2*$-1*_
: memberikan string 2 * a (n-1)_
. The$-1
mengacu pada hasil kedua dari belakang di log hasil, yaitu iterasi lingkaran sebelum terakhir. Itu sebabnya kami perlu menyalin nol pada log untuk memulai, jika tidak, ini akan merujuk pada input program pada iterasi pertama.Kemudian
$.(…)
mengukur panjang string yang dihasilkan. Dengan kata lain, kami telah menghitunga(n) = a(n-1) + 1 + 2*a(n-2)
dengan melalui unary (tidak benar-benar:$.(…)
malas dan tidak benar-benar mengevaluasi kontennya jika dapat menentukan panjang yang dihasilkan secara langsung melalui aritmatika, jadi ini bahkan cukup efisien).Hasil iterasi loop akhir (elemen n + 1 dari urutan) dicetak karena output implisit Retina di akhir program.
sumber
Brain-Flak , 36 byte
Cobalah online!
Penjelasan:
Angka berikutnya dalam urutan diperoleh oleh
n*2+1
ataun*2+0
.sumber
Ruby
42 41 43 41 37 35 31 3330 byte-2 byte terima kasih kepada Unihedron
-3 byte berkat GB
Cobalah online!
sumber
->x{a=0;x.times{a-=~a+p(a)%2}}
> <> , 22 + 3 (-v flag) byte
Cobalah online!
Penjelasan
Tumpukan diinisialisasi dengan penghitung lingkaran.
sumber
Java 8,
115818052 bytePort of @Neil 's Python 2 menjawab .
1-diindeks dan dikeluarkan secara langsung, masing-masing nilai pada baris yang terpisah.
Penjelasan:
Cobalah online.
Jawaban 80 byte lama:
Input 1-diindeks dan
String
output terbatas-ruangPenjelasan:
Cobalah online.
sumber
Perl 6 ,
35 30 27 2520 byteCobalah (35)
Cobalah (30)
Cobalah (30)
Cobalah (27)
Cobalah (25)
Cobalah (20)
Diperluas:
sumber
Python 2 , 33 byte
Cobalah online!
Python 2 , 34 byte
Cobalah online!
Kembali dalam urutan terbalik.
sumber
C,
4746 byteAkumulator
a
dimulai dengan nol. Pada setiap langkah, kami menggandakannya (a+=a
) dan menambahkannya jika bit terkecil sebelumnya yang signifikan adalah nol (!(a%2)
, atau setara,-(~a)%2
).Program uji
Hasil
sumber
Japt ,
10976 byteSemua diturunkan secara independen dari solusi lain.
1-diindeks.
Cobalah
Penjelasan
Cobalah
Versi 7 byte
Cobalah
Versi 9 byte
Cobalah
sumber
Haskell , 52 byte
Cobalah online!
sumber
MATL , 7 byte
Cobalah online!
Penjelasan:
Outputnya adalah
0, 1, 2, 5 ...
jikaP
ditambahkan ke end (flip
), membuatnya 8 byte.sumber
&+
Ruby
-n
,3230 + 1 byteKarena kita benar-benar memiliki 1 jalur input,
$.
nyaman bagi Tuhan!EDIT: Saya kagum bahwa saya berhasil mengalahkan diri sendiri, tetapi tampaknya menggunakan
-n
yang dianggap sebagai 1 (dengan aturan 2 dalam kondisi khusus default , karena Ruby dapat dijalankan denganruby -e 'full program'
( dengan demikian-n
adalah 1) semua contohgets
yang hanya digunakan sekali dapat golf di bawah 1 char dengan cara ini; saya percaya ini adalah tonggak untuk ruby, tolong angkat bicara jika Anda tidak setuju dengan kereta pemikiran ini sebelum saya berulang kali menggunakannya kembali di masa depan)Cobalah online!
Penjelasan
sumber
AWK
a=0
, 31 byteCobalah online!
Menggunakan rumus yang dicuri tanpa malu-malu dari jawaban Ruby lainnya ini.
Meskipun tidak memiliki
a=0
akan berfungsi (awk memperlakukan "kosong" sebagai 0), elemen pertama dari 0 tidak akan dicetak dan sebaliknya menjadiempty
garis, yang sementara saya berpendapat adalah output yang valid mungkin tidak akan berlalu, jadi adaa=0
yang bisa dimasukkan sebagai argumen baris perintah.sumber
C, 52 byte
1-diindeks
Cobalah online!
sumber
brainfuck , 40 byte
Cobalah online!
Diindeks 0. Input sebagai kode char, output sebagai unary dengan byte nol memisahkan serangkaian kode char 1s. Mengasumsikan sel 8-bit kecuali jika Anda ingin memasukkan lebih dari 255. Mengasumsikan sel negatif, meskipun ini dapat diperbaiki dengan mengorbankan beberapa byte.
Sebelumnya, 50 byte
Cobalah online!
Input sebagai kode char, output sebagai kode char. 1-diindeks. Mungkin bisa bermain golf sedikit.
@ Unihedron menunjukkan saya lupa untuk menentukan bahwa ini membutuhkan sel berukuran tak terbatas, jika tidak, nomor 8 berada di urutan teratas.
sumber