... tapi hei, tidak perlu ketat.
Diberikan array kosong yang benar-benar kosong, tentukan apakah itu:
- Monoton menurun secara drastis . Ini berarti bahwa setiap entri sangat kurang dari yang sebelumnya.
- Monoton tidak meningkat, tetapi tidak menurun secara ketat . Ini berarti bahwa setiap entri kurang dari atau sama dengan sebelumnya, dan array tidak termasuk dalam kategori di atas.
- Tidak satu pun di atas .
Perhatikan kasus sudut berikut:
- Array dengan nomor tunggal adalah monoton yang sangat menurun (sangat kosong).
- Array dengan nomor yang sama diulang adalah tidak monoton meningkat, tetapi tidak sepenuhnya menurun.
Aturan
Anda dapat menyediakan program atau fungsi
Input dapat diambil dalam format apa pun yang wajar: array, daftar, string dengan angka yang dipisahkan oleh spasi, ...
Anda dapat memilih tiga output yang konsisten untuk masing-masing kategori. Sebagai contoh, output dapat nomor 0
, 1
, 2
; atau string 1 1
,, 1 0
string kosong.
Kode terpendek dalam byte menang
Uji kasus
Monoton menurun secara drastis:
7 5 4 3 1
42 41
5
Monoton tidak bertambah, tetapi tidak menurun secara ketat:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Bukan dari salah satu di atas:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Jawaban:
Jelly ,
10 95 byte-Metode ditemukan oleh DrMcMoylex, berikan kredit!
TryItOnline! atau jalankan semua tes
Pengembalian:
-1
= monoton menurun secara ketat;0
= monoton tidak meningkat;1
= lainnya.Bagaimana?
sumber
M
merupakan bagian dari peta karakter 8bit? Anda tidak dapat mengatakan bahwa itu adalah 5 byte karena tidak. CP1252 tidak memilikinya misalnya.byte
di header posting ini.Perl 6 , 17 byte
2
1
0
Diperluas:
sumber
>
diaktifkan denganafter
dan>=
dengan!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 byteCobalah online! atau verifikasi semua kasus uji!
3 byte disimpan, terima kasih kepada @LuisMendo!
Outputnya adalah
Mengurangi secara ketat: -1
Non-meningkat: 0
Lainnya: 1
Penjelasan:
sumber
0
alih - alih menambahkan terakhir1
? Sesuatu seperti0hdX>ZS
0hdX>0/
- Pertanyaan untuk Anda dan @LuisMendo: Apakah mungkin untuk memanfaatkan fakta bahwa pengurutan hanya 1 char (berlawanan denganX>
), dengan entah bagaimana secara implisit menggunakan nilai terakhir?S
, tapi saya belum menemukan cara untuk membuatnya lebih pendek ...Mathematica, 22 byte
Fungsi yang tidak disebutkan namanya mengambil daftar angka sebagai input. Mengembalikan
-1
jika daftar benar-benar menurun,0
jika tidak meningkat tetapi tidak sepenuhnya menurun, dan1
jika tidak.Algoritma yang cukup sederhana: ambil perbedaan pasangan berturut-turut, ambil yang terbesar, dan ambil tanda yang terbesar.
(Saya merasa seperti harus ada beberapa bahasa di mana algoritma ini adalah 3 byte ....)
Mengenai array dengan satu entri:
Differences
menghasilkan daftar kosong;Max
daftar kosong memberi-∞
(!); danSign[-∞]
mengevaluasi ke-1
(!!). Jadi itu benar-benar berfungsi pada kasus sudut ini. Kadang-kadang harus mencintai Mathematica. (Memang, fungsi ini juga memberi label yang benar pada daftar kosong sebagai benar-benar menurun.)sumber
Haskell,
403837 byteKembali
GT
untuk Monoton menurun secara ketatEQ
untuk Monoton tidak meningkatLT
laincompare
membandingkan dua angka dan mengembalikanGT
(EQ
,LT
) jika angka pertama lebih besar dari (sama dengan, kurang dari) angka kedua.zipWith compare<*>tail
membandingkan elemen tetangga.foldl min GT
mengurangi daftar hasil perbandingan dengan fungsi min yang dimulai dengan GT (catatan:LT
<EQ
<GT
).Sunting: @xnor ditemukan
23 byte. Terima kasih!sumber
GT
, karena kita perlu daftar minimum (saya punya maksimum, yang salah dan relik dari versi awal di mana saya menggunakan=<<
bukan<*>
).foldl min GT
?Common Lisp,
4340 byteIni mengambil input sebagai daftar Lisp, dan kembali
(T T)
,(NIL T)
dan(NIL NIL)
untuk membedakan 3 kategori. Ini sedang dijalankan pada test case yang disediakan:sumber
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Perhatikan bahwa Anda bisa menulis(lambda(x)...)
menjadi lebih pendek.Python 2, 30 byte
-1
untuk penurunan ketat,0
untuk penurunan lemah,+1
untuk tidak menurunMenggunakan
cmp
untuk membandingkan elemen berurutan, dan mengambil maksimum. Ini dilakukan dengan menghapus elemen pertama dari satu salinan daftar, lalu memetakancmp
. Misalnya,l=[2,2,1]
memberiyang memiliki
max
0 karena kesetaraan ada.Daftar yang lebih pendek secara otomatis diperpanjang
None
, yang kurang dari semua angka dan tidak berbahaya. Elemen hantu ini juga mengisolasi terhadap pengambilanmin
daftar kosong ketika input memiliki panjang 1.sumber
Brachylog , 7 byte
Cobalah online!
Ini mencetak
1
untuk mengurangi ketat,0
untuk tidak menambah danfalse.
sebaliknya.Penjelasan
Solusi 7 byte lainnya
sumber
R, 44 byte
Membaca input dari stdin dan mencetak yang berikut tergantung pada input:
Keluaran:
[1] FALSE TRUE
: Monoton tidak meningkat[1] TRUE FALSE
: Monoton menurun secara drastis[1] FALSE FALSE
: Bukan dari salah satu di atassumber
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
lebih pendek 1 byte. Ini mengembalikan 0 jika monoton secara ketat, 1 jika monoton tidak meningkat dan 2 jika tidak ada yang di atas. Tidak yakin apakah diizinkan untuk mengembalikan apa pun jika tidak ada yang di atas, tetapi kemudian Anda dapat menyederhanakannyad=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
satu byte lebih baik.JavaScript (ES6), 51 byte
Mengembalikan 0 untuk pengurangan ketat, 1 untuk tidak meningkatkan, 2 sebaliknya.
sumber
05AB1E ,
58 byteBug diperbaiki oleh Emigna, terima kasih! Ini menggunakan metode yang sama seperti DrMcMoylex 's.
Cobalah online!
Output adalah:
sumber
®¸ì¥Z0.S
akan memperbaiki masalah elemen tunggal.Ruby, 37 byte
Output:
[true,true]
,[true,false]
atau[false,false]
sumber
Mathematica,
1511 byteIni adalah fungsi variadic, mengambil semua integer input sebagai argumen terpisah.
True | True
False | True
False | False
Perhatikan bahwa
|
ini bukanOr
tapiAlternatives
, yang merupakan bagian dari sintaks pencocokan pola, yang menjelaskan mengapa ekspresi ini tidak dievaluasiTrue
,True
,False
, masing-masing.Kode itu sendiri sebagian besar merupakan aplikasi tip ini . Sebagai contoh
##>0
adalahGreater[##, 0]
tetapi kemudian##
diperluas ke semua nilai input sehingga kami mendapatkan sesuatu sepertiGreater[5, 3, 2, 0]
, yang artinya sendiri5>3>2>0
.sumber
Racket , 44 byte
Dipanggil:
Hasil:
sumber
>
sebagai benar. Lisp umum mendapatkan yang benar, tetapi gagal mendefinisikan arity 0 case (yang juga harus benar).C ++ 14, 85 byte
Mengembalikan 3 (0b11) untuk penurunan ketat, 1 (0b01) untuk non-meningkat dan 0 sebaliknya.
Tidak Disatukan:
Saya pikir ini adalah masalah yang sempurna untuk ekspresi lipat C ++ 17:
Sayangnya itu tidak rantai operator relasional tetapi
yang tidak diinginkan.
sumber
Python 2,
6174 byte+13 byte untuk input nomor tunggal
Membutuhkan input dalam bentuk daftar braket seperti
[3,2,1]
. Mengembalikan 2 untuk pengurangan ketat, 1 untuk tidak meningkat dan 0 sebaliknya.Solusi lama:
sumber
Python 3,
8152 byte (Terima kasih kepada FryAmTheEggMan )Cobalah online!
sumber
sorted(s)[::-1]
lebih pendek untuk membalik daftar yang diurutkan. Dalam Python 3 Anda bisa lakukan{*a}
untuk mendapatkan satu set elemena
.sorted
mengembalikan daftar sehingga Anda tidak harus membuang set ke daftar juga. Juga menambahkan boolean sangat halal! Akhirnya Anda bisa mengirimkan lambda anonim, jadi Anda tidak perluf=
. Saya mendapatkan 52 byte pada akhirnya. repl.it/E7eG/2Befunge, 50 byte
Cobalah online!
Menerima input sebagai urutan int yang dipisahkan oleh spasi, dan mengembalikan 0 jika benar-benar menurun, 1 jika tidak benar-benar menurun, 2 sebaliknya.
Karena membaca befunge agak mustahil jika Anda tidak tahu bahasa, ini adalah algoritma dalam pseudocode:
* Dalam memori befunge adalah tumpukan yang dimulai dengan jumlah 0 tak terbatas di atasnya. pop (), push (x), input () dan output (x) cukup jelas, fungsi lain yang saya gunakan berfungsi seperti ini:
Funge!
Versi sebelumnya, hanya 41 byte tetapi tidak valid karena memerlukan 0 untuk mengakhiri urutan input (atau menggunakan juru bahasa seperti ini )
Cobalah online!
sumber
0
tidak dihitung sebagai format input yang valid. Saya pikir ini termasuk dalam kategori "input yang sudah diproses". Bahkan, beberapa jawaban menambahkan a0
dalam kode (dengan demikian termasuk dalam jumlah byte). Saya akan diterima jika Anda bisa. Bisakah Anda mengganti0
dengan beberapa karakter non-numerik? Itu bisa diterima0
dimasukkan untuk menangani kasus bahwa input hanya memiliki satu entri. Itulah salah satu alasan mengapa saya menganggap bahwa memasukkan yang dalam input tidak valid. Bagaimanapun, jika ada penerjemah yang tidak membutuhkannya, Anda dapat menggunakan penerjemah itu untuk membuktikan bahwa jawaban Anda valid tanpa . Jika penerjemah Try-it-online membutuhkannya , Anda dapat memasukkannya untuk tujuan demonstrasi, dengan catatan penjelasan yang sesuai0
0
0
J, 14 byte
Kata kerja monadik mengambil daftar di sebelah kanan, kembali
1
untuk penurunan yang ketat,0
untuk penurunan yang lemah, dan_1
sebaliknya.Mengambil tanda
*
minimum<./
berturut-turut2-/\
dalam daftar. J tidak menukar urutan perbedaan ketika mengambilnya jadi mis. Urutannya sangat menurun jika semuanya positif. Terutama,<./
mengembalikan infinity positif pada daftar elemen nol.Digunakan di REPL:
sumber
C,
6867 BytesSuatu fungsi
f
, yang dilewatkan array ints (l
) didahului oleh panjangnya (n
, juga sebuah int). Mengembalikan 3 jika monoton menurun secara ketat, 1 jika monoton tidak meningkat, tetapi tidak menurun secara ketat, 0 sebaliknya.Hapus sedikit golf agar mudah dibaca:
Mengatur ulang dan berkomentar untuk menunjukkan logika:
Uji kasus ( seizin IDEOne ):
sumber
Retina , 41 byte
Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
2
3
1
Penjelasan
Mengonversi input yang unary.
Regex di sini cocok dengan pasangan angka yang terus meningkat. Jika ini masalahnya, input jelas tidak bisa tidak meningkat. Yang
A
menyatakan itu sebagai tahap "anti-grep" yang berarti bahwa garis input dibuang dan diganti dengan string kosong jika regex cocok.Ini adalah tahap split yang digunakan untuk menambahkan linefeed ke input saja jika input tidak dibuang. Jadi kami memiliki dua hasil yang mungkin sejauh ini: input yang tidak bertambah mendapat linefeed pada akhirnya dan yang lainnya masih kosong.
Akhirnya, kami menghitung jumlah kecocokan dari regex ini. Regex cocok dengan angka yang sama (dan kemudian semuanya sampai akhir string untuk menghindari beberapa kecocokan dari jenis ini untuk input seperti
1 1 1 1
), atau "akhir input". Mari kita lihat tiga jenis input:$
cocok. Sekarang$
bukan persis "akhir dari string". Itu juga bisa cocok di depan linefeed tambahan. Jadi kita akan benar-benar mendapatkan dua kecocokan darinya, satu di akhir input, dan satu setelah linefeed yang kita masukkan.$
hanya cocok sekali.sumber
Aksioma, 114 byte
Tidak disatukan
Hasil
sumber
APL, 16 byte
Catatan: masukkan satu array elemen, misalnya
a←1⍴3
sebaliknya:a←4 3 2 1
Menafsirkan output:
Ide: uji untuk monotonitas dengan membandingkan array asli ke array, periksa non-meningkat dengan membandingkan array dengan duplikasi yang dihapus.
(Dan saya pikir itu bisa diperbaiki ...)
sumber
Haskell, 36 byte
(+x)
karena haskell salah mengartikan(-x)
sebagai nilai, bukan bagian. Saya bertanya-tanya apakah seluruh ekspresi dapat secara menguntungkan dijadikan pointfree.sumber
LabVIEW, 12 node, 18 kabel ==> 48 byte oleh konvensi
Tidak ada fungsi yang disembunyikan di bingkai case lainnya, hanya satu kabel saja.
sumber
Ceylon, 86 byte
Fungsi ini mengambil input sebagai parameternya, dan mengembalikan tupel nol atau satu boolean -
[false]
untuk Monotone menurun secara ketat ,[true]
untuk Monotone tidak meningkat, tetapi tidak secara ketat menurun , dan[]
untuk None di atas .Dapat digunakan seperti ini:
Keluaran:
Versi tanpa tanda dan komentar:
sumber
Clojure, 34 byte
Sangat mudah, pengembalian
1
untuk jika benar-benar menurun,2
jika tidak bertambah dannil
sebaliknya.Juga mencoba menghindari
apply
dengan makro~@
tetapi hanya lebih lama di 43 karakter (ini menghasilkan[1 2 nil]
):sumber
Pip , 8 byte
Program lengkap. Mengambil daftar input sebagai argumen baris perintah. Output
11
untuk penurunan ketat,01
untuk non-meningkat,00
untuk keduanya.Cobalah online!
Penjelasan
Pendekatan ini bekerja karena operator perbandingan Pip, seperti Python, rantai bersama:
4>3>2
benar, daripada menjadi(4>3)>2
(salah) seperti dalam C. Dan perilaku yang sama berlaku ketika operator perbandingan dimodifikasi dengan$
meta-operator lipat.sumber
Japt ,
987 byteOutput
-1
untuk "monoton dikurangi secara ketat",0
untuk "monoton tanpa-kenaikan" dan1
sebaliknya.Cobalah
1 byte disimpan berkat Oliver .
sumber
än mg rw
mengembalikan hasil yang salah tanpaJ
tetapi tidak demikian halnya denganän rw g
. Aneh.R , 34 byte
Cobalah online!
Ports jawaban MATL DJ .
R , 43 byte
Cobalah online!
Pengembalian
2
untuk pengurangan ketat,1
untuk tidak meningkat, dan0
sebaliknya.all(x==cummin(x))
isTRUE
(dikonversi ke1
saat digunakan dalam aritmatika) jika dan hanya jikaf
tidak meningkat, termasuk kasus ketat.all(diff(x)<0)
adalahTRUE
hanya ketikaf
secara ketat menurun.sumber