Diberikan daftar bilangan bulat menghasilkan Perbedaan Maju pada urutan / kedalaman yang ditentukan.
Untuk daftar bilangan bulat:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Perbedaan Forward pada berbagai urutan / kedalaman adalah:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Begitu juga dengan input dari
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Anda akan mengembalikan daftarnya
(-142, 55, 27, 41, -269, 397)
Memasukkan
Input dapat melalui STDIN atau parameter fungsi.
Integer yang menentukan kedalaman untuk kembali. Ini akan menjadi 0 sepanjang daftar minus 1
Daftar bilangan bulat untuk menghitung perbedaan penerusan
Keluaran
Outputnya bisa melalui STDOUT atau dikembalikan oleh fungsi.
Perbedaan penerusan untuk kedalaman yang ditentukan sebagai daftar bilangan bulat
Aturan
Fungsi bawaan dan Pihak Ketiga yang melakukan ini secara langsung tidak diperbolehkan.
Batasan celah standar berlaku.
Kode terpendek menang
-
satu-satunya kata kerja dalam fungsi ini.Python,
6159 byteDi sini kita melakukan pengurangan dengan zipping semua kecuali yang terakhir dari daftar dengan semua kecuali yang pertama dari daftar.
zip(L[1:],L)
setara denganzip(L[1:],L[:-1])
, karenazip
sifat mengambil panjang minimum dari dua daftar:Alternatif yang sama panjangnya (hanya Python 2):
Sayangnya Python 2 tidak memotong bagian akhir daftar, jadi saya tidak bisa melakukannya
map(int.__sub__,L,L[1:])
. Yang menjengkelkan, Python 3 tidak , tetapimap
tidak lagi mengembalikan daftar jadi ini akhirnya menjadi byte lebih banyak (60 byte):Namun, jika kita mengizinkan input menjadi kedalaman diikuti oleh daftar seperti
f(3, 2, 5, 6, 7, 5, 10, 25)
(yaitu kedalaman 3 dan daftar[2, 5, 6, 7, 5, 10, 25]
), maka ini adalah 56 byte :Berikut alternatif lain yang akan sangat mengganggu siapa pun yang melihat ini dalam kode produksi (yang satu ini menghancurkan daftar asli):
sumber
L[1]-L.pop(0)
.Mathematica
23 5723 byteSaran Martin Büttner, memanfaatkan kelicikan pengurangan.
misalnya
Rest@#-Most@#
melakukan pengurangan yang menghasilkan perbedaan.Nest melakukan operasi tersebut beberapa kali, beroperasi selalu pada daftar terbaru.
sumber
Haskell,
4034 byteContoh penggunaan:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
output mana[-142,55,27,41,-269,397]
.Cara kerjanya: berulang kali menghitung perbedaan antara elemen tetangga dan menyimpan hasil antara dalam daftar. Ambil
n
elemen th dari daftar ini.Sunting: @Zgarb menemukan 6 byte untuk disimpan. Luar biasa!
sumber
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 byteFungsi rekursif sederhana, digunakan
map
untuk memindai array danslice
untuk menjatuhkan elemen pertama pada setiap panggilan rekursif.Edit 3 byte yang disimpan, terima kasih @DocMax, saran yang sangat cerdas
Uji di Firefox / konsol FireBug
sumber
p
dan Hemat 3 karakter:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 byte
Mengambil input sebagai larik gaya CJam dan kemudian kedalamannya:
dan mencetak hasilnya sebagai larik gaya CJam.
Uji di sini.
Penjelasan
sumber
Java,
122119 byteContoh Penggunaan: http://ideone.com/ALgYez
3 byte berkat Geobits: v)>
sumber
int
dan hanya menetapkani=e
dengan yang lain.> <>
5350 bytePenggunaan: Mempopulasikan tumpukan (-v dalam python interpreter) dengan kedalaman terlebih dahulu, diikuti oleh bilangan bulat.
Sebagai contoh:
Kembali
Terima kasih kepada Sp3000 untuk bantuannya.
sumber
?!
dan memindahkan beberapa komponen daripada menggunakan0=?
?Prelude ,
95927978 byteFormat input adalah
di mana
N
kedalaman perbedaan danM
jumlah bilangan bulat dalam input. MenambahkanM
diperlukan, karena tidak ada cara bagi Prelude untuk membedakan a0
dari akhir input. Output juga sebagai daftar bilangan bulat yang dipisahkan baris baru. Saya harus mengasumsikan spec Prelude yang sedikit disesuaikan yang kami buat untuk tantangan ini , karena Prelude standar membaca integer sebagai nilai byte, yang membuatnya tidak mungkin untuk memasukkan angka negatif. Pada dasarnya, ini adalah juru bahasa Python denganNUMERIC_INPUT
bendera tambahan .Untuk referensi hanya ada
483837 karakter non-spasi - sisanya hanya diperlukan untuk menyelaraskan kode dengan benar.Penjelasan
Di Prelude, setiap baris adalah "suara" terpisah yang beroperasi pada tumpukannya sendiri. Program ini dieksekusi kolom demi kolom, di mana suara terpisah diambil untuk beroperasi "secara paralel". Semua perintah adalah karakter tunggal, dan tanda kurung adalah loop seperti Brainfuck (yang dimasukkan dan diulang setiap kali bagian atas tumpukan tidak nol). Perhatikan bahwa posisi vertikal tanda kurung tutup tidak relevan - menempatkannya dalam suara yang berbeda masih dianggap cocok dengan tanda kurung pembuka terbaru, dan tumpukan yang diperiksa untuk kondisi loop selalu suara di mana suara
(
muncul. Sekarang ke program ini ...Program ini pada dasarnya dapat dipisahkan menjadi dua bagian. Dua baris terbawah hanya digunakan untuk sebagian besar loop dalam program (kecuali loop utama berakhir
N
), lewat1
bolak-balik. Dua baris teratas berisi loop utama dan perbedaan aktual. Anotasi berikut mengubah kode, jadi saya dapat memberi anotasi pada masing-masing kolom:sumber
Python,
70686759 byteVersi non-golf sebelum saya menjadi rekursif:
sumber
R,
48 39 4644 byteRekursi!
x
adalah jumlah iterasi yang harus dilakukan, dany
merupakan vektor bilangan bulat.if(x)
benar selamax>0
.Recall
memanggil fungsi saat ini tetapi dengan argumen baru.Diff
menampilkan perbedaan antara elemen daftar / vektor berturut-turut.Versi sebelumnya:
sumber
Recall()
.Python,
928786 byteIni golf Python pertamaku. Setiap saran akan dihargai :)
56 byte berkat Sp3000: Dsumber
append
menjadid+=f-e,
. Secara umum, untuk kode-golf Anda tidak perlu menggunakanL.append
karena ini.c,
6855 byteIni mungkin mengambil kebebasan dengan spesifikasi input sedikit. Array int dibangun sedemikian rupa sehingga elemen 0 adalah kedalaman dan elemen 1 hingga (n + 1) adalah elemen daftar input 0 hingga n. Kemudian alamat elemen 1 diteruskan ke fungsi.
Array harus nol diakhiri. Array diedit di tempat.
Misalnya:
http://ideone.com/m5PDgF
sumber
int *l
?Powershell
115111 byteJalankan seperti itu:
Keluaran:
Memindahkan penahan keriting ke tempat yang berbeda memungkinkan ini untuk menampilkan setiap langkah ke jawabannya.
sumber
STATA, 126 byte
Mengharapkan input sebagai integer yang mewakili kedalaman, diikuti oleh daftar integer yang dipisahkan spasi, keduanya diberikan melalui prompt standar. Output adalah daftar integer yang dipisahkan oleh baris baru.
Pertama itu mengkonversi daftar bilangan bulat (yang dilihat sebagai 1 string panjang) menjadi daftar variabel lokal yang namanya 1,2,3, ... Kemudian menghitung perbedaan maju dengan menetapkan nilai variabel lokal y menjadi nilai variabel lokal y + 1 dikurangi nilai variabel lokal y (yaitu 18-10 = 8), yang menimpa nilai yang ada hanya setelah digunakan. Itu melakukan ini $ a (nilai variabel global a) kali. Kemudian akan ditampilkan nilai setiap variabel lokal, 1 pada satu waktu.
sumber
T-SQL, Terlalu Banyak :)
Ketika saya pertama kali melihat masalah ini, saya bertanya-tanya apakah ada cara untuk melakukan ini dalam kueri. Meskipun sepele untuk sebagian besar bahasa, tidak terlalu banyak untuk query SQL.
Input masuk ke variabel @ (untuk kedalaman) dan @L untuk daftar bilangan bulat. @ L adalah tipe tabel yang ditentukan pengguna
Pengaturan input
Permintaan dengan beberapa komentar
Hasil
sumber
Japt
-h
,175 byte12 byte disimpan berkat @Shaggy
Cobalah online!
sumber
äÏ-X
denganän
keduanya untuk menghemat 2 byte lebih banyak.SmileBASIC, 76 byte
Akhirnya alasan untuk menggunakan
ARYOP
!sumber
Clojure, 47 byte
Rekursi sederhana pada fungsi anonim. Anda menghemat 1 byte jika urutan argumen bertukar seperti sekarang
%2
terjadi lebih sering daripada%
.sumber
Jelly , 2 byte
Cobalah online!
Penjelasan
Jawaban yang sangat mudah: P
sumber
Japt , 7 byte
Beberapa alternatif yang saya sediakan bagi Luis untuk solusinya .
Cobalah
10 byte
Cobalah
sumber