Haxe에서의 골프 팁


12

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

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

Haxe는 여기 에서 온라인으로 실행할 수 있습니다 !


나는 과거에 Haxe를 꽤 많이 사용했지만 골프를 시작한 이래로 많이 사용하지 않았습니다. 나는 골프를 위해 그것을
사용해야합니다

@ETHproductions 여기에서도 동일합니다. 오늘은 두 번 골프를 쳤는데 재미있었습니다. 그것은 목록 이해력과 반복자와 같은 좋은 골프 기능을 가지고 있기 때문에 누군가에게 공유 할 팁이 있는지 질문하기 시작했습니다.
Yytsi

답변:


8

문자열 보간

Haxe는 작은 따옴표 문자열에서 문자열 보간 을 지원 합니다 . JavaScript ES6의 템플릿 문자열과 같이 다음을 사용하여 문자열에 표현식을 포함 할 수 있습니다 ${...}.

trace('2 + 2 = ${2 + 2}');

그러나 ES6과 달리 표현식이 단일 변수 인 경우 중괄호를 생략 할 수 있습니다.

var x = 2 + 2;
trace('2 + 2 = $x');

이 두 예제는 모두 print 2 + 2 = 4입니다.


7

배열 이해

Haxe는 배열 이해를 지원합니다.

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

다른 많은 언어 들과는 달리, 당신은 또한 while이해에 사용할 수 있습니다 :

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

필요한 배열의 길이를 모르는 경우 매우 유용합니다.

당신은 또한 체인 for, while그리고 if문 :

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy

와. 답변을 삭제하겠습니다. 나는 문자 그대로 동일한 답변을 늦게 만들었습니다. 또한 목록 주위에 대괄호를 실제로 인쇄하므로 일부 문제는 엄격한 출력 형식이 필요하기 때문에 독자는 혼란을 겪지 않을 것입니다.
Yytsi

@TuukkaX Haha, 가끔 발생합니다 :) 마음에 들지 않으면 여기에 예제 중 하나를 포함시킵니다. 또한 try.haxe.org는 대괄호를 인쇄하지 않는 것 같습니다.
ETHproductions

직교 곱을 계산하는 것은 깔끔합니다. 나는 그것이 귀하의 게시물에 좋은 추가가 될 것이라고 생각합니다 :)
Yytsi

6

범위 연산자

Haxe에는 ...정수 범위를 만드는 데 사용할 수 있는 범위 연산자 가 있습니다. 예를 들어, 대신

var i = 0;
while (i < 10) trace(i++);

당신은 이것을 할 수 있습니다 :

for (i in 0...10) trace(i++);

에 대한 세부 사항 x...y:

  • x그리고 y둘 다 Ints 여야합니다.
  • x보다 클 수 없습니다 y.
  • 이것은 모든 Iterable과 같은 장소에서 사용될 수 있는 IntIterator 객체를 반환합니다 .

1

조건부로 명령문 실행

분명히 다음을 사용하여 조건부로 아무것도 실행할 수 있습니다 if.

if(n>5)doSomething(n);

그러나 위와 같이 하나의 명령문 만있는 경우 삼항 조건부 연산자를 사용하여 바이트를 저장할 수 있습니다.

n>5?doSomething(n):0;

을 사용하여 다른 바이트를 저장하는 &&경우도 있지만 &&두 표현식 모두 부울을 반환하는 경우에만 작동 하기 때문에 매우 드 rare니다 .

n>5&&doSomething(n);

이 한 가지 중요한 예외는 키워드 : Haxe가로 실행되는 경우 return, break또는 continue 어디서든 즉시 실행하고 작업 한 어떤 표현 종료됩니다. 이것은 이것 대신에 :

if(n>5)return n;

이 작업을 수행하면 2 바이트를 절약 할 수 있습니다.

n>5&&return n;

1

표현식에 키워드 사용

Haxe의 또 다른 특이한 특징은 모든 것이 표현 이라는 것입니다 . 예를 들어이 코드는 완벽하게 유효합니다.

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

좋아, 그것은 쓸모없는 예이지만, 당신은 내 요점을 얻길 바랍니다. 대부분의 키워드에서 작동합니다.

function(n){while(n>0)n%4==1?break:n--;return n;}

이렇게하면 물론 짧아도 if/ else인라인 을 사용할 수 있습니다 .p=if(n>1)7else 4;p=n>1?7:4;

인라인을 사용할 수없는 키워드

  • var -컴파일러는 Void를 값으로 사용하려는 것에 대해 불평합니다.
  • for/ while-위와 동일하지만, 배열 이해에 사용할 수 있습니다 .

1

기능 괄호 생략

대부분의 언어와 달리 Haxe의 모든 것은를 포함한 표현{blocks} 입니다. 따라서, Haxe 프로그램의 어느 곳에서든지 ( 괄호 제외) 중괄호 switch는 단일 명령문 만 포함하면 생략 될 수 있습니다. 그래서 이것 대신에 :

function f(n){return Math.pow(3,n);}

당신은 이것을 할 수 있습니다 :

function f(n)return Math.pow(3,n);

많은 기능에 쉬운 2 바이트 저장.

함수에 여러 명령문이 포함되어 있어도 블록 외부 로 이동하여 바이트를 절약 할 수 있습니다 return .

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

이것은 블록이 블록 내부의 마지막 표현식으로 평가되기 때문에 작동합니다.


편집 : 숫자의 큐브가 필요한 경우 n*n*n, 또는 n*n*n*ntesseract의 숫자 등 Math.pow을 사용하는 것이 좋습니다 ... 그러나 여기서는 좋은 예입니다.
Yytsi

@ TuukkaX Heh, 감사합니다. Math.pow(3,n)대신 ;-)를 사용하겠습니다
ETHproductions
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.