2016-06-09 5 views
0

나는 문자열에 선행 0이 일정 수 있는지 빠르게 확인해야하는 프로젝트를 진행 중입니다.JS에서 가장 빠른 0의 수를 감지하는 가장 빠른 방법

또한
var regex = new RegExp('^[0]{' + difficulty + '}.+'); 
if (regex.test(hash)) 

문자열로 반복 : 나는 정규식을 사용하여 성공을 거두었습니다

if (hash.substring(0, difficulty) === '0'.repeat(difficulty)) 

을 내 특정 목적을 위해, 속도가 가장 중요한 요소입니다. 선행 0 수가 난이도와 일치하는지 확인하는 가장 빠른 방법을 찾아야합니다. 두 가지 방법 모두에 대해 벤치 마크 테스트를 실행했지만 결과가 어느 쪽이 더 좋을지 알 수없는 방식으로 변동합니다. 또한, 더 좋은 방법이 있다면 알려 주시기 바랍니다. 미리 감사드립니다.

+0

for for loop –

+0

@CallumLinington 해시를 반복하고 0의 수를 확인합니다. 이 경우 루프가 맨 앞에 오는 0의 양을 확인하는 데 어떻게 도움이됩니까? –

+0

문자열을 순환 할 수 있으므로'i = 0; i <4; i ++'그래서 4는 당신이 감지하기를 원하는 맨 앞자리 0의 숫자입니다. –

답변

1
function detect(hash, difficulty) { 
    for (var i = 0, b = hash.length; i < b; i ++) { 
     if (hash[i] !== '0') { 
      break; 
     } 
    } 
    return i === difficulty; 
} 

귀하의 방법은 중간 오브젝트를 구성하고 (특히 정규 표현식으로하지만, 문자열 전체 문자열 비교도 포함) 무거운를 arithmetics 할 단점이있다. 이것은 아주 빨라야합니다.

+0

매우 유용합니다. 평균적으로 퍼즐을 1 초 더 빨리 풀고 있습니다. 내가 할 수있을 때 나는 대답을 받아 들일 것이다. –

+0

인수로 선언 한 변수는 맨 위 ^로 이동합니다 (더 나은 성능을 위해 해시 길이를 기억해야합니다). – Hydro

+0

@KlaiderKlai 귀하의 제안을 수락했지만 솔직히 말해서 중요하지 않습니다. '.length'는 모든 현대의 브라우저에서 캐시되고'var'을 루프 안에 넣으면 이식성이 떨어집니다. – freakish