JavaScript(ES6)、39 43
正規表現なし、文字列なし、再帰的:
R=(n,x=3)=>x%4>2?R(++n,n):x?R(n,x>>1):n
反復バージョン:
F=n=>{for(x=3;x%4>2?x=++n:x>>=1;);return n}
それは非常に単純で、右シフトを使用して11のシーケンスを見つけるだけです。見つけたら、次の番号にスキップします。再帰バージョンは、反復バージョンから直接派生します。
ゴルフをしていない、より明白。ゴルフの最も難しい部分は、内側と外側のループをマージすることです(開始時にxを3に初期化する必要があります)
F = n=>{
do {
++n; // next number
for(x = n; x != 0; x >>= 1) {
// loop to find 11 in any position
if ((x & 3) == 3) { // least 2 bits == 11
break;
}
}
} while (x != 0) // if 11 was found,early exit from inner loop and x != 0
return n
}