Dalam matematika, salah satu cara untuk mencari tahu apa jenis hubungan yang diberikan (linear, kuadratik, dll) adalah menghitung perbedaan. Untuk melakukannya, Anda mengambil daftar nilai y yang selisih antara nilai x koresponden sama, dan kurangi masing-masing dari angka di atasnya, buat daftar angka yang lebih pendek dari daftar sebelumnya. Jika daftar yang dihasilkan sepenuhnya terdiri dari angka yang sama, maka hubungannya memiliki perbedaan 1 (itu linier). Jika tidak identik, maka Anda ulangi proses pada daftar baru. Jika mereka sekarang identik, hubungannya memiliki perbedaan 2 (kuadrat). Jika tidak identik, Anda cukup melanjutkan proses ini sampai benar. Misalnya, jika Anda memiliki daftar nilai y [1,6,15,28,45,66] untuk peningkatan nilai x secara bertahap:
First Differences:
1
6 1-6 =-5
15 6-15 =-9
28 15-28=-13
45 28-45=-17
66 45-66=-21
Second differences:
-5
-9 -5+9 =4
-13 -9+13 =4
-17 -13+17=4
-21 -17+21=4
As these results are identical, this relation has a difference of 2
Tugas Anda:
Tulis program atau fungsi yang, ketika diberi array bilangan bulat sebagai input, mengembalikan perbedaan hubungan yang dijelaskan oleh array, seperti dijelaskan di atas.
Memasukkan:
Array bilangan bulat, yang panjangnya bisa> 1.
Keluaran:
Integer mewakili perbedaan hubungan yang dijelaskan oleh input.
Kasus uji:
Input => Output
[1,2,3,4,5,6,7,8,9,10] => 1
[1,4,9,16,25,36] => 2
[1,2,1] => 2 (when there is only one value left, all values are automatically identical, so the largest difference an array can have is equal to the length of the array-1)
"Hello World" => undefined behavior (invalid input)
[1,1,1,1,1,1,1,1,1] => 0 (all elements are already identical)
[1, 3, 9, 26, 66, 150, 313, 610] => 6
Mencetak:
Ini adalah kode-golf , skor terendah dalam byte di setiap bahasa menang untuk bahasa itu. Skor terendah secara keseluruhan mendapat tanda centang hijau.
sumber
[1,2,1]
memberi 2?[1,2,1] -> [1,-1] -> [-2]
[1,3,9,26,66,150,313,610]
->6
jika Anda sukaJawaban:
Sekam , 6 byte
Terima kasih Leo karena telah mengizinkan saya menggunakan versinya yang berfungsi
[1,1,1,1,1,1]
Cobalah online!
Penjelasan
sumber
[1,1,1,1]
, bisakah saya menggunakan milik Anda?JavaScript (ES6), 47 byte
Uji kasus
Tampilkan cuplikan kode
sumber
MATL , 8 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Ini memaksa perbedaan berturut-turut secara iteratif hingga hasilnya nol atau kosong. Outputnya adalah jumlah iterasi yang diperlukan minus 1.
sumber
R ,
5044 byteCobalah online!
Dibawa
diff
daril
, set kel
, dan periksa apakah hasilnya mengandung nilai bukan nol. Jika tidak, kenaikanF
(diinisialisasi sebagaiFALSE
implisit), dan kembaliF*1
untuk mengkonversiFALSE
ke0
dalam hal semual
identik sudah.sumber
+F
trik penuh untuk 5 byte . Jawaban rapi btw!Mathematica, 49 byte
thanx @alephalpa untuk -6 byte dan @hftf -1 byte
dan berikut adalah pendekatan lain dari @hftf
Mathematica, 49 byte
sumber
(s=#;t=0;While[UnsameQ@@s,s=Differences@s;t++];t)&
UnsameQ[1,2,1]
itu salah;!SameQ[1,2,1]
adalah benar. Saya tidak berpikir loop manual menyimpan karakter baik:Length@NestWhileList[Differences,#,!SameQ@@#&]-1&
sudah sama panjang dengan milik Anda setelah digantiUnsameQ
dengan!SameQ
.Jelly , 7 byte
Cobalah online!
Penjelasan
sumber
IÐĿE€ċ0
Japt ,
107 byteCobalah online!
Bergantung pada kenyataan bahwa hasilnya dijamin berada dalam panjang array input.
Penjelasan
Pada akhirnya, ini akan memetakan array
[1, 3, 9, 26, 66, 150, 313, 610]
ke[true, true, true, true, true, true, false, false]
,yang berisi
6
true
s.Versi 10 byte sebelumnya
Cobalah online!
sumber
Perl 6 , 37 byte
Cobalah online!
Penjelasan: Fungsi ini mengambil input sebagai satu daftar. Itu kemudian membangun urutan rekursif seperti ini: elemen pertama adalah daftar asli (
$_
), elemen berikutnya dikembalikan dengan{@(@$_ Z- .[1..*])}
dipanggil pada elemen sebelumnya, dan itu diulangi hingga kondisinya*.none
benar, yang terjadi hanya ketika daftar tersebut baik kosong atau hanya berisi nol (atau, secara teknis, nilai falsey lainnya). Kami kemudian mengambil daftar dan mengurangi 2 dari itu, yang memaksanya pertama kali ke konteks numerik (dan daftar dalam konteks numerik sama dengan jumlah elemen mereka) dan, pada akhirnya, mengembalikan 2 kurang dari jumlah elemen dalam daftar.Blok aneh
{@(@$_ Z- .[1..*])}
hanya mengambil daftar yang diberikan (.[]
- yang disebut Zen slice - pengindeksan dengan tanda kurung kosong menghasilkan seluruh daftar), zip menggunakan operator minus (Z-
) dengan daftar yang sama tanpa elemen pertama (.[1..*]
) dan memaksanya ke daftar (@(...)
- kita memerlukannya karena zip hanya mengembalikan Seq, yang pada dasarnya adalah daftar satu arah yang dapat diulangi sekali saja, yang merupakan sesuatu yang tidak kita sukai.) Dan itu saja.sumber
@(.[] Z- .[1..*])
ke[.[] Z-.[1..*]]
harus menyimpan dua byte.Java 8,
191 + 58 = 249198140 byte.Terima kasih PunPun1000 untuk 51 byte.
Terima kasih Nevay untuk 58 byte.
Cobalah secara Online!
Cobalah Online (versi 198 byte)
Jadi, ini adalah pertama kalinya saya memposting di sini di PPCG (dan pertama kali melakukan tantangan kode golf). Setiap kritik yang membangun disambut dan dihargai. Saya mencoba mengikuti panduan untuk memposting, jika ada yang tidak beres, silakan tunjukkan.
Versi dipercantik:
sumber
java.util.stream.IntStream k = java.util.Arrays.stream(a);
public
tidak perlu dimasukkan dalam hitungan byte. 2) Anda seharusnya tidak menerima parameter kedua, tetapi menghapusnya sebenarnya dapat menghemat byte. 3) Anda dapat menghapus beberapa tanda kurung yang tidak dibutuhkan di sanaHaskell, 46 byte
ini hanya berulang -
zipWith(-)l$last l
adalah daftar perbedaanl
. dang
adalah fungsi yang menjawab pertanyaan.sumber
Kotlin , 77 byte
posting pertama, mencoba mengedit jawaban terakhir di kotlin 2 kali; D
mengambil bagian pengujian dari @jrtapsell
TryItOnline
sumber
APL (Dyalog Classic) ,
2217 byteCobalah online!
Terima kasih kepada @ngn untuk -5 byte!
Bagaimana?
{ ... }
, fungsinya1=≢∪⍵:0
, jika setiap elemen sama dalam argumen, kembali0
1+∇2-/⍵
, jika tidak, kembalikan 1+n
dari perbedaan (yaitun-1
, dengan demikian menambahkan satu ke dalamnya memberin
)sumber
{1=≢∪⍵:0⋄1+∇2-/⍵}
Jelly , 7 byte
Cobalah online!
Penjelasan
-1 byte terima kasih kepada Jonathan Allan
sumber
IÐĿEÐḟL
selama tujuh (saya melihat Miles juga menemukan tujuh menggunakan rekursi).05AB1E , 7 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES6), 58 byte
sumber
Python 2 , 65 byte
-7 byte terima kasih kepada Jonathan Allan.
Cobalah online!
sumber
c
ke1
, decrementing dan kemudian gunakanprint-c
.f=lambda l,c=1:any(l)and f([j-i for i,j in zip(l,l[1:])],c-1)or-c
max(...,0)
untuk lulus[1, 1, 1, 1, ...]
ujian.Dyalog APL, 19 byte
Penjelasan:
sumber
≢-1+∘≢2-/⍣{1=≢∪⍵}⊢
k , 21 byte
Ini berfungsi dalam k, tetapi tidak dalam oK, karena loop oK's sementara berjalan sebelum memeriksa kondisi (sebagai lawan dari pertama memeriksa kondisi, dan kemudian menjalankan kode). Karenanya, dalam OK,
1 1 1 1 1
contohnya tidak akan berfungsi dengan baik.Coba OK online!
Penjelasan:
sumber
~&/1_=':
->1<#?
Haskell ,
666160 byteCobalah online!
Disimpan 5 byte berkat Christian Sievers
Disimpan 1 byte berkat bangga-haskeller
iterate(z(-))
menghitung daftar perbedaan.or.z(/=)
menguji apakah ada elemen yang tidak sama dalam daftar tersebut.length.takeWhile
menghitung daftar perbedaan dengan elemen yang tidak sama.sumber
or.z(/=)
z=(=<<tail).zipWith
, satu byte lebih pendekJava (OpenJDK 8) ,
9894 byteCobalah online!
sumber
Japt , 7 byte
Pendekatan yang sama (tetapi diturunkan secara independen) sebagai Justin dengan implementasi yang berbeda.
Menguji
Penjelasan
Input array secara implisit
U
.Peta di setiap elemen.
Ambil setiap pasangan berurutan (
ä
) elemenU
dan kurangi dengan perbedaan absolut (a
).Tetapkan kembali array itu ke
U
.Hitung (
è
) jumlah sub-array yang mengembalikan kebenaran (yaitu, non-nol) ketika dikurangi dengan penambahan.sumber
TI-Basic, 19 byte
Secara default, variabel mulai dari nol. Juga, tidak pernah berpikir saya akan menggunakan
IS>(
sesuatu yang bermanfaatsumber
C # (.NET Core) ,
7069 + 18 byte-1 byte terima kasih kepada Kevin Cruijssen
Harus diberi 0 saat menelepon untuk beroperasi dengan benar. Juga termasuk dalam jumlah byte:
Cobalah online!
Penjelasan:
Versi berulang 84 + 18 byte:
Cobalah online!
sumber
(y,z)=>y-z
. Tapi jawaban yang bagus, +1 dari saya.Clojure, 62 byte
Baik
=
dapat mengambil sejumlah argumen, dan satu argumen identik dengan "itu sendiri".(apply = [1 2 3])
dieksekusi sebagai(= 1 2 3)
.sumber
Pyth , 15 byte
Verifikasi semua kasus uji.
Bagaimana?
Penjelasan # 1
sumber
Wtl{Q=hZ=.+Q)Z
WP{Q=hZ=.+Q)Z
. Terima kasih!Perl 5 , 83 + 1 (-a) = 84 byte
Cobalah online!
Input sebagai daftar angka yang dipisahkan oleh satu spasi.
sumber
Pyke , 11 byte
Coba di sini!
sumber
Pyth, 10 byte
Jika kita dapat mengindeks dari 1, kita dapat menyimpan byte dengan menghapus yang pertama
t
.Cobalah secara Online
Penjelasan
sumber
Kotlin , 83 byte
Yg diperindahkan
Uji
TryItOnline
sumber
lang-kotlin
, tidak hanyakotlin
, dalam petunjuk stabilo.Cepat 4 , 90 byte
Alternatif, implementasi berbasis penutupan:
kasus uji:
sumber