Delta Terbalik dari Array
Tugas Anda adalah, diberi array integer 32 bit yang ditandatangani, kompilasi ulang dengan delta kebalikannya. Misalnya, daftarnya
1 3 4 2 8
memegang delta:
2 1 -2 6
yang kemudian dinegasikan, menghasilkan:
-2 -1 2 -6
dan dikompilasi ulang, menghasilkan:
1 -1 -2 0 -6
sebagai hasil akhir.
Input output
Anda akan diberikan daftar / array / tabel / tuple / stack / dll. bilangan bulat yang ditandatangani sebagai input melalui metode input standar apa pun.
Anda harus mengeluarkan data yang dimodifikasi sekali lagi dalam bentuk apa pun yang dapat diterima, mengikuti metode inversi delta di atas.
Anda akan menerima input N di 0 < N < 10
mana setiap angka berada dalam kisaran-1000 < X < 1000
Uji Kasus
5 6 7 8 -> 5 4 3 2
1 3 4 2 8 -> 1 -1 -2 0 -6
32 18 25 192 199 -> 32 46 39 -128 -135
Catatan
- Anda tidak terbatas pada metode berbasis delta: jika Anda dapat menemukan metode yang lebih mudah (yang seharusnya tidak terlalu sulit) , Anda bebas untuk menggunakannya.
- Seperti yang dinyatakan di atas, Anda akan selalu menerima setidaknya 1 input, dan tidak lebih dari 9.
- Angka pertama dari output harus selalu menjadi angka pertama dari input, jika ini tidak terjadi, metode Anda salah.
- Hanya Output Input Standar yang diterima
- Celah standar berlaku
- Ini adalah kode-golf , jadi byte-count terendah menang!
- Selamat bersenang-senang!
Kami punya pemenang.
Dennis 's Jelly Answer di Tiny 3 Bytes telah membawa pulang emas, karena fakta bahwa saya di bawah kesan itu tidak dapat dikalahkan.
Saya agak kecewa saya tidak bisa melihat jawaban berdasarkan spesifikasi asli, namun, saya kemudian dapat memberi hadiah pada hal itu.
Jawaban:
Jelly ,
73 byteCobalah online!
Latar Belakang
Delta (a, b, c, d) adalah b - a , c - b , dan d - c . Secara kumulatif mengurangi (a, b - a, c - b, d - c) dengan mengurangi hasil a - (b - a) = 2a - b , 2a - b - (c - b) = 2a - c , dan 2a - c - (d - c) = 2a - d , jadi hasil yang benar adalah (2a - a, 2a - b, 2a - c, 2a - d) .
Bagaimana itu bekerja
sumber
Python 2, 30 byte
Cobalah Ideone .
Bagaimana itu bekerja
Delta (a, b, c, d) adalah b - a , c - b , dan d - c . Secara kumulatif mengurangi (a, b - a, c - b, d - c) dengan mengurangi hasil a - (b - a) = 2a - b , 2a - b - (c - b) = 2a - c , dan 2a - c - (d - c) = 2a - d , jadi hasil yang benar adalah (2a - a, 2a - b, 2a - c, 2a - d) .
sumber
Mathematica, 8 byte
Fungsi tanpa nama mengambil jumlah argumen yang tidak ditentukan. Ini menggunakan cara "mudah": meniadakan seluruh daftar dan menambahkan dua kali elemen pertama (asli).
Dipanggil misalnya suka
2#-{##}&[1,3,4,2,8]
; mengembalikan daftar like{1,-1,-2,0,-6}
.sumber
JavaScript (ES6), 21
Thx @Dennis
sumber
05AB1E , 4 byte
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Python, 44 byte
Ini menggunakan "Metode yang lebih mudah".
sumber
Pyth, 5 byte
Penerjemah Online!
sumber
R,
231817 byteauto-vectorisation dan cetak default untuk penyelamatan!
sumber
2*x[1]-x
?Ruby, 23 byte
Tidak terlalu orisinal.
sumber
Perl 6 ,
4016 byteDiperluas:
sumber
Brain-Flak , 76 Bytes
Cobalah secara Online!
Penjelasan:
sumber
Haskell,
2019 byteSolusi yang sama seperti Dennis, terima kasih atas ide Anda
2a - x
.Disimpan satu byte berkat Christian Severs.
sumber
f(x:r)=x:map(2*x-)r
x
di depan.Pyke,
54 byteCoba di sini!
sumber
PHP, 48 byte
Menggunakan teknik dari Dennis. Gunakan seperti:
Versi non-Dennis 55 byte:
sumber
a&
bukannya''<
dan dua byte dengan_
sebagai gantinya' '
.APL, 8 byte
Penjelasan:
Kasus uji:
sumber
Labirin , 34 byte
Cobalah online!
Menggunakan @Dennis 's
(2a - a, 2a - b, 2a - c, 2a - d)
pendekatan.Ubin kuning untuk aliran kontrol. Dalam bahasa pemrograman 2D ini, program dimulai pada ubin paling kiri atas yang bergerak ke timur untuk memulai. Di persimpangan, arah ditentukan oleh tanda bagian atas tumpukan utama. Ubin kosong adalah dinding.
hijau
Bagian ini menyimpan 2a ke tumpukan pembantu.
?
Dapatkan nomor pertama dan dorong ke atas tumpukan utama:
Gandakan bagian atas tumpukan_2
Dorong dua ke atas tumpukan*
Popy
, popx
, pushx*y
}
Pindahkan bagian atas tumpukan utama ke bagian atas tumpukan tambahan._
Tekan nol ke atas tumpukanjeruk
Bagian ini mengurangi 2a dari angka saat ini, meniadakan hasil, menampilkan hasilnya, mendapatkan karakter berikutnya (delimeter), keluar jika EOF, mengeluarkan baris baru, mendapatkan nomor berikutnya.
"
Noop. Jika datang dari utara, bagian atas tumpukan akan menjadi nol dan program akan berlanjut ke selatan. Jika datang dari barat, bagian atas tumpukan akan menjadi satu dan program akan berbelok ke kanan (melanjutkan ke selatan);
Buang bagian atas tumpukan. Karena nol atau satu hanya digunakan untuk aliran kontrol, kita perlu membuangnya{
Pindahkan bagian atas tumpukan pembantu (2a) ke bagian atas tumpukan utama:
Gandakan bagian atas tumpukan utama}
Pindahkan bagian atas tumpukan utama ke bagian atas tumpukan tambahan-
Popy
, popx
, pushx-y
\`` Negate the top of the stack. This and the previous three operations have the effect of
- (x-2a) = 2a-x`!
Pop bagian atas tumpukan dan output sebagai angka,
Tekan karakter berikutnya (yang akan menjadi pembatas) atau negatif jika EOF)
Tambahkan bagian atas tumpukan. Jika karakter terakhir adalah EOF, maka bagian atas tumpukan sekarang akan menjadi nol dan program akan terus lurus ke@
dan keluar. Jika karakter terakhir adalah delimeter, maka bagian atas tumpukan akan positif menyebabkan program berbelok ke kanan dan terus ke timur ke\
\
Keluarkan baris baru?
Dapatkan nomor selanjutnya_1
Dorong satu ke atas tumpukan untuk berbelok ke kanan di persimpangansumber
Labirin , 24 byte
Format input dan output adalah daftar yang terpisah baris (meskipun format input sebenarnya jauh lebih fleksibel). Program berakhir dengan kesalahan.
Cobalah online!
Saya punya dua solusi lain pada hitungan byte ini, yang bekerja pada dasarnya sama tetapi menggunakan aliran kontrol yang agak berbeda.
Penjelasan
Instruksi penunjuk (IP) mulai bergerak ke timur di sepanjang baris pertama, tetapi semua perintah sebelum pada
?
dasarnya tidak ada-ops di negara global, karena kita tidak menggunakan perintah stack depth di mana saja. Jadi kodenya benar - benar dimulai dari?
barat, karena IP berbalik ketika menyentuh jalan buntu.Karenanya kode tersebut dimulai dengan sedikit kode linear berikut:
Ini cukup membuat kami dengan salinan
2a
untuk menggunakan[2a - a, 2a - b, 2a - c, ...]
formula.Kita sekarang memasuki loop utama program, menggunakan trik yang cukup standar untuk mengulang melalui satu baris kode:
Perhatikan bahwa tumpukan akan kosong setiap kali kita menekan tombol
<
sehingga kita tahu kita akan mendapatkan nol di sana. The<
kemudian berputar seluruh baris kiri, mengambil IP dengan itu, jadi kami mendapatkan ini:IP kemudian harus bergerak ke kiri, di mana
>
menggeser garis kembali ke tempat asalnya (untuk mempersiapkannya untuk iterasi berikutnya). Kemudian garis dieksekusi dari kanan ke kiri, sehingga iterasi loop tunggal adalah ini:Tangkapan ketika bekerja dengan loop dari jenis ini adalah bahwa Anda tidak dapat bekerja dengan segala bentuk eksekusi bersyarat, karena Labyrinth tidak memiliki cara untuk melewati kode. Karenanya, kami akan menghentikan program dengan pembagian nol ketika kami menekan EOF. Berikut ini adalah rincian dari setiap iterasi loop.
sumber
C ++ 14, 36 byte
Sebagai lambda tanpa nama yang memodifikasi inputnya:
Menggunakan teknik dari Dennis. Bekerja untuk wadah seperti
int[]
atauvector<int>
.Pemakaian:
sumber
CJam, 16 byte
Format input:
[1 2 3 4]
. Menggunakan formula yang mudah.Penjelasan:
Maaf tidak ada tautan tes. Saya kira SE tidak suka tautannya dengan tanda kurung di dalamnya.
sumber
Pushy , 9 byte
Berikan argumen sebagai comma-dipisahkan pada baris cmd:
$ pushy invdeltas.pshy 1,3,4,2,8
. Inilah rinciannya, dengan contoh tumpukan:Catatan: ini bisa 8 byte jika output mundur dibolehkan:
@&2*K~-_
sumber
Perl, 26 + 3 (
-pla
bendera) = 29 byteatau
Menggunakan:
sumber
Dyalog APL , 5 byte
-+2×⊃
ini adalah 5-kereta, itu diurai seperti dua kereta 3 bersarang ("garpu"):
-+(2×⊃)
berbunyi seperti: negasi (
-
) dari seluruh array plus (+
) dua kali (2×
) elemen pertama (⊃
)sumber
ised, 11 byte
Doa:
ised --l 'file with input.txt' '2*$1_0-$1
(sunting: dikoreksi dengan mencuri aljabar dari Dennis)
sumber
Bertanya-tanya , 17 byte
Tidak yakin mengapa saya tidak memposting ini sebelumnya. Pemakaian:
Lebih mudah dibaca:
sumber