Memasukkan:
Integer n
yang >=0
atau >=1
( f(0)
opsional)
Keluaran:
Angka n
'th dalam urutan di bawah ini, ATAU urutan ke atas dan termasuk nomor n
' th.
Urutan:
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99
Bagaimana urutan ini dibangun?
f(n=0) = 0
(opsional)
f(n=1) = f(0) + n
atau lainnya f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
.
Atau dalam pseudo-code:
function f(integer n){
Integer result = 0
Integer i = 1
Loop as long as i is smaller than or equal to n
{
if i modulo-4 is 1:
result = result plus i
if i modulo-4 is 2 instead:
result = result minus i
if i modulo-4 is 3 instead:
result = result multiplied with i
if i modulo-4 is 0 instead:
result = result integer/floor-divided with i
i = i plus 1
}
return result
}
Tetapi seperti yang Anda perhatikan ada dua pola dalam urutan:
0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,...
,1, ,-3, ,5, ,-7, ,9, ,-11, ,13, ,-15, ,17, ,-19,...
jadi setiap pendekatan lain yang menghasilkan urutan yang sama tentu saja baik-baik saja juga.
Aturan tantangan:
- Input 0-diindeks dan 1-diindeks akan menghasilkan hasil yang sama (itulah sebabnya
f(0)
opsional untuk input 0-diindeks jika Anda ingin memasukkannya). - Anda diizinkan untuk menampilkan
n
nomor ke-5 dari urutan ini. Atau seluruh urutan ke atas dan termasukn
nomor ke '. (Jadif(5)
bisa menghasilkan salah satu5
atau0,1,-1,-3,0,5
.)- Jika Anda memilih untuk menampilkan urutan hingga dan termasuk nomor
n
'th, format output fleksibel. Dapat berupa string daftar / larik, koma / spasi / baris baru atau dicetak ke STDOUT, dll.
- Jika Anda memilih untuk menampilkan urutan hingga dan termasuk nomor
- Divide (
/
) adalah pembagian integer / floor, yang membulatkan ke arah 0 (tidak menuju infinity negatif seperti halnya dalam beberapa bahasa).
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 pun'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji tambahan di atas n=100
:
Input Output
1000 0
100000 0
123 -123
1234 -1
12345 12345
123456 0
Jawaban:
JavaScript (ES6), 19 byte
Cobalah online!
Bukti
Mari kita asumsikan bahwa kita memiliki hubungan berikut untuk beberapa n beberapa dari 4. hubungan ini sepele diverifikasi untuk istilah pertama urutan.
Dan biarkan N = n + 4 . Kemudian, menurut definisi:
Yang, dengan induksi matematis, membuktikan bahwa relasi berlaku untuk sembarang N dari 4 .
sumber
n%4
setelah itu sehingga bekerja dengan angka lebih besar dari 32-bit.05AB1E , 8 byte
Keluarkan
nth
jumlahnyaCobalah online!
05AB1E , 14 byte
Menghasilkan daftar angka hingga N menggunakan pola dalam urutan
Cobalah online!
Penjelasan
Contoh menggunakan N = 7
sumber
Python 2 , 25 byte
Jawaban Port of Arnauld:
Cobalah online!
Solusi naif:
Python 3 ,
5049 byteCobalah online!
Python 2 ,
78777658575352 byteCobalah online!
Digunakan banyak byte pada
int
, karena lantai python membelah, dan tidak ke arah0
, seperti pada pertanyaan.sumber
J , 12 byte
Jawaban Port of Arnauld:
Cobalah online!
J , 28 byte
Solusi naif:
Menghasilkan angka ke-n
Cobalah online!
sumber
TIS
-n
2
1
, 123 byteKeluarkan
n
nomor ke untuk0 <= n <= 999
. (Batas atas adalah karena keterbatasan bahasa).Cobalah online!
TIS
-n
2
1
, 124 byteKeluarkan
n
nomor ke untuk0 <= n <= 999
. (Batas atas adalah karena keterbatasan bahasa). Beberapan
dapat disediakan, dipisahkan oleh spasi putih.Cobalah online!
TIS
-n
3
1
, 192 byteMenghasilkan nilai untuk
0..n
untuk0 <= n <= 999
. (Batas atas adalah karena keterbatasan bahasa).Cobalah online!
Semua menggunakan angka I / O (
-n
bendera). Dua solusi pertama menggunakan dua node komputasi, satu diposisikan di atas yang lain. Yang ketiga memiliki setumpuk tiga node.Untuk dua solusi pertama, simpul atas membaca input, mengirimkan nomor asli aktif, lalu berulang kali mengurangi 4 hingga kami menjadi negatif, kemudian menambahkan 5 untuk indeks untuk tabel lompatan kami. Ini setara dengan
(n % 4) + 1
.Solusi ketiga membagi tugas ini menjadi dua node; yang paling atas hanya mengulangi batas sampai akhir waktu, dan simpul tengah menghitung secara paralel indeks (dibandingkan dengan batas itu) dan modulo seperti di atas.
Node yang lebih rendah dari ketiga solusi adalah sama; ia memiliki meja lompat, dan di sinilah keajaiban terjadi. Kami menyimpan nomor asli di
ACC
, makaJRO
(mungkin J UMP R elative O FFset) ke depan oleh1
,2
,3
, atau4
, tergantung pada apa node di atas mengatakan.Bekerja mundur:
4
akan a )NEG
makanACC
, dan b )ACC
turun untuk output.3
akan dimasukkan1
ke dalamACC
, kemudian melakukan langkah4
- langkah a dan4
b .2
akan langsung melompat ke langkah4
b .1
akanSUB
proselytingACC
off sendiri (efektif zeroingACC
), kemudian melakukan langkah2
, yang melompat ke4
b .sumber
C (gcc) , 62 byte
Cobalah online!
sumber
f(n){n=n%2>0?n*(2-n%4):n%4/-2;}
Saya akan menambahkannya sebagai jawaban kedua, karena saya juga menyukai pendekatan rekursif Anda. :)Jelly , 8 byte
Cobalah online!
-1 Terima kasih kepada Lynn .
Apa yang dilakukan orang lain (port solusi Arnauld), mendukung
0
.Jelly , 17 byte
Cobalah online!
0
tidak didukung.sumber
Java (JDK 10) , 25 byte
Cobalah online!
Lebih pendek dari algoritma pesaing dalam bahasa lain dengan 28 byte
Cobalah online!
sumber
Retina , 46 byte
Cobalah online!Penjelasan:
Konversikan ke unary.
Konversi kembali ke desimal, tetapi pergi
n%4+1
garis bawah.Dalam hal itu adalah 4, maka hasilnya adalah
-n
.Kasus 3:
-1
Kasus 2:
n
Kasus 1:
0
sumber
Haskell , 50 byte
Cobalah online!
Solusi Arnauld, porting ke Haskell adalah 23 byte:
sumber
APL (Dyalog Classic) ,
2212 byte10 byte besar disimpan karena komentar Erik the Outgolfer. Terima kasih!
Cobalah online!
Menghasilkan angka ke-n
Saya tidak tahu APL, saya hanya mencoba untuk membuat port J solusi Arnauld saya berfungsi di Dyalog APL.
sumber
(0,⍵,¯1,-⍵)
dengan(0⍵¯1,-⍵)
. 2) Anda dapat menghapus1+
dengan mengasumsikan bahwa⎕IO
variabel sistem ditugaskan0
(ya, itu diizinkan). 3) Kami biasanya tidak menghitungf←
bagian ketika mengirimkan fungsi. 4) Anda dapat menggunakan⊃
fungsi alih-alih[]
mengindeks. Semua bersama-sama membentuk ini:⎕IO←0
(jangan hitung ini){(4|⍵)⊃0⍵¯1,-⍵}
4∘|⊃0,⊢,¯1,-
.4∘|⊃0,⊢,¯1,-
persis seperti apa solusi J saya4&|{0,],_1,-
akan terlihat seperti di APL. Terima kasih lagi!Cubix ,
2019 byteCobalah online!
Port pendekatan yang sama dengan cubix.
Di sebuah kubus:
Bit pertama
^Iu:n>s1ns:u0s
membangun tumpukan dan kemudian3at
menyalin item yang sesuai ke TOS, laluO
mengeluarkan dan@
mengakhiri program.sumber
Ruang putih,
8483 byteHuruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Cobalah online (dengan spasi, tab, dan baris baru saja).
Port dari jawaban JavaScript @Arnauld .
Penjelasan (contoh input
n=7
):Berhenti dengan kesalahan: Keluar tidak ditentukan.
sumber