Советы по игре в гольф в Haxe


12

Какие общие советы у вас есть для игры в гольф в Haxe ? Я ищу идеи, которые могут быть применены к задачам кода-гольфа и которые, по крайней мере, несколько специфичны для Haxe (например, «удалить комментарии» - это не ответ).

Пожалуйста, оставьте один совет за ответ.

Haxe можно запустить здесь !


В прошлом я довольно часто использовал Haxe, но с тех пор, как начал играть в гольф, я мало этим пользовался. Мне придется попробовать использовать его для игры в гольф ...
ETHproductions

@ETHproductions То же самое здесь. Сегодня я играл в гольф два раза, и это было весело. У него есть некоторые хорошие возможности игры в гольф с (например) его списками и итераторами, поэтому я решил открыть вопрос, чтобы узнать, есть ли у кого-нибудь советы, которыми можно поделиться.
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

Это может быть очень полезно, когда вы не знаете, какой размер массива вам нужен.

Вы можете также цепь 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 Ха-ха, такое иногда случается :) Я приведу здесь один из твоих примеров, если не возражаешь. Кроме того, 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.
  • Это возвращает объект IntIterator , который может использоваться в тех же местах, что и любой Iterable.

1

Условное заявление

Очевидно, что вы можете выполнить что-нибудь условно с if:

if(n>5)doSomething(n);

Однако, если у вас есть только один оператор, как указано выше, вы можете использовать троичный условный оператор для сохранения байта:

n>5?doSomething(n):0;

Иногда вы можете сохранить другой байт с помощью &&, хотя это очень редко, потому что &&работает, только если оба выражения возвращают логическое значение:

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/ elseinline, как p=if(n>1)7else 4;, хотя, конечно p=n>1?7:4;, короче.

Ключевые слова, которые вы не можете использовать inline

  • 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);

Легкие два байта, сохраненные во многих функциях.

Даже если функция должна содержать несколько операторов, вы часто можете сохранить байт, перемещая 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для тессеракта числа и т. Д. Однако, Math.powздесь хороший пример.
Yytsi

@TuukkaX Хех, спасибо. Я буду использовать Math.pow(3,n)вместо ;-)
ETHproductions
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.