Diberikan N, menampilkan istilah ke-N dari urutan tak terbatas ini:
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ... etc.
N dapat diindeks 0 atau 1 diindeks sesuai keinginan Anda.
Misalnya, jika 0-diindeks kemudian masukan 0
, 1
, 2
, 3
, 4
harus menghasilkan output masing-masing -1
, 2
, -2
, 1
, -3
.
Jika 1-diindeks maka input 1
, 2
, 3
, 4
, 5
harus menghasilkan output masing-masing -1
, 2
, -2
, 1
, -3
.
Agar jelas, urutan ini dihasilkan dengan mengambil urutan bilangan bulat positif yang diulang dua kali
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 ...
dan mengatur ulang setiap pasangan angka ganjil untuk mengelilingi angka genap tepat di atasnya
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 9 10 10 9 11 12 12 11 ...
dan akhirnya meniadakan setiap istilah lainnya, dimulai dengan yang pertama
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ...
Kode terpendek dalam byte menang.
1,1,2,2,3,3,4,4,...
tapi ini dia1,2,2,1,3,4,4,3,...
.Jawaban:
Python 2 , 23 byte
Masukan ganjil memberi secara kasar
n/2
, bahkan yang kasar-n/2
. Jadi, saya mulai dengan-n/2+n%2*n
dan tweak dari sana.Cobalah online!
sumber
Mathematica, 29 byte
Fungsi murni mengambil input 1-diindeks. Selain tanda-tanda bolak-balik
(-1)^#
, dua kali urutannya dekat dengan input, perbedaannya adalah 1, 2, 1, -2 secara siklis. Sangat menyenangkan bahwa#~GCD~4
, pembagi input terbesar dan4
, adalah 1, 2, 1, 4 secara siklis; jadi kami hanya mengganti secara manual4->-2
dan menyebutnya sehari. Saya suka pendekatan ini karena ia menghindari sebagian besar perintah Mathematica banyak karakter.sumber
Pip ,
2422 byteMengambil input, 1-diindeks, sebagai argumen baris perintah. Cobalah online atau verifikasi 1-20 .
Penjelasan
Amati bahwa urutan dapat diperoleh dengan menggabungkan tiga urutan lainnya, satu diindeks nol dan yang lain diindeks:
0 0 0 0 2 2 2 2 4 4 4 4
=a//4*2
(0-diindeks);1 2 2 1 1 2 2 1 1 2 2 1
=aBA2|1
, di manaBA
bitwise AND, dan|
logis OR (1-diindeks);-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
=(-1)**a
(1-diindeks).Jika kita mulai dengan
a
1-diindeks, kita dapat menghitung bagian-bagian yang diindeks terlebih dahulu (membaca ekspresi dari kiri ke kanan) dan kemudian mengurangia
untuk bagian yang diindeks 0. Menggunakan variabel builtinv=-1
, kita dapatkanUntuk mencukur dua byte lagi, kita harus menggunakan beberapa trik presedensi-manipulasi. Kami dapat menghilangkan tanda kurung bagian dalam dengan mengganti
+
dengan+:
(setara dengan+=
dalam banyak bahasa). Operator komputasi dan penugasan apa pun memiliki prioritas yang sangat rendah, sehinggaaBA2|1+:--a//4*2
setara dengan(aBA2|1)+:(--a//4*2)
. Pip akan memancarkan peringatan tentang menetapkan sesuatu yang bukan variabel, tetapi hanya jika kita mengaktifkan peringatan.Satu-satunya hal yang lebih diutamakan daripada
:
adalahY
, operator menyentak. * Ini menetapkan nilai operan key
variabel dan melewati itu tidak berubah; sehingga kita bisa menghilangkan tanda kurung luar juga oleh menghentak nilai daripada parenthesizing itu:YaBA2|1+:--a//4*2
.*
P
rint danO
utput memiliki prioritas yang sama denganY
ank, tetapi tidak berguna di sini.sumber
Jelly ,
87 byteIni menggunakan algoritma dari jawaban Python saya , yang ditingkatkan secara signifikan oleh @GB .
Cobalah online!
Bagaimana itu bekerja
sumber
¡
)Java 8, 19 byte
Java 7,
4737 byteJava pertama kali (8) benar-benar bersaing dan lebih pendek dari beberapa jawaban lainnya. Tetap tidak bisa mengalahkan bahasa golf yang sebenarnya seperti Jelly dan sejenisnya, (duhuh .. sungguh mengejutkan ..>.>; P)
Port 0-diindeks dari jawaban Python 2 @Xnor .
-10 byte berkat @GB
Coba di sini.
sumber
Jelly ,
151211 byteCobalah online!
Bagaimana itu bekerja
sumber
RProgN 2 ,
312522 byteDijelaskan
Cobalah online!
sumber
Ruby,
26 2318 byteBerbasis 0
-3 byte mencuri ide -1 ^ n dari Greg Martin , Dennis dan mungkin orang lain, kemudian -5 byte mencuri ide n | 2 dari xnor .
sumber
Ditumpuk ,
3028 byteCobalah online! Mengembalikan fungsi, yang diizinkan per konsensus meta. . Mengambil input dari atas tumpukan.
Menggunakan pendekatan yang sama dengan jawaban RProgN 2 .
Atau, 46 byte. Cobalah online! :
Yang ini menghasilkan kisaran kemudian memilih dan meniadakan anggota yang sesuai.
sumber
Python 2 ,
443327 byteBerkat @GB untuk bermain golf 6 byte!
Cobalah online!
sumber
05AB1E, 8 byte
Cobalah online
Penjelasan
sumber
¹F(
sepertinya mahal untuk "jika aneh, negasi".n
, untuk kekuatan1/n
.Jelly ,
98 byteCobalah online!
-1 terima kasih kepada Dennis . Duh konversi mengambang.
Menggunakan pendekatan xnor's Python 2.
EDIT : > _>
sumber
|2×Ḃ+H~$
menghemat satu byte. tio.run/nexus/jelly#AR0A4v//fDLDl@G4gitIfiT/…CJam , 16 byte
Input berbasis 1.
Cobalah online!
Penjelasan
Berikut ini adalah rincian kode dengan nilai pada tumpukan untuk setiap input dari
1
hingga4
. Beberapa perintah pertama hanya mempengaruhi dua bit paling tidak signifikan ,n-1
setelah itu4
, hal ini hanya berulang secara siklis, dengan hasil bertambah 2, karena separuh.sumber
Perl 6 ,
55 27 2422 byte(Terinspirasi oleh
zipWith
jawaban Haskell )Cobalah
(Terinspirasi oleh beberapa jawaban)
Cobalah
Cobalah
Cobalah
Diperluas:
(Semua berbasis 0)
sumber
Haskell ,
3736 byteCobalah online! Ini adalah fungsi anonim yang mengambil satu angka
n
sebagai argumen dan mengembalikan 0-diindeksn
elemen th urutan.sumber
Haskell, 56 byte
Diindeks 0
sumber
Perl 5 47 + 1 (untuk bendera) = 48 Bytes
Pengiriman Lama 82 Bytes
Jalankan seperti itu:
sumber
print +((
dan menghapus final)
. Dan dua lagi dengan menggunakansay
dan-E
. Dan juga satu lagi dengan melakukan($_%4&1||-1)
alih - alih terner.JavaScript (ES7), 28 byte
1-diindeks. Saya belum melihat jawaban lain jadi saya tidak tahu apakah ini adalah algoritma terbaik, tapi saya kira tidak.
sumber
JavaScript,
2822 byteTerima kasih @ETHproduk untuk bermain golf 6 byte
Cobalah online!
sumber
f=x=>x%2?~x>>1:x/2+x%4-1
berhasil?dc , 98 byte
Astaga, ini adalah jawaban terlama di sini, terutama karena saya menempuh jalur untuk menghasilkan nilai absolut dari setiap elemen dari urutan satu per satu berdasarkan pada rumus rekursif berikut:
kemudian menghasilkan
(-1)^n * a_n
, daripada langsung menghitungn
elemen 'th. Bagaimanapun, ini1
-indeks.Cobalah online!
sumber
R, 38 byte
Penjelasan
sumber
TI-Basic (TI-84 Plus CE), 31 byte
TI-Basic adalah bahasa tokenized dan masing-masing token yang digunakan di sini adalah satu byte, kecuali
remainder(
, yang dua.Ini menggunakan versi 1-diindeks.
Penjelasan:
Ada pola yang berulang setiap empat angka. Dalam versi 1-diindeks, itu adalah: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 untuk nilai input x. Ini dapat direpresentasikan sebagai fungsi yang didefinisikan secara terpisah.
f (x) = - (x + 1) / 2 jika x ≡ 1 mod 4; (x + 1) / 2 jika x ≡ 2 mod 4; - (x + 1) / 2 jika x ≡ 3 mod 4; (x-1) / 2 jika x ≡ 0 mod 4
Karena bagian "x ≡ 1 mod 4" dan "x ≡ 3 mod 4" sama, kita dapat menggabungkannya menjadi "x ≡ 1 mod 2".
Sekarang fungsi piecewise adalah:
f (x) = - (x + 1) / 2 jika x ≡ 1 mod 2; (x + 2) / 2 jika x ≡ 2 mod 4; (x-2) / 2 jika x ≡ 0 mod 4
Di sinilah saya mulai memecahnya menjadi perintah yang sebenarnya. Karena nilainya positif untuk indeks genap dan negatif untuk indeks ganjil, kita dapat menggunakan (-1) ^ x. Namun, dalam TI-Basic
i^(2X
(5 byte) lebih pendek dari(-1)^Ans
(6 byte). Perhatikan bahwa tanda kurung diperlukan karena urutan operasi.Sekarang kita memiliki cara untuk meniadakan input aneh keluar dari jalan, kita beralih ke mod (menambahkan negating kembali nanti). Saya membuat case dari input aneh sebagai default, jadi kita mulai dengan
.5(Ans+1)
.Untuk memperbaiki kasus input genap, cukup tambahkan satu ke nomor di dalam tanda kurung, tetapi hanya ketika x ≡ 0 mod 2. Ini dapat direpresentasikan sebagai
.5(Ans+1+remainder(Ans+1,2))
atau.5(Ans+1+not(remainder(Ans,2)))
, tetapi mereka memiliki jumlah byte yang sama, sehingga tidak masalah yang mana.Untuk memperbaiki kasus multiple-of-4 input, kita perlu mengurangi 3 dari angka di dalam tanda kurung, tetapi juga 1 karena semua kelipatan dari 4 genap, yang akan menambah satu dari langkah kita sebelumnya, jadi sekarang kita miliki
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.Sekarang, cukup tempelkan pada bagian penentu tanda sampai akhir untuk mendapatkan program lengkap.
sumber
Melewati 93, 25 byte
Diindeks nol
Cobalah secara Online!
Nomornya diberikan oleh
((2(n / 4) + 1) + !!((n % 4) % 3)) * (2(n % 2) - 1)
sumber
QBIC , 53 byte
Penjelasan:
sumber
Bijaksana , 19 byte
Cobalah secara Online!
Ini hanyalah port jawaban Jelly @Dennis untuk Wise.
sumber
Q, 52 byte
0 solusi terindeks.
sumber