ゴルフでの一般的なヒントは何ですか Haxeですか?私はコードゴルフの問題に適用でき、少なくともHaxeに特有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。
回答ごとに1つのヒントを投稿してください。
ゴルフでの一般的なヒントは何ですか Haxeですか?私はコードゴルフの問題に適用でき、少なくともHaxeに特有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。
回答ごとに1つのヒントを投稿してください。
回答:
Haxeは、単一引用符文字列での文字列補間をサポートしています。JavaScript ES6のテンプレート文字列と同様に、文字列に式を含めることができます${...}:
trace('2 + 2 = ${2 + 2}');
ただし、ES6とは異なり、式が単一の変数である場合は中括弧を省略できます。
var x = 2 + 2;
trace('2 + 2 = $x');
これらの例は両方とも印刷されます2 + 2 = 4。
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
Haxeには、...整数の範囲を作成するために使用できる範囲演算子があります。たとえば、これの代わりに:
var i = 0;
while (i < 10) trace(i++);
あなたはこれを行うことができます:
for (i in 0...10) trace(i++);
の詳細x...y:
x そして y両方のint型でなければなりません。x より大きくすることはできません y。明らかに条件付きで何でも実行できますif:
if(n>5)doSomething(n);
ただし、上記のステートメントが1つしかない場合は、三項条件演算子を使用してバイトを保存できます。
n>5?doSomething(n):0;
を使用して別のバイトを保存できる場合がありますが、両方の式がブール値を返す場合にのみ機能する&&ため、これは非常にまれです&&:
n>5&&doSomething(n);
これに対する1つの主な例外はあるキーワード:haXeのはに実行する場合return、breakまたはcontinue どこでも、それはすぐにそれを実行し、それが働いていたものは何でも表現終了します。これは、これの代わりに:
if(n>5)return n;
これにより、2バイトを節約できます。
n>5&&return n;
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/ を使用できますが、もちろん短くなります。elsep=if(n>1)7else 4;p=n>1?7:4;
var -コンパイラは、Voidを値として使用しようとすると文句を言います。for/ while-上記と同じですが、配列内包表記で使用できます。ほとんどの言語とは異なり、Haxeのすべてはを含む式{blocks}です。したがって、Haxeプログラム内のどこでも(switch式を除く)中括弧は、ステートメントが1つしかない場合は省略できます。したがって、これの代わりに:
function f(n){return Math.pow(3,n);}
あなたはこれを行うことができます:
function f(n)return Math.pow(3,n);
多くの機能で節約できる簡単な2バイト。
関数に複数のステートメントを含める必要がある場合でも、ブロックの外側に移動することで1バイトを節約でき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*nに数値のtesseract などに使用することをお勧めします。ただし、Math.powここでは良い例として役立ちます。
Math.pow(3,n)代わりに使用します