Haxeでのゴルフのヒント


12

ゴルフでの一般的なヒントは何ですか Haxeですか?私はコードゴルフの問題に適用でき、少なくともHaxeに特有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。

回答ごとに1つのヒントを投稿してください。

Haxeはここでオンライン実行できます


私は過去にHaxeをかなり使用していましたが、ゴルフを始めてからあまり使用していません。ゴルフにそれを使ってみなければならない
...-ETHproductions

@ETHproductions同じです。今日、私はそれで2回ゴルフをしました、そしてそれは楽しかったです。リストの内包表記やイテレータなどの優れたゴルフ機能を備えているため、質問を開いて共有するヒントがあるかどうかを確認することにしました。
-Yytsi

回答:


8

文字列補間

Haxeは、単一引用符文字列での文字列補間をサポートしています。JavaScript ES6のテンプレート文字列と同様に、文字列に式を含めることができます${...}

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

ただし、ES6とは異なり、式が単一の変数である場合は中括弧を省略できます。

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

これらの例は両方とも印刷されます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

これは、必要な配列の長さがわからない場合に非常に便利です。

することもできますチェーンforwhileおよび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

ワオ。回答を削除します。文字通り、同じ答えをわずか1分遅れで作成しました。また、リストの周りに角括弧が実際に印刷されるため、読者が混乱することはありません。いくつかの課題には厳密な出力形式が必要なためです。
Yytsi

@TuukkaXハハ、それは時々起こります:)気にしないなら、ここにあなたの例の一つを含めます。また、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両方のint型でなければなりません。
  • x より大きくすることはできません y
  • これは、任意のIterableと同じ場所で使用できるIntIteratorオブジェクトを返します。

1

ステートメントを条件付きで実行する

明らかに条件付きで何でも実行できますif

if(n>5)doSomething(n);

ただし、上記のステートメントが1つしかない場合は、三項条件演算子を使用してバイトを保存できます。

n>5?doSomething(n):0;

を使用して別のバイトを保存できる場合がありますが、両方の式がブール値を返す場合にのみ機能する&&ため、これは非常にまれです&&

n>5&&doSomething(n);

これに対する1つの主な例外はあるキーワード:haXeのはに実行する場合returnbreakまたは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/ を使用できますが、もちろん短くなります。elsep=if(n>1)7else 4;p=n>1?7:4;

インラインで使用できないキーワード

  • var -コンパイラは、Voidを値として使用しようとすると文句を言います。
  • for/ while-上記と同じですが、配列内包表記で使用できます。

1

関数ブラケットを省略

ほとんどの言語とは異なり、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ここでは良い例として役立ちます。
イッツィー

@TuukkaXええ、ありがとう。Math.pow(3,n)代わりに使用します
;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.