Diberikan daftar bilangan bulat positif menentukan apakah ada elemen yang lebih besar dari dua tetangganya atau kurang dari dua tetangganya ("benjolan"). Untuk lebih jelasnya, benjolan tidak akan pernah menjadi item pertama atau terakhir dari daftar karena mereka hanya memiliki satu tetangga.
Program Anda harus menampilkan salah satu dari dua nilai yang konsisten, masing-masing sesuai dengan daftar tanpa benjolan atau daftar dengan benjolan. Nilai-nilainya tidak penting, Anda dapat memilihnya sendiri.
Ini adalah kode-golf sehingga jawaban akan dicetak dalam byte dengan lebih sedikit byte yang lebih baik.
Uji kasus
[] -> False
[1] -> False
[1,2] -> False
[1,2,1] -> True
[1,2,2] -> False
[1,2,3] -> False
[1,2,2,1] -> False
[1,2,2,3] -> False
[1,2,1,2] -> True
[1,3,2] -> True
[3,1,2] -> True
[2,2,2] -> False
code-golf
number
array-manipulation
decision-problem
Wisaya Gandum
sumber
sumber
[1,3,3]
(memastikan bahwa jawaban menggunakan algoritme Dennis mengambil tanda kenaikan daripada hanya menggunakan penambahan itu sendiri)[1,2,2]
? Atau apakah saya melewatkan sesuatu?[1,2,2]
sama dengan tanda-tanda delta itu tetapi tidak demikian halnya[1,3,3]
.Jawaban:
Jelly , 5 byte
Mengembalikan 0 jika ada masalah, 1 jika tidak.
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6), 38 byte
Mengembalikan boolean.
Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Kami menggunakan a untuk menyimpan nilai n sebelumnya . Kami menetapkan x ke 1 jika a <n , -1 jika a> n atau 0 jika a = n . Dan kami menguji apakah old_x * x <0 , yang hanya mungkin jika ( old_x = 1 dan x = -1 ) atau ( old_x = -1 dan x = 1 ).
Karena x diinisialisasi ke fungsi panggilan balik anonim dari beberapa () , maka dipaksakan untuk NaN selama iterasi pertama, yang membuat tes salah.
sumber
Haskell , 42 byte
Cobalah online!
Penjelasan
Pertama kita memiliki fungsi
f
yang mengambil fungsi biner dan daftar dan menerapkan fungsi biner untuk setiap pasangan yang berdekatan dalam daftar.Kemudian fungsi utama kami berlaku
f(-)
untuk daftar input. Ini menghitung daftar perbedaan. Kami kemudian menerapkanf(*)
ke daftar untuk mengalikan setiap pasangan yang berdekatan. Terakhir kami bertanya apakah ada pasangan yang kurang dari nol.Angka dalam daftar akhir hanya bisa negatif jika itu adalah produk dari angka negatif dan positif dari daftar perbedaan. Dengan demikian untuk menghasilkan entri negatif (dan kemudian mengembalikan true) daftar asli harus beralih dari meningkat menjadi menurun atau sebaliknya, yaitu harus memiliki benjolan.
sumber
Python 2 , 43 byte
Mengembalikan Benar jika ada benjolan, kesalahan jika tidak ada. ( diizinkan secara default )
Cobalah online!
sumber
Paket Oktaf dengan Gambar,
3432 byte2 byte disimpan berkat @StewieGriffin !
Cobalah online!
Penjelasan
Hitung perbedaan berturut-turut, susun dalam blok geser panjang 2, dapatkan produk dari masing-masing blok, dan uji apakah ada produk yang negatif.
sumber
0||prod(...)
menghemat 2 byte. Anda juga bisa melewati seluruhany
bagian, dan menggunakan definisi kebenaran / falsy default untuk menyimpan 5 byte .any
. Terima kasih atas0||
idenya!R, 48 byte
Cobalah online!
Cara kerjanya langkah demi langkah menggunakan c (1,4,1,4) sebagai contoh:
Sebagai bonus, berikut adalah solusi dengan paket dan konsep yang sama menggunakan
zoo
:sumber
embed
ada. Sayang sekalirowProds
dancolProds
tidak ada sebagai alias di R.rowSums
danrowMeans
....colSums
akan membentuk kembali input ke dalam matriks berdasarkan input tambahan yang mungkin memiliki aplikasi golf di suatu tempat .... sekarang saya hanya perlu menemukan satu!matrixStats
paket.function(x)any(matrixStats::colProds(embed(diff(x),2)))<0
. Tapi untuk apa pun selain kode golf, paket ini memang merupakan harta karun.Haskell , 33 byte
Cobalah online!
True
jika ada masalah, kesalahan jika tidak ada.sumber
l`zip3`tail l$drop 2l
hanya rambut yang lebih pendek. Saya ingin tahu apakah pencocokan pola entah bagaimana bahkan lebih pendek?Perl 6 , 39 byte
Cobalah online!
$_
adalah argumen daftar untuk fungsi anonim ini..[1..*]
adalah daftar yang sama, tetapi dengan elemen pertama yang dijatuhkan.Zcmp
ritsleting kedua daftar bersama dengancmp
operator, menghasilkan daftarOrder
nilai. Misalnya, untuk daftar input1, 2, 2, 2, 1
ini akan menghasilkan daftarMore, Same, Same, Less
.Sekarang kita hanya perlu tahu apakah daftar itu mengandung dua elemen yang berdekatan
More, Less
atauLess, More
. Trik yang saya gunakan adalah untuk mengubah daftar menjadi string dengan batas ruang~
, kemudian menguji apakah itu berisi substringre L
ataus M
. (Yang pertama tidak bisa hanyae L
karenaSame
juga diakhiri dengan "e".)Operator kecocokan cerdas mengembalikan salah satu
Match
objek (jika kecocokan berhasil) atauNil
(jika tidak), jadiso
konversi apa pun itu menjadi nilai boolean.sumber
Bahasa Wolfram (Mathematica) , 40 byte
Cobalah online!
sumber
Ruby ,
5546 byteCobalah online!
Seorang lambda menerima sebuah array dan mengembalikan boolean.
-9 byte: Ganti
(x<y&&y>z)||(x>y&&y<z)
dengan(y-x)*(y-z)>0
(terima kasih kepada GolfWolf )sumber
|
alih-alih||
, menghemat 1 byte.PostgreSQL 173 byte
sumber
Java 8,
10810410186847972 byte-2 byte terima kasih kepada @ OlivierGrégoire .
-13 byte berkat @Nevay .
Cobalah online.
sumber
-1
.a->{int i=a.length;for(;i-->2;)i|=(a[i]-a[--i])*(a[i]-a[i-1])>>-1;return-~i|3;}
(pengembalian-1
untuk kasus3
kebenaran , untuk kasus palsu) - atau, jika menggunakan ada / tidaknya pengecualian sebagai nilai pengembalian 55 byte:a->{for(int i=0;++i>0;)i|=(a[i-1]-a[i])*(a[i]-a[i+1]);}
a->{int i=a.length,p=0;for(;i-->1;)i|=p*(p=a[i]-a[i-1])>>-1;return-i>1;}
R ,
5856 byteCobalah online!
Disimpan 2 byte berkat Giuseppe
sumber
{}
untuk -2 byte.c()
adalahNULL
yang tidak sama dengan vektor kosong bilangan bulat,integer(0)
sedangkan di MATLAB[]
adalah secaradouble
default, tetapi jika Anda ingin tetap seperti ini, itu sangat masuk akal.J ,
1615 byte-1 byte terima kasih kepada FrownyFrog
Cobalah online!
Asli: 16 byte
2-/\]
- Perbedaan dari setiap item yang berdekatan2*/\
- produk dari setiap item yang berdekatan[:<./
- minimum0>
- negatif?Cobalah online!
sumber
f=.
byte penugasan . Harap diingat bahwa saya pengguna yang relatif baru :)1 e.0>2*/\2-/\]
Japt , 11 byte
-5 byte terima kasih kepada @ETHproductions
Cobalah online! | Uji kasus
Ini menggunakan algoritma Dennis
sumber
Japt , 9 byte
Cobalah online!
Gabungan jawaban Oliver dengan pendekatan yang digunakan oleh beberapa jawaban lain.
sumber
Attache , 39 byte
Cobalah online!
Cukup senang dengan hasilnya.
Penjelasan
Ini adalah komposisi dari empat fungsi:
Delta
mendapat perbedaan antar elemen. =Kemudian,
Sign
diterapkan pada setiap perbedaan, memberi kita array1
s,0
s, dan-1
s. =Lalu,
Slices&2
berikan semua irisan panjang dua dari array, berikan semua pasangan perbedaan.Akhirnya,
Any&:&{_*~?Sum[__]}
sama dengan, untuk inputx
:Ini mencari elemen yang menjumlahkan ke nol tetapi bukan nol. Jika ada pasangan elemen seperti itu ada, maka ada benjolan.
sumber
MATL , 8 byte
Cobalah online!
sumber
Sekam , 7 byte
Cobalah online!
Penjelasan
sumber
Oktaf , 33 byte
Cobalah online!
Penjelasan:
sumber
Brachylog , 10 byte
Cobalah online!
Berhasil (
true.
) jika ada masalah, dan gagal (false.
) jika tidak ada masalahPenjelasan
Ini sudah bisa dibaca:
sumber
05AB1E , 7 byte
Cobalah online!
Penjelasan
sumber
0‹
yang pada dasarnya memeriksa angka untuk tanda negatif?d
digunakan untuk memeriksa bahwa bagian atas tumpukan hanya berisi[0-9]
, yang merupakan kebalikan dari yang kita inginkan di sini. Tapi sekarang lebih cerdas dan negatif / mengapung juga dihitung sebagai angka.a
melihatnegative
tanda dan mengembalikan yang benar atau sesuatu ... Tapi saya pikir Anda benar, saya ingatd
trik Anda .Brachylog , 10 byte
Cobalah online!
Tidak hampir serapi dan seanggun jawaban 10 byte @ Fatalize yang sudah ada, tetapi berhasil!
sumber
Sekam , 9 byte
Cobalah online!
Menggunakan algoritma Dennis.
sumber
Perl 5 , 54 + 2 (
-pa
) = 56 byteCobalah online!
sumber
Python 2 , 60 byte
Cobalah online!
Hampir sama, berpikir itu akan lebih pendek ...
Python 2 , 63 byte
Cobalah online!
sumber
Pyt ,
117 byteOutput 1 jika ada bump, 0 sebaliknya
Cobalah online!
Jawaban Haskell dari Port of Wheat Wizard
Cara lama (11 byte):
Cobalah online!
Mengembalikan Palsu jika ada benjolan, Benar sebaliknya
Port of Dennis 'Jelly menjawab
sumber
Bahasa Wolfram (Mathematica) ,
3736 byteMemberikan kebalikan dari jawaban test case (False dan True terbalik). Berlaku a
!
untuk beralih ke bentuk normal.ATAU
Juga membalikkan output, jadi gantikan
FreeQ
denganMatchQ
untuk bentuk normal.Penjelasan: Ambil tanda perbedaan urutan. Jika urutan yang dihasilkan meliputi {1, -1} atau {-1,1} ada benjolan. Nilai absolut perbedaan {1, -1} atau {-1,1} adalah 2 dalam kedua kasus.
Matikan byte lain dengan mengkuadratkan daftar akhir alih-alih mengambil nilai absolut:
Cobalah online!
sumber
Perl, 35 byte
Termasuk
+3
untuk-p
bump.pl
:Jalankan sebagai:
sumber
Julia 0,6 ,
5756 bytePada dasarnya hanya jawaban python yang benar-benar manusiawi. -1 byte dari user71546
Cobalah online!
Julia 0,6 , 39 byte
Gaya rekursi Lispy, alias jawaban python Dennis. Kembali
true
ketika ada benjolan, jika tidak menimbulkan kesalahan. Ini mungkin harus 42 byte karena Anda harus memercikkannya saat menelepon. Misalnya untuka=[1,2,1]
Anda memanggil sebagaif(a...)
.f(a)=f(a...)
akan menghapus kebutuhan itu, tetapi lebih lama. Saya perlu mendapatkan rekursi yang lebih baik, dan saya tidak begitu suka menulis kode yang menimbulkan kesalahan.Cobalah online!
sumber
for
tidak diperlukan;)