JavaScript, 66 65 62 60 byte
Mengambil input sebagai string, mengembalikan trueuntuk nomor undulant, string kosong (falsey) untuk nomor digit tunggal dan falsesebaliknya.
([s,...a])=>a+a&&a.every(x=>eval(s+"<>"[++y%2]+x,s=x),y=s<a)
Cobalah
Jalankan Cuplikan di bawah untuk menguji 0-9dan 25 angka acak <10,000,000.
f=
([s,...a])=>a+a&&a.every(x=>eval(s+"<>"[++y%2]+x,s=x),y=s<a)
tests=new Set([...Array(10).keys()])
while(tests.add(Math.random()*1e7|0).size<35);
o.innerText=[...tests].map(x=>(x=x+``).padStart(7)+` = `+JSON.stringify(f(x))).join`\n`
<pre id=o></pre>
Penjelasan
Beberapa trik kecil yang menyenangkan di sini, jadi saya pikir itu memerlukan penjelasan langka untuk solusi JS dari saya.
()=>
Kita mulai, secara sederhana, dengan fungsi anonim yang mengambil string integer sebagai argumen ketika dipanggil.
[s,...a]
Argumen itu segera dirusak menjadi 2 parameter: smenjadi karakter pertama dalam string dan amenjadi array yang berisi karakter yang tersisa (misalnya "461902"menjadi s="4"dan a=["6","1","9","0","2"]).
a+a&&
Pertama, kami menggabungkan adengan dirinya sendiri, yang melemparkan kedua kejadian ke string. Jika input adalah angka satu digit maka aakan kosong dan, oleh karena itu, menjadi dan string kosong; string kosong ditambah string kosong masih merupakan string kosong dan, karena itu falsey di JS, kami berhenti memproses pada logika AND dan mengeluarkan string kosong kami. Dalam semua kasus lainnya a+aakan menjadi kebenaran dan kami melanjutkan ke bagian fungsi selanjutnya.
a.every(x=>)
Kami akan memeriksa apakah setiap elemen xdalam apengembalian trueketika melewati suatu fungsi.
y=s<a
Ini menentukan apa yang akan menjadi perbandingan pertama kami ( <atau >) dan kemudian kami akan berganti dari sana. Kami memeriksa apakah string skurang dari array a, yang akan dilemparkan ke string dalam proses jadi, jika skurang dari karakter pertama a, yakan menjadi trueatau falsejika tidak.
s+"<>"[++y%2]+x
Kami membangun string dengan nilai saat ini sdi awal dan xdi akhir. Di antaranya, kita mengindeks ke dalam string "<>"dengan menambahkan y, melemparkan nilai boolean awal ke integer, dan modulo dengan 2, memberi kita 0atau 1.
eval()
Eval string itu.
s=x
Akhirnya, kami memberikan argumen kedua eval, yang diabaikannya, dan menggunakannya untuk mengatur nilai ske nilai saat ini xuntuk iterasi berikutnya.