JavaScript, 66 65 62 60 bayt
Girdi bir dize olarak alır, truedüzensiz sayılar için döner , tek haneli sayılar için boş bir dize (falsey) ve falseaksi halde.
([s,...a])=>a+a&&a.every(x=>eval(s+"<>"[++y%2]+x,s=x),y=s<a)
Dene
Test etmek için 0-925 Snippet'i ve 25 rasgele sayıyı çalıştırı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>
açıklama
Birkaç eğlenceli küçük hileler bu yüzden benden bir JS çözümü için nadir bir açıklama garanti düşünüyorum.
()=>
Basitçe, tamsayı dizesini çağrıldığında argüman olarak alan anonim bir işlevle başlarız.
[s,...a]
Bu argüman hemen 2 parametrelere Bozunmamış edilir: sdizesindeki ilk karakter olmak ve akalan karakterler içeren bir dizidir olma (örneğin "461902"olur s="4"ve a=["6","1","9","0","2"]).
a+a&&
İlk olarak, aher iki olayı da dizgilere çeviren kendisiyle birleştiririz . Giriş tek basamaklı bir sayı aise boş olur ve bu nedenle dize olur ve boş olur; boş bir dize ve boş bir dize hala boş bir dizedir ve bu JS'de falsey olduğundan, mantıksal AND'de işlemeyi durdurur ve boş dizemizi çıkarırız. Diğer tüm durumlarda a+adoğruluk olacaktır ve bu nedenle işlevin bir sonraki bölümüne devam ediyoruz.
a.every(x=>)
Her eleman olmadığı kontrol olacağım xiçinde adönüşleri truebir fonksiyonu geçerken.
y=s<a
Bu, ilk karşılaştırmamızın ( <veya >) ne olacağını belirler ve sonra oradan değişeceğiz . Dize edip etmediğini kontrol saz dizinin daha aeğer, bu nedenle sürecinde bir dizeye döküm alır, sdaha az ilk karakterin daha a, yolacak trueya falseda değilse.
s+"<>"[++y%2]+x
sBaşlangıçta ve xsonunda geçerli değeri olan bir dize oluştururuz . Arasında, dizeye dizine "<>"artırarak ybize veren 2 oranında bir tamsayı ve modulo için başlangıç boolean değerini döküm, 0ya 1.
eval()
Bu dizeyi değerlendirin.
s=x
Son olarak, evalgörmezden geldiği ikinci bir argüman iletiriz ve bunu bir sonraki yinelemenin sgeçerli değerine ayarlamak için kullanırız x.