2017-01-30 5 views
0

저는 스포츠 프로그래밍 서비스의 초보자이며 성공한 솔루션은 종종 비트 연산자를 사용한다는 것을 알았습니다.비트 연산자가 스포츠 프로그래밍에서 인기가있는 이유

다음은 예입니다.

두 개의 배열 사이에 차이점을 찾는 함수를 작성합니다 (요소 하나가 다른 것으로 간주하십시오).

솔루션은 다음과 같습니다 싶습니다

let s = x => ~eval(x.join`+`); 
let findDiff = (a, b) => s(b) - s(a); 

let findDiff = (a, b) => eval(a.concat(b).join`^`); 

알고 :

  1. 두 예제의 설명 (비트 부분).
  2. 10 진수에 대해 비트 연산자를 사용하면 어떤 이점이 있습니까?
  3. 비트 연산보다는 정상 연산보다 빠릅니다.

업데이트 : 내 질문 ~~ vs parseInt에 중복으로 표시되는 이유 내가 완전히 이해하지 못했다. 이 연산자가 스포츠 프로그래밍에 도움이되는 parseInt을 대체하는 이유는 알아두면 좋습니다. 하지만 내 질문에 대답하지 않습니다.

+1

반드시 더 빠를 필요는 없습니다. 그것들은 간결합니다 (그리고 보통 읽기는 어렵지만, 그것은 부작용입니다). 코드 골프는 비트 연산자에 초점을 맞추지 않았습니다. 코드 길이에 관한 것입니다. 이러한 유형의 질문에 대해서는 SO 대신 [관련 커뮤니티] (http://codegolf.stackexchange.com/questions/2682/tips-for-golfing-in-javascript)를 고려해보십시오. – estus

+0

가능한 복제 [~~ 대 parseInt?] (http://stackoverflow.com/questions/10841204/vs-parseint) – estus

+0

@estus, 내 예제에서'~~'는 어디서 볼 수 있습니까? –

답변

1

코드 골프는 비트 연산자에 초점을 맞추지 않았습니다. 코드 길이에 관한 것입니다.

비트 단위 연산자는 더 빠를 필요는 없지만 일반적으로 충분히 빠릅니다. 그것들은 간결합니다 (그리고 보통 읽기는 어렵지만, 그것은 부작용입니다).

~~parseIntwith a considerable number of remarks에 비해 더 짧고 (대체로 더 형성되지 않음) 대체됩니다. 일반 (골프가 아닌) 코드에서는 parseInt보다 바람직하거나 성능에 민감한 컨텍스트에서 동작을 제공하는 경우에만 사용해야합니다.

~a은 대략 parseInt(a) * -1 - 1과 같습니다. 이 특정 예제에서 ~~a에 대한 더 짧은 대안으로 사용할 수 있습니다. s(b) - s(a)입니다. 왜냐하면 * -1 - 1 부분이 뺄셈에서 제거되기 때문입니다 (부호를 고려해야합니다).

+0

예! 여기에 해당 커뮤니티가 있습니다. http://codegolf.stackexchange.com/questions/2682/tips-for-golfing-in-javascript –