JavaScript, 66 65 62 60 byte
Lấy đầu vào dưới dạng một chuỗi, trả về truecác số không có giá trị, một chuỗi trống (falsey) cho các số có một chữ số và mặt falsekhác.
([s,...a])=>a+a&&a.every(x=>eval(s+"<>"[++y%2]+x,s=x),y=s<a)
Thử nó
Chạy đoạn trích dưới đây để kiểm tra 0-9và 25 số ngẫu nhiên <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>
Giải trình
Một vài thủ thuật nhỏ thú vị trong bài này vì vậy tôi nghĩ rằng nó đảm bảo một lời giải thích hiếm hoi cho một giải pháp JS từ tôi.
()=>
Chúng ta bắt đầu, đơn giản, với một hàm ẩn danh lấy chuỗi số nguyên làm đối số khi được gọi.
[s,...a]
Đối số đó ngay lập tức bị phá hủy thành 2 tham số: slà ký tự đầu tiên trong chuỗi và alà một mảng chứa các ký tự còn lại (ví dụ: "461902"trở thành s="4"và a=["6","1","9","0","2"]).
a+a&&
Đầu tiên, chúng ta ghép nối avới chính nó, điều này tạo ra cả hai lần xuất hiện cho chuỗi. Nếu đầu vào là một số có một chữ số thì asẽ trống và do đó, trở thành và chuỗi rỗng; một chuỗi rỗng cộng với một chuỗi rỗng vẫn là một chuỗi rỗng và vì đó là lỗi trong JS, chúng ta dừng xử lý ở logic VÀ và xuất chuỗi rỗng của chúng ta. Trong tất cả các trường hợp khác a+asẽ là sự thật và vì vậy chúng tôi tiếp tục đến phần tiếp theo của chức năng.
a.every(x=>)
Chúng tôi sẽ kiểm tra nếu mọi phần tử xtrong alợi nhuận truekhi đi ngang qua một hàm.
y=s<a
Điều này xác định so sánh đầu tiên của chúng tôi sẽ là ( <hoặc >) và sau đó chúng tôi sẽ thay thế từ đó. Chúng tôi kiểm tra xem chuỗi scó nhỏ hơn mảng không a, có được truyền thành chuỗi trong quy trình hay không, nếu sít hơn ký tự đầu tiên trong a, ysẽ truehoặc falsenếu không.
s+"<>"[++y%2]+x
Chúng tôi xây dựng một chuỗi với giá trị hiện stại ở đầu và xcuối. Ở giữa, chúng tôi lập chỉ mục vào chuỗi "<>"bằng cách tăng y, chuyển giá trị boolean ban đầu của nó thành một số nguyên và modulo bằng 2, cho chúng ta 0hoặc 1.
eval()
Eval chuỗi đó.
s=x
Cuối cùng, chúng ta chuyển một đối số thứ hai eval, mà nó bỏ qua và sử dụng nó để đặt giá trị của sgiá trị hiện tại xcho lần lặp tiếp theo.