님의 골프 팁


11

골프에 대한 일반적인 팁은 무엇입니까 ? 코드 골프 문제에 적용 할 수 있고 최소한 Nim에 특정한 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).

답변 당 하나의 팁을 게시하십시오.

답변:


7

유연한 통화 구문

Nim은 함수 호출 구문과 관련하여 매우 유연합니다. 예를 들어, 하나의 인수로 함수를 호출하는 방법은 다음과 같습니다.

ord(c)
ord c
c.ord

그리고 두 개의 인수로 함수를 호출하는 방법 :

max(a,b)
a.max(b)
a.max b

특히 우선 순위와 관련하여 상황에 가장 적합한 가장 골프 용 버전을 선택하십시오. 예를 들어, 다음을 비교하십시오.

abs(n)+2
n.abs+2
(abs n)+2

반대로 :

abs(n+2)
(n+2).abs
abs n+2

참고 max a,b도 작품을 (때로는).
구리

7

future모듈 사용

future모듈에는 람다와 목록 이해의 두 가지 주요 바이트 절약 기능이 있습니다. 람다는 매우 유용합니다.

예를 들면 다음과 같습니다.

proc f(s:any):any=s&", world!"

이것을 단축 할 수 있습니다 :

import future
s=>s&", world!"

바이트를 저장합니다. 그러나 람다는 매개 변수 목록 외부에서 사용할 수 없으므로 코드를 테스트하려면 다음과 같은 작업을 수행해야합니다.

import future
proc test(f: string -> string) = echo f "Hello"
test(s=>s&", world!")

또한 목록 이해도 future모듈 과 함께 사용할 수 있습니다 . 예를 들어이 코드는 @[...]100으로 나눌 수없는 모든 제곱 의 seq ( )를 4로 인쇄합니다 .

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]

더 공정한 비교를 위해 때로는 (가장 긴 유형 이름을 선택했다고 가정) any대신 대신 사용할 수 string있지만 여전히 관계없이 저장됩니다.
Sp3000

@ Sp3000 any팁을 주셔서 감사합니다. 답변으로 게시해야합니다.
구리

더 나은 비교를 위해, 익명을 위해 proc(s:any):any=s&", world!"드롭을 할 수 있습니다<space>fproc
Sp3000

6

부호없는 연산자

음수가 아닌 정수로 작업 할 때 부호없는 연산자를 사용하는 것이 더 나은 경우가 있습니다. 특히 가능하면 /%%%대신 div및을 사용하십시오 mod.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.